流量不大,卻Connection time 過久,造成網頁出不來

一台Ubuntu 12.04 x64 裝 Apache,
是VM 主機,2 Core,4GB Ram,
連網頁時,會發生 Connection time 過久到 timeout,
這台是用worker module,
修正參數如下
<IfModule mpm_worker_module>
StartServers 2
ServerLimit 200
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxClients 5000
MaxRequestsPerChild 0
</IfModule>

明顯的改善到10~20ms

後記
發現Log會有 kernel: nf_conntrack: table full, dropping packet 的情形,
(因為此機器,有使用iptables,如果不用,不會有這問題)
而造成在某一時段時,會突然Connection time拉到1~4秒,連線變很慢,
解決table full 的方法很多
廠商給的建議是調整以下兩參數,
ip_conntrack_max
ip_conntrack_tcp_timeout_established
在Ubuntu 12.04 下是在
/proc/sys/net/ipv4/netfilter
ip_conntrack_max = 655350
ip_conntrack_tcp_timeout_established = 10800

可寫到 sysctl.conf
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.netfilter.ip_conntrack_max = 655350
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 10800
記得要 sysctl -p

又或寫到 rc.local
echo 655350 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
echo 10800 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

心得
機器上線前,要考量可能的連線數,
不只調整Apache,也記得要調整核心參數,
尤其是有用iptables時


參考
http://blog.yorkgu.me/2012/02/09/kernel-nf_conntrack-table-full-dropping-packet/
http://storysky.blog.51cto.com/628458/243835

後後記...
攻擊無所不在,
kern.log會出現一堆 unexpectedly shrunk window的訊息,
再安裝fail2ban,來防止此問題

我們需要增加檔案 /etc/fail2ban/filter.d/shrunk-window.conf
內容如下
[Definition]
failregex = TCP\: Peer <HOST>\:.* unexpectedly shrunk window.*repaired+
ignoreregex =
修改 /etc/fail2ban/jail.conf 加入
[shrunk-window]
enabled  = true
filter = shrunk-window
logpath = /var/log/kern.log
port = all
banaction= iptables-allports
port = anyport
maxretry = 1
可以利用 fail2ban-regex 指令檢查shrunk-window.conf內的failregex有無問題!
http://linux.die.net/man/1/fail2ban-regex
# fail2ban-regex /var/log/kern.log /etc/fail2ban/filter.d/shrunk-window.conf
如果列出了那些警告訊息,那就表示成功了!
此引用參考
http://petonline.dyndns.org/node/114

後後後記.............
在高峰時段,流量雖沒衝到100M以上,但Connection time就是會超過一秒,
因為流量小,不代表連線數少,
大約會有四五仟左右,不含time wait,syn_recv等....
因此再修正
<IfModule mpm_worker_module>
   StartServers 2
   ServerLimit 200
   MinSpareThreads 25
   MaxSpareThreads 75
   ThreadsPerChild 50
   MaxClients 10000
   MaxRequestsPerChild 0
</IfModule>
再度明顯改善.......
要時時觀察 Connection 數,來做調整....

~~


VERR_UNRESOLVED_ERROR


VirtualBox 開一台VM Linux 時發生如上圖的狀況,
很肯定硬碟還有空間,
整台也chkdsk過,不是硬碟問題,
結論是,下壓縮指令,
VBoxManage modifyvdi  XXX.vdi compact
就可正常開啟VM了

昨天是秋分,也結束一段感情....唉..






ping general failure

一台 2008 r2 去ping外網會general failure
在另一實體ip段,卻不會,很怪,
原因在於
網卡中將NLB給打勾.....
就會如此....

原本不會或許是因原架構是在Loadbalance底下的關係


~~


載著夢想的熱氣球



花蓮的熱氣球,感覺上差了台東一點,
可能是整體觀看的感覺,
不過還是希望朋友們能來花蓮捧場,
畢竟還是有點差異性

至於我什麼時候能回花蓮,
計畫永遠趕不上變化...

~~



飛蚊症....眼睛積水

2012年7月2日真是糟糕的一天
我的右眼玻璃體退化
從此..我的世界不一樣了

以為是世界末日...
才發現很多人都如此..
但就是很難適應...
我要如何度過這難關呢...

