Heartbeat + LVS + ldirectord構建可伸縮網路服務

火星人 @ 2014-03-04 , reply:0


Heartbeat + LVS + ldirectord構建可伸縮網路服務

網路環境:
機器數量:2
操作系統:Centos 5.0,Centos 5.2
機器名:centos50,centos52
機器IP:
Centos 5.0: 10.2.20.15
Centos 5.2: 10.2.20.88
虛擬IP: 10.2.20.17

需要的軟體:
httpd:提供web服務
LVS:對web伺服器按照一定的規則進行轉發
Heartbeat:提供ip漂移服務,在主伺服器宕機后,備份伺服器接管虛擬ip
ldirectord:提供lvs控制,監控真實伺服器,出現問題后,對輪循列表進行更新,去除出現問題的伺服器


機器角色:
centos50:主負載均衡器+真實伺服器
centos52:備份負載均衡器+真實伺服器


實現功能:
兩台伺服器做為負載均衡器進行主從互備,並充當真實伺服器功能,對外提供服務,當真實伺服器出現問題后,主負載均衡器能夠檢測到,並從負載均衡輪循列表清除有問題的真實伺服器。
當主負載均衡器出現問題后,備份負載均衡器能夠接管負載均衡服務,使服務不受影響。


1.最小化安裝操作系統;

2.在兩台機器上配置機器名
在/etc/hosts文件中添加主機名記錄,確保兩台機器能夠通過主機名相互ping通


3.安裝httpd,heartbeat,ldirectord
centos 5.2內核已經包含lvs,不用安裝,只安裝httpd,heartbeat,ldirectord
yum install httpd,heartbeat,heartbeat-ldirector


4.配置lvs,在兩台機器上進行如下操作
1).為迴環介面配置虛擬ip
cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
修改/etc/sysconfig/network-scripts/ifcfg-lo:0文件,內容如下:
DEVICE=lo:0
IPADDR=10.2.20.16       #虛擬ip地址
NETMASK=255.255.255.255
BROADCAST=255.255.255.255
ONBOOT=yes
NAME=loopback
啟動lo:0介面
ifup lo:0
2).修改arp轉發規則
修改/etc/sysctl.conf文件,添加如下內容:
net.ipv4.ip_forward = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
運行sysctl -p命令,使用配置生效
3).編寫lvs真實伺服器啟動腳本
在/etc/init.d目錄下新建文件realserver,內容如下:
#!/bin/sh
#Create on 2007-11-21
#Description start lvs,disable arp response
VIP=10.2.20.17    #虛擬ip
#. /etc/rc.d/init.d/functions
case "$1" in
        start)
                echo "lvs start"
                /sbin/ifconfig lo:0 down
                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
        ;;
        stop)
                echo "lvs stop"
                echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
                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
                /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        ;;
        *)
                echo "Usage0 {start|stop}"
                exit
        ;;
esac
修改文件許可權,使腳本有執行許可權
chmod +x realserver


5.配置Heartbeat
1).在/etc/ha.d目錄新建ha.cf文件,內容如下:
logfile    /var/log/ha-log    #heartbeat日誌文件位置
logfacility    local0    #將heartbeat日誌記錄到系統日誌中,可選
keepalive 2    #設定heartbeat之間的檢測時間間隔為2秒
deadtime 30    #在無響應30秒后宣布節點死亡
warntime 10    #在日誌中發出「late heartbeat「警告之前等待的時間,單位為秒
initdead 60    #在某些配置下,重啟后網路需要一些時間才能正常工作。這個單獨的」deadtime」選項可以處理這種情況。它的取值至少應該為通常deadtime的兩倍。
udpport    694    #使用埠694進行bcast和ucast通信。這是默認的,並且在IANA官方註冊的埠號
auto_failback on    #auto_failback設置為on時,一旦主節點重新恢復聯機,將從從節點取回所有資源。若該選項設置為off,主節點便不能重新獲得資源。
watchdog /dev/watchdog    #可以在檢測到heartbeat不正常狀態持續一分鐘后自動重新啟動系統
node    centos50    #集群中機器的主機名,與「uname –n」的輸出相同,主結點
node    centos52    #同上,備份結點
ping 10.2.20.254    #用來為ipfail等模塊檢查網路連接情況的,這裡不應是集群節點
respawn hacluster /usr/lib64/heartbeat/ipfail    #在heartbeat啟動進運行的程序,ipfail插件的用途是檢測網路故障,並作出合理的反應
2).在/etc/ha.d目錄新建authkeys文件,內容如下
auth 1
1 crc
這個文件用來在集群機器間進行認證,如果您的Heartbeat運行於安全網路之上,可以使用crc,從資源的角度來看,這是代價最低的方法。如果網路並不安全,但您也希望降低CPU使用,則使用md5。最後,如果您想得到最好的認證,而不考慮CPU使用情況,則使用sha1,它在三者之中最難破解。
3).在/etc/ha.d目錄新建haresources文件,內容如下
centos50 realserver IPaddr::10.2.20.17 ldirectord
centos50:集群主節點,它應該與uname -n命令輸出的內容相同
realserver,IPaddr,ldirectord:服務腳本,Heartbeat會在以下路徑中尋找有相同名字的服務腳本:/etc/ha.d/resource.d ,/etc/init.d,所以我們的腳本應該在這兩個目錄下
::10.2.20.17:腳本參數,若要向教本傳遞參數,格式應該為: <scriptname>::<argument>
heartbeat 在啟動會使用<scriptname> start形式運行腳本,啟動順序是先運行realserver腳本,再運行IPaddr腳本,最後運行ldirectord腳本,停止時會使用<scriptname> stop運行腳本,停止順序是先停止ldirectord腳本,再停止IPaddr腳本,最後停止realserver腳本。

