字體:  

Centos 5.6 架設 LVS + ipvsadm + heartbeat + ldirectord 負載平衡

nobody 發表於: 2012-2-14 17:54 來源: ADJ網路控股集團


要達到多台web服務多個網站...需要做Web Load Balance~~可以這樣做~~
1. 用 ipvsadm 作負載平衡
2. 加上
heartbeat-ldirectord 作監控,監控那一台主機掛了移除服務,ok的話就再加入服務

ipvsadm for load balance 的網路架構長這樣子

                                                 vip=8.8.8.8 (eth1) => 外部IP
                                        DR     rip=192.168.1.1 (eth0)
                                         |
                                     ---+-----
                                     |           |
                                     |           |
                                  RS1       RS2

rip=192.168.1.2 (eth0)             rip=192.168.1.3 (eth0)

DR server - 也就是 LVS Server ,負載控管,分流服務至實體主機

1. 安裝 ipvsadm
    yum install ipvsadm
    # 版本是 ipvsadm v1.24 2003/06/07 (compiled with popt and IPVS v1.2.0)

2. 讓封包可以 forward
echo 1 > /proc/sys/net/ipv4/ip_forward
3. 建立 LVS
ipvsadm -A -t 8.8.8.8:80 -s rr
ipvsadm -a -t 8.8.8.8:80 -r 192.168.1.2 -g
ipvsadm -a -t 8.8.8.8:80 -r 192.168.1.3 -g
或者根據權重
ipvsadm -A -t 8.8.8.8:80 -s wrr
ipvsadm -a -t 8.8.8.8:80 -r 192.168.1.2 -g -w 6
ipvsadm -a -t 8.8.8.8:80 -r 192.168.1.3 -g -w 3
參數說明
-w    -為 weighted,權重分別為6與3,則連線p分配為1,1,2,1,1,2
-g     -為 LVS/DR,其它 -i 為 LVS/TUN,-m 為 LVS/NAT
-t      -為 tcp
-u     -為 udp
-s     -為 scheduling method
-A     -為增加一 virtual service
-a     -為增加一 virtual server  
4。顯示目前設定狀況
ipvsadm -Ln
5。顯示連線狀況 ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port                   Forward Weight ActiveConn InActConn
TCP 8.8.8.8:http wrr
      -> 8.8.8.8:http                       Route     1          3                  52
      -> 8.8.8.8:http                       Route     1          6                  28
Forward     - 代表是那一種 LVS,Route為LVS/DR,Masq為LVS/NAT,Tunnel為LVS/TUN
ActiveConn - 代表連線狀態為established
InActConn  - 代表連線狀態只是首次連線

6。儲存目前 ipvsadm 設定於檔案中
ipvsadm-save > /etc/sysconfig/ipvsadm
倒回設定檔   
ipvsadm-restore < /etc/sysconfig/ipvsadm
7。ipvsadm 有個啟動檔也就是 /etc/init.d/ipvsadm,它預設會去讀取設定檔 /etc/sysconfig/ipvsadm,或 /etc/ipvsadm.rules

       所以可以建立開機時啟動 chkconfig ipvsadm on


RealServer 1 & 2 - 也就是實際服務的主機

連 http://192.168.1.2/index.html 及 http://192.168.1.3/index.html 個別看到 host 2 及 host 3

測試連 http://192.168.1.1/ 就會看到網頁不停的變化了。

以上的 ipvsadm 設定並不能讓服務完全不中斷,如果一台實體主機掛了,當瀏覽網站時一定會看不到服務,

這時就需要搭配 heartbeat-ldirectord 來監控主機的服務正不正常,不正常就剃除這台主機,等正常了再加入這台主機

1. 安裝
yum install heartbeat heartbeat-ldirectord
2. 編輯 /etc/ha.d/ldirectord.cf
# 當DR收不到realserver的回應,設定幾秒後判定realserver當機 或掛掉了,預設5秒。
checktimeout = 5
# 時間間隔,幾秒偵測一次realserver,預設10秒 。
checkinterval = 10

logfile = "/var/log/ldirectord.log"         
# 或設成
#logfile="local0"

# 當設定檔內容已變動,ldirectord自動 reload設定
autoreload = yes

# 當兩台Real Server 都掛的話,此設定會啟動讓連線連到local(即lvs server)的網頁
fallback=127.0.0.1:80

# 當設定為no時,如果其中一Real Server掛掉,ipvsadm table會移除它,而非weight設為0
quiescent=no

virtual = 192.168.1.1:80
               protocol = tcp
               scheduler = rr
               real = 192.168.1.2:80 gate
               real = 192.168.1.3:80 gate

               # negotiate 表示使用協商的方式check,也就是
               # ldirectord會送出一個要求,然後realserver回
               # 應特定字串,才表是正常。
               # connect表示ldirectord只要能夠連線至realserver
               # 即代表正常,預設為negotiate。
               checktype = negotiate              
               # 設定checktype為negotiate時,必需讓ldirectord
               # 知道service是什麼協定,才能用什麼協定進行協商
               # 但如果在前面的real項目設定有設定port,此時便
               # 可以不設定此項目了。
               service = http        
3. 使用 heartbeat-ldirectord,此後便可不用靠 /etc/init.d/ipvsadm 來啟動 lvs 服務

4. Debug 模式,(不會記錄到/var/log/ldirectord.log)
ldirectord -d start
5. 服務啟動及開機時啟動設定,記得把ipvsadm 的開機時啟動關閉,如果你有設定的話
service ldirectord start
chkconfig ipvsadm off
chkconfig ldirectord on

Session 問題:

每一連線時的session,同時運作在lvs的環境下,會有一問題產生,一User登入web,但session並未同存在另一real server 上,造成等於未登入的狀況。

此時利用ipvsadm的persistent參數,讓同一來源處於都是連到同一台real server。

到這新的問題產生,同一來源一直連到同一台real server,就算此real server掛點,ipvsadm把weight改變為0後,session還是停留在此掛點的real server,為了解決這情況,

利用quescent = no,讓ipvsadm判別此real server掛點,就把此real server從table中拿掉,這時後User之後的連線就會跑到有working的real server

vi /etc/ha.d/ldirectord.cf
quiescent = no
virtual = 192.168.1.1:80
               persistent = 300

文章引用自:  http://ssorc.tw/rewrite.php/read-205.html#ixzz1mLajjkAd
參考:
http://clq1013.blog.hexun.com.tw/36312818_d.html
http://forum.icst.org.tw/phpbb/viewtopic.php?f=10&t=17856