後記....
去了第三家醫院....
醫生說...我是眼睛積水..
............
三個月後..
水退了..
但我的視野......
總覺得不像以前那樣....




gvpe 安裝操作

由於也有在用gvpe來作vpn site to site,怕久了忘記,所以寫來備忘,
參考網路上兩位前輩的設定....實作是沒問題的,
也可看gvpe中的README..

假設有二台主機,分別為Private1Private2,先在Private1操作
  1. tar -zxvf gvpe-2.24.tar.gz -C /usr/src/
  2. ./configure ( ./configure --enable-digest=sha512 --enable-cipher=aes-256 )
  3. make
  4. make install
  5. mkdir /etc/gvpe 目錄
  6. create gvpe.conf 內容如下,
    rekey = 300
    keepalive = 300
    mtu = 1500
    ifname = vpn0
    ifpersist = no
    inherit-tos = yes
    compress = yes
    connect = always
    loglevel = notice
    enable-udp = yes
    enable-tcp = yes
    enable-rawip = no
    enable-icmp = yes
    node= Private1
    hostname = 1.2.3.4 <Public IP>
    node= Private2
    hostname = 5.6.7.8 <Public IP>
  7. create if-up 內容如下
    #!/bin/bash
    ip link set "$IFNAME" address "$MAC" txqlen 1000 up
    [ "$NODENAME" = "Private1" ] && ip addr add 10.100.1.1 broadcast 10.100.1.255 dev "$IFNAME"
    [ "$NODENAME" = "Private2" ] && ip addr add 10.100.2.1 broadcast 10.100.2.255 dev "$IFNAME"
    ip route add 10.100.0.0/16 dev "$IFNAME"
    IN_NIC="eth0"   #eth0是指內部網段
    IN_IP=`ifconfig "$IN_NIC"|grep -w "inet addr"|cut -d':' -f2|cut -d' ' -f1`
    IN_IP_SUB=`echo "$IN_IP"|cut -d. -f3`
    for i in 1 2
    do
    if [ "$i" = "$IN_IP_SUB" ]
    then
    continue
    fi
    route add -net 10.100.$i.0 netmask 255.255.255.0 gw 10.100."$i".1
    done
  8. gvpectrl -c /etc/gvpe -g
  9. gvpe.confif-up拷貝到Private2 主機的 /etc/gvpe
  10. pubkey目錄也是整個拷到Private2 主機的 /etc/gvpe
  11. cp /etc/gvpe/hostkeys/Private1 /etc/gvpe/hostkey
  12. 而Private1主機中 hostkeys目錄下的Private2 則拷到Private2主機的 /etc/gvpe/hostkey
  13. Private2主機要重複上面16步驟
  14. 在Private1 主機上執行 /usr/local/sbin/gvpe -c /etc/gvpe gvpe -D -l info Private1
  15. 在Private2 主機上執行 /usr/local/sbin/gvpe -c /etc/gvpe gvpe -D -l info Private2
  16. 如有成功會出現connection established
  17. ping 對方的10.100.1.110.100.2.1應會是通的




附註說明

製造金鑰
# gvpectrl -c /etc/gvpe -g
這個產生key的指令會略過已經存在的Key

啟動gvpe
# /usr/local/sbin/gvpe -c /etc/gvpe -D -L -linfo Private2
Private2是指node

Configuration
#gvpectrl -c /etc/gvpe -s

檢查是否通
tcpdump -i vpn0 -vv
vpn0gvpe.conf所定義的虛擬網卡名稱

參考引用自:



LVS 配置 Windows 2003 RealServer 解決arp問題

在 Windows 2003下如何解決RealServer 的Arp 問題
其它Windows Server 應是大同小異













































先將Loopback AdapterVip ip,然後修改機碼 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\
找到設為VipIPADDR修改SubnetMask255.255.255.255




最後重啟LoopBack Adapter網卡

參考引用自

CentOS 6.2 下搭建LVS(DR)+Keepalived實現高性能高可用負載均衡服務器

CentOS 6.2 下搭建LVS(DR)+Keepalived實現高性能高可用負載均衡服務器


前言部分來源於網路


背景:
       