注意:realserver 腳本的作用比較特殊,我們這裡兩台機器充當的角色比較多,包括主從備份結點,負載均衡器,提供服務的真實伺服器。為了實現真實伺服器功能,我們需要在lo 介面綁定虛擬ip,並修改內核arp轉發規則,使負載均衡功能正常。所以在操作系統啟動時我們配置自動啟動配置了虛擬ip的lo:0介面,並修改內核 arp轉發規則。

主結點heartbeart啟動時,如果不關閉lo:0介面,IPaddr腳本就會運行不正常,不能在真實網卡上綁定虛擬ip。所以在主節點啟動時我們要將lo:0介面關閉,以使IPaddr腳本正常運行,將虛擬ip綁定到真實網卡;在主結點不正常時再通過 realserver腳本啟動lo:0介面,實現真實伺服器功能。

備份結點heartbeat啟動時,會檢測主結點狀態,如果主結點狀態正常,它只充當真實伺服器角色,不會運行haresources裡面的內容,這樣 lo:0介面不會關閉,備份結點的真實伺服器功能就可以實現;在檢測到主結點出現問題后,備份結點要先把lo:0介面關閉,然後在真實網卡綁定虛擬ip,並通過ldirectord配置lvs輪循列表,充當負載均衡器。

這段話比較啰嗦,不知道我說明白沒有!
4).在/etc/ha.d目錄新建ldirectord.cf文件,內容如下
checktimeout=3
checkinterval=5
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes

virtual=10.2.20.17:80
    real=10.2.20.15:80 gate 5
    real=10.2.20.88:80 gate 5
    fallback=127.0.0.1:80 gate
    service=http
    request="test.html"
    receive="Test Page"
    scheduler=wlc
    checktype=negotiate
文件內容的含義,在網上找找,寫不下去了
在web伺服器根目錄新建文件test.html,內容:Test Page
在web伺服器根目錄新建文件index.html,內容:This is server1


5).將以上文件全部複製到另一台機器
scp ha.cf authkeys haresources ldirectord.cf root@xxx.xxx.xxx.xxx:/etc/ha.d/
修改authkeys文件許可權為600
在web伺服器根目錄新建文件test.html,內容:Test Page
在web伺服器根目錄新建文件index.html,內容:This is server2


6.在兩台機器上啟動heartbeat
service heartbeat start


7.測試伺服器狀態
通過ifconfig命令查看主結點是否在真實網卡上綁定了虛擬ip
通過ipvsadm -l 命令查看主結點lvs輪循列表是否正常
通過虛擬ip訪問web服務,並刷新,看負載均衡功能是否正常
通過拔掉主結點網線,查看備份結點是否能夠接管虛擬ip

[ 本帖最後由 lnycm 於 2009-2-12 16:33 編輯 ]
《解決方案》

回復 #1 lnycm 的帖子

提醒一下要保持主從調度伺服器之間的狀態信息的同步
《解決方案》

謝謝樓主分享心得,收藏先
《解決方案》

原帖由 kns1024wh 於 2009-2-12 21:16 發表 http://linux.chinaunix.net/bbs/images/common/back.gif
提醒一下要保持主從調度伺服器之間的狀態信息的同步


在ldirectord的結構中,好像沒有看到狀態信息同步的機制, 在keepalied中好像有這個機制。



[火星人 via ] Heartbeat + LVS + ldirectord構建可伸縮網路服務已經有178次圍觀

http://www.coctec.com/docs/service/show-post-6675.html