Heartbeat實現LVS的故障轉移

denniswwh發表於2010-10-21
LVS是1998年5月由章文嵩博士發起和領導的優秀的叢集解決方案,許多商業的叢集產品,比如RedHat的Piranha,TurboLinux公司的Turbo Cluster等,都是基於LVS的核心程式碼的。在現實的應用中,LVS得到了大量的部署。[@more@]1.3 用Heartbeat實現LVS的高可用性
LVS可以對Apache等服務實現負載均衡,LVS與Ldirectord搭配使用也可以實現Apache等服務的故障轉移,但是LVS自己本身沒有冗餘機制,因此需要藉助第三方工具Heartbeat來實現。
1.3.1 Heartbeat簡介
Heartbeat最核心包括兩個部分:心跳監測部分和資源接管部分。心跳監測可以透過網路鏈路和串列埠進行,而且支援冗餘鏈路,它們之間相互傳送報文來告訴對方自己當前的狀態,如果在指定的時間內未受到對方傳送的報文,那麼就認為對方失效,這時需啟動資源接管模組來接管執行在對方主機上的資源或者服務。
1.3.2 Heartbeat安裝
建立使用者
groupadd haclient
useradd hacluster -g haclient
先安裝libnet
rpm -ivh libnet-1.1.2.1-2.1.i386.rpm
再安裝Heartbeat
tar jxvf Heartbeat-STABLE-2-1-STABLE-2.1.4.tar.bz2
cd Heartbeat-STABLE-2-1-STABLE-2.1.4
./ConfigureMe install --enable-all
1.3.3 配置LVS Drector的冗餘熱備
假設伺服器A,B的公網IP分別是:
A 192.168.100.10
B 192.168.100.4
叢集虛IP: 192.168.100.200
1.3.3.1 設定伺服器A,B的hostname為test10及test4
如不是請修改/etc/sysconfig/network的HOSTNAME部分,並執行
#hostname test10 以立即生效。
在/etc/hosts加入兩行:
192.168.100.10 test10
192.168.100.4 test4
1.3.3.2 修改伺服器A,B的/etc/sysctl.conf檔案,加入如下5行,並執行
#sysctl -p 以立即生效。

net.ipv4.ip_forward = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.eth0.arp_announce = 2
1.3.3.3 以root進入伺服器A,執行以下配置:
在/etc/init.d/heartbeat中的#!/bin/sh後插入一行:
ifconfig lo:100 192.168.100.200 netmask 255.255.255.255 up

#chkconfig heartbeat --level 35 on
#cd /etc/ha.d 進入叢集配置檔案目錄
#vi authkeys 建立叢集認證檔案
auth 3
3 md5 HA_2009

#chmod 600 authkeys 必要的操作

#vi ha.cf 建立叢集節點檔案
logfile /var/log/ha.log
#logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 80
mcast eth0 231.231.231.231 694 1 0
##有雙網路卡最好做個兩臺機器最好做交叉線連線,eth0 改eth1
#ucast eth0 192.168.100.4 #(test10直接指向對端ip,test4的化ucast eth0 192.168.100.10)
ping 192.168.100.2
auto_failback on
node test10
node test4
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster

叢集中有兩個節點test10及test4,透過多播IP通訊(主要用於超過2個節點)
ping 192.168.100.2 閘道器ping檢測
#vi /etc/ha.d/resource.d/vip.sh 建立我們自己的叢集IP切換shell指令碼
#!/bin/sh
case "$4" in
start)
ifconfig lo:100 down
ifconfig $1:100 $2 netmask $3 up
;;
stop)
ifconfig $1:100 down
ifconfig lo:100 $2 netmask 255.255.255.255 up
;;
esac
/etc/ha.d/resource.d/SendArp 192.168.100.200/eth0 start
最後一行通知其他連線過這臺伺服器的客戶機VIP已經變更,MAC需要更新。

提供了LVS叢集備用節點在迴路地址監聽叢集虛IP以用於應用伺服器。

#chmod +x resource.d/vip.sh

#vi haresources 建立叢集資原始檔
test10 ldirectord::ldirectord.cf LVSSyncDaemonSwap::master vip.sh::eth0::192.168.100.200::255.255.255.0

注:ldirectord是用於管理LVS配置實現Apache的故障轉移,ldirectord.cf檔案的建立,請檢視《使用LVS+Ldirectord實現Web伺服器的負載均衡及故障轉移及其效能測試.doc》
1.3.3.4 在伺服器B上進行第2、3步操作,scp也可。
1.3.4 測試
1、在伺服器A、B上分別執行service heartbeat start 啟動叢集軟體,
及執行service httpd start啟動apache。

2、在伺服器A、B上分別執行:
#echo "WebSite A">/var/www/html/index.html
#echo "WebSite B">/var/www/html/index.html

3、在伺服器A、B上分別執行ifconfig
正常的話, 在伺服器A上出現eth0:100 IP:192.168.100.200
在伺服器B上出現l0:100 IP:192.168.100.200

在伺服器A上執行service heartbeat stop,結果是:
在伺服器A上出現lo0:100 IP:192.168.100.200
在伺服器B上出現eth0:100 IP:192.168.100.200

在伺服器A上執行service heartbeat start將恢復正常情況。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/124805/viewspace-1040162/,如需轉載,請註明出處,否則將追究法律責任。

相關文章