隨著你的網站業務量的增長你網站的服務器壓力越來越大?需要負載均衡方案!商業的硬件如F5又太貴,你們又是創業型互聯公司如何有效節約成本,節省不必要的浪費?時實現商業硬件一樣的高性能高可用的功能?有什麼好的負載均衡可伸張可擴展的方案嗎?答案是肯定的!有!我們利用LVS+Keepalived基於完整開源軟件的架構可以為你提供一個負載均衡及高可用的服務器。

1
LVS+Keepalived
LVS
Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在19985月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。
目前有三種IP負載均衡技術 (VS/NATVS/TUN 和 VS/DR) 


十種調度算法 (rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
Keepalived在這裡主要用作 RealServer 的健康狀態檢查以及LoadBalance主機和BackUP主機之間 failover 的實現

2
負載均衡拓撲圖



3、在2Director ServerLVS_Master)上分配置LVS+Keepalived
實驗環境是CentOS6.2 ,且配置YUM
keepalived
http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
ipvsadm: http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz 
注意:(for kernel 2.6.28-rc3 or later) 
popt-static
http://mirror.centos.org/centos/6/os/x86_64/Packages/popt-static-1.13-7.el6.x86_64.rpm
首先下載popt-static:具體原因可以查看http://crazylinux.blog.51cto.com/259244/811591
[root@host1 ~]# rpm -ivh popt-static-1.13-7.el6.x86_64.rpm  [root@host1 ~]# yum -y install kernel-devel make gcc openssl-devel  libnl* popt*
[root@host1 ~]# ln -s /usr/src/kernels/2.6.18-194.el5-x86_64/ /usr/src/linux

[root@host1 ~]# tar -zxvf ipvsadm-1.26.tar.gz -C /usr/src/
[root@host1 ~]# cd /usr/src/ipvsadm-1.26/
[root@host1 ipvsadm-1.26]# make
[root@host1 ipvsadm-1.26]# make install
[root@host1 ~]# tar -zxvf keepalived-1.2.2.tar.gz -C /usr/src/
[root@host1 ~]# cd /usr/src/keepalived-1.2.2/
[root@host1 keepalived-1.2.2]# ./configure
[root@host1 keepalived-1.2.2]# make
[root@host1 keepalived-1.2.2]# make install
[root@host1 keepalived-1.2.2]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
[root@host1 keepalived-1.2.2]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
[root@host1 keepalived-1.2.2]# mkdir /etc/keepalived
[root@host1 keepalived-1.2.2]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
[root@host1 keepalived-1.2.2]# cp /usr/local/sbin/keepalived /usr/sbin/


4
、在2Director ServerLVS_Master)上分配置Keepalived
[root@host1 ~]# less /etc/keepalived/keepalived.conf   
! Configuration File for keepalived   
global_defs {  
   router_id  LVS_MASTER     網上資料說這個值也需要修改,具體不詳,之前我們線上的主備就一直是一樣的 ^ ^還是修改一下吧!   
}  
vrrp_instance VI_1 {   
    state MASTER          # LVS_Backup上修改成BACKUP  
    interface eth0   
    virtual_router_id 51   
    priority 100                # LVS_Backup上修改成80 
    advert_int 1   
    authentication {   
        auth_type PASS   
        auth_pass 1111   
    }   
    virtual_ipaddress {   
        192.168.10.100   
    }   
}  
virtual_server 192.168.10.100 80 {   
    delay_loop 6   
    lb_algo rr   
    lb_kind DR   
    nat_mask 255.255.255.0   
    persistence_timeout 50   
    protocol TCP   
    real_server 192.168.10.3 80 {   
        weight 1   
        TCP_CHECK {   
        connect_timeout 10   
        nb_get_retry 3   
        connect_port 80   
        }   
    }   
    real_server 192.168.10.4 80 {   
        weight 1   
        TCP_CHECK {   
        connect_timeout 10   
        nb_get_retry 3   
        connect_port 80   
        }   
    }   
}

BACKUP服務器同上配置,先安裝lvs再按裝keepalived,然後配置/etc/keepalived/keepalived.conf,只需將紅色標示的部分改一下即可。


