[集群] Heartbeat + LVS + ldirectord構(gòu)建可伸縮網(wǎng)絡服務 (兩臺服務器)
2010-08-01 0:35
網(wǎng)絡環(huán)境:
機器數(shù)量:2 操作系統(tǒng):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服務器按照一定的規(guī)則進行轉(zhuǎn)發(fā) Heartbeat:提供ip漂移服務,在主服務器宕機后,備份服務器接管虛擬ip ldirectord:提供lvs控制,監(jiān)控真實服務器,出現(xiàn)問題后,對輪循列表進行更新,去除出現(xiàn)問題的服務器
機器角色: centos50:主負載均衡器+真實服務器 centos52:備份負載均衡器+真實服務器
實現(xiàn)功能: 兩臺服務器做為負載均衡器進行主從互備,并充當真實服務器功能,對外提供服務,當真實服務器出現(xiàn)問題后,主負載均衡器能夠檢測到,并從負載均衡輪循列表清除有問題的真實服務器。 當主負載均衡器出現(xiàn)問題后,備份負載均衡器能夠接管負載均衡服務,使服務不受影響。
1.最小化安裝操作系統(tǒng);
2.在兩臺機器上配置機器名 在/etc/hosts文件中添加主機名記錄,確保兩臺機器能夠通過主機名相互ping通
3.安裝httpd,heartbeat,ldirectord centos 5.2內(nèi)核已經(jīng)包含lvs,不用安裝,只安裝httpd,heartbeat,ldirectord yum install httpd,heartbeat,heartbeat-ldirector
4.配置lvs,在兩臺機器上進行如下操作 1).為回環(huán)接口配置虛擬ip cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0 修改/etc/sysconfig/network-scripts/ifcfg-lo:0文件,內(nèi)容如下: 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轉(zhuǎn)發(fā)規(guī)則 修改/etc/sysctl.conf文件,添加如下內(nèi)容: 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,內(nèi)容如下: #!/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 修改文件權(quán)限,使腳本有執(zhí)行權(quán)限 chmod +x realserver
5.配置Heartbeat 1).在/etc/ha.d目錄新建ha.cf文件,內(nèi)容如下: logfile /var/log/ha-log #heartbeat日志文件位置 logfacility local0 #將heartbeat日志記錄到系統(tǒng)日志中,可選 keepalive 2 #設定heartbeat之間的檢測時間間隔為2秒 deadtime 30 #在無響應30秒后宣布節(jié)點死亡 warntime 10 #在日志中發(fā)出“l(fā)ate heartbeat“警告之前等待的時間,單位為秒 initdead 60 #在某些配置下,重啟后網(wǎng)絡需要一些時間才能正常工作。這個單獨的”deadtime”選項可以處理這種情況。它的取值至少應該為通常deadtime的兩倍。 udpport 694 #使用端口694進行bcast和ucast通信。這是默認的,并且在IANA官方注冊的端口號 auto_failback on #auto_failback設置為on時,一旦主節(jié)點重新恢復聯(lián)機,將從從節(jié)點取回所有資源。若該選項設置為off,主節(jié)點便不能重新獲得資源。 watchdog /dev/watchdog #可以在檢測到heartbeat不正常狀態(tài)持續(xù)一分鐘后自動重新啟動系統(tǒng) node centos50 #集群中機器的主機名,與“uname –n”的輸出相同,主結(jié)點 node centos52 #同上,備份結(jié)點 ping 10.2.20.254 #用來為ipfail等模塊檢查網(wǎng)絡連接情況的,這里不應是集群節(jié)點 respawn hacluster /usr/lib64/heartbeat/ipfail #在heartbeat啟動進運行的程序,ipfail插件的用途是檢測網(wǎng)絡故障,并作出合理的反應 2).在/etc/ha.d目錄新建authkeys文件,內(nèi)容如下 auth 1 1 crc 這個文件用來在集群機器間進行認證,如果您的Heartbeat運行于安全網(wǎng)絡之上,可以使用crc,從資源的角度來看,這是代價最低的方法。如果網(wǎng)絡并不安全,但您也希望降低CPU使用,則使用md5。最后,如果您想得到最好的認證,而不考慮CPU使用情況,則使用sha1,它在三者之中最難破解。 3).在/etc/ha.d目錄新建haresources文件,內(nèi)容如下 centos50 realserver IPaddr::10.2.20.17 ldirectord centos50:集群主節(jié)點,它應該與uname -n命令輸出的內(nèi)容相同 realserver,IPaddr,ldirectord:服務腳本,Heartbeat會在以下路徑中尋找有相同名字的服務腳本:/etc/ha.d/resource.d ,/etc/init.d,所以我們的腳本應該在這兩個目錄下 ::10.2.20.17:腳本參數(shù),若要向教本傳遞參數(shù),格式應該為: <scriptname>::<argument> heartbeat 在啟動會使用<scriptname> start形式運行腳本,啟動順序是先運行realserver腳本,再運行IPaddr腳本,最后運行l(wèi)directord腳本,停止時會使用<scriptname> stop運行腳本,停止順序是先停止ldirectord腳本,再停止IPaddr腳本,最后停止realserver腳本。
注意:realserver 腳本的作用比較特殊,我們這里兩臺機器充當?shù)慕巧容^多,包括主從備份結(jié)點,負載均衡器,提供服務的真實服務器。為了實現(xiàn)真實服務器功能,我們需要在lo 接口綁定虛擬ip,并修改內(nèi)核arp轉(zhuǎn)發(fā)規(guī)則,使負載均衡功能正常。所以在操作系統(tǒng)啟動時我們配置自動啟動配置了虛擬ip的lo:0接口,并修改內(nèi)核 arp轉(zhuǎn)發(fā)規(guī)則。
主結(jié)點heartbeart啟動時,如果不關閉lo:0接口,IPaddr腳本就會運行不正常,不能在真實網(wǎng)卡上綁定虛擬ip。所以在主節(jié)點啟動時我們要將lo:0接口關閉,以使IPaddr腳本正常運行,將虛擬ip綁定到真實網(wǎng)卡;在主結(jié)點不正常時再通過 realserver腳本啟動lo:0接口,實現(xiàn)真實服務器功能。
備份結(jié)點heartbeat啟動時,會檢測主結(jié)點狀態(tài),如果主結(jié)點狀態(tài)正常,它只充當真實服務器角色,不會運行haresources里面的內(nèi)容,這樣 lo:0接口不會關閉,備份結(jié)點的真實服務器功能就可以實現(xiàn);在檢測到主結(jié)點出現(xiàn)問題后,備份結(jié)點要先把lo:0接口關閉,然后在真實網(wǎng)卡綁定虛擬ip,并通過ldirectord配置lvs輪循列表,充當負載均衡器。
這段話比較啰嗦,不知道我說明白沒有! 4).在/etc/ha.d目錄新建ldirectord.cf文件,內(nèi)容如下 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 文件內(nèi)容的含義,在網(wǎng)上找找,寫不下去了 在web服務器根目錄新建文件test.html,內(nèi)容:Test Page 在web服務器根目錄新建文件index.html,內(nèi)容:This is server1
5).將以上文件全部復制到另一臺機器 scp ha.cf authkeys haresources ldirectord.cf root@xxx.xxx.xxx.xxx:/etc/ha.d/ 修改authkeys文件權(quán)限為600 在web服務器根目錄新建文件test.html,內(nèi)容:Test Page 在web服務器根目錄新建文件index.html,內(nèi)容:This is server2
6.在兩臺機器上啟動heartbeat service heartbeat start
7.測試服務器狀態(tài) 通過ifconfig命令查看主結(jié)點是否在真實網(wǎng)卡上綁定了虛擬ip 通過ipvsadm -l 命令查看主結(jié)點lvs輪循列表是否正常 通過虛擬ip訪問web服務,并刷新,看負載均衡功能是否正常 通過拔掉主結(jié)點網(wǎng)線,查看備份結(jié)點是否能夠接管虛擬ip | |
|