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