5、分2Real Server上面編寫腳本並啟動 (Windows 請參考另一篇)
[root@host3 init.d]# cat /etc/init.d/realserver.sh      
#!/bin/bash  
SNS_VIP=192.168.10.100            
. /etc/rc.d/init.d/functions            
case "$1" in 
start)  
        ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP   
        /sbin/route add -host $SNS_VIP dev lo:0   
        echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore   #啟動是抑制相關arp動作
        echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce   
        echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore   
        echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce   
        sysctl -p >/dev/null 2>&1   
        echo "RealServer Start OK"           
        ;;   
stop)  
        ifconfig lo:0 down   
        route del $SNS_VIP >/dev/null 2>&1   
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore   
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce   
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore   
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce   
        echo "RealServer Stoped" 
        ;;   
        *)   
        echo "Usage: $0 {start|stop}" 
        exit 1   
esac            
exit 0       


6、在2RealServer中分配置HTTP並啟動 realserver.sh
[root@host3 ~]# yum -y install httpd
[root@host3 ~]# cd /var/www/html/
[root@host3 html]# cat index.html
<h1>RealServer 192.168.10.3</h1>
[root@host3 html]# /etc/init.d/httpd start
[root@host3 ~]# /etc/init.d/realserver.sh start

另一台機器配置一樣,過程略、、、


7測試
分別啟動Keepalived
[root@host1 ~]# chkconfig keepalived on
[root@host1 ~]# /etc/init.d/keepalived restart
[root@host1 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.10.100:http rr persistent 50
  -> 192.168.10.3:http            Route   1      0          0         
  -> 192.168.10.4:http            Route   1      0          0   
先關閉LVS_MasterKeepalived,觀察LVS_Backup的日誌

[root@host2 ~]# tail -f /var/log/messages
Mar 21 07:22:28 host2 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Mar 21 07:22:29 host2 Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Mar 21 07:22:29 host2 Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
Mar 21 07:22:29 host2 Keepalived_healthcheckers: Netlink reflector reports IP 192.168.10.100 added
Mar 21 07:22:29 host2 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.10.100


在測試機上訪問:




啟動LVS_Master,在查看LVS_Backup


[root@host2 ~]# tail -f /var/log/messages

Mar 21 07:26:20 host2 Keepalived_vrrp: VRRP_Instance(VI_1) Received higher prio advert

Mar 21 07:26:20 host2 Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE

Mar 21 07:26:20 host2 Keepalived_vrrp: VRRP_Instance(VI_1) removing protocol VIPs.

Mar 21 07:26:20 host2 Keepalived_healthcheckers: Netlink reflector reports IP 192.168.10.100 removed




一切訪問正常~!祝各位好運!~


本文出自 “CrazyLinux工作室” 博客,請務必保留此出處http://crazylinux.blog.51cto.com/259244/811952



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
個人實作上遇到的問題....
1.  在打ipvsadm -lcn 看到 syn_recv一堆,怎麼樣就是不能連到 RIP 的網頁,錯就錯在我把   realserver.sh 的SNS_VIP一直寫成LVS主機的實體ip...如用以上範例來解釋,就是寫成192.168.10.1...就會發生這種情形...


2. 如把realserver.sh stop 停用,然後再start,在連LVS的VIP時,有可能完全沒連線,這時請把 網頁關閉或電腦的 arp 清掉,再開即可


3. syn_recv  問題還有可能就是 keepalived.conf 中的 interface介面設錯(eth1打成eth0等等),也會如此,跨不同的網段(10.1.1的想跨到192.168.1)也會如此,這都是要注意的




相關 LVS 解釋可參考
http://www.lslnet.com/linux/f/docs1/i38/big5277307.htm

~~

Windows 下 VirtualBox如何複製vdi檔案(取得新的uuid)


1.找出 VBoxManage.exe
  example:
  "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
2.
指令 clonevdi
    "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonevdi <vdi
檔案路徑> <新的vdi檔案路徑>





3.
使用VirtualBox選擇新增,vdi掛載進去
新增時,記得選擇使用已存在的硬碟檔案,否則系統會產生新的vdi檔案,就必須重灌系統

或者


將原vdi複製到另一個地方,然後修改該UUID,修改指令如下:
"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" internalcommands sethduuid <vdi
檔案名稱


改完之後的VDI,要用新增的方式掛載,如步驟3

個人是覺得用修改UUID會較快,
而在WinXP下 clonevdi...百分比進度會卡卡,但實際已完成,
在Win7下就很正常...

引用參考