IPVS-DR+heartbeat+ldirectord實作高可用負載均衡叢集
一、環境
節點類型 主機名 ip位址
lvs-master node0 eth0:192.168.32.30
eth1:10.160.100.30 heart
vip:192.168.32.21
lvs-backup node1 eth0:192.168.32.31
eth1:10.160.100.31 heart
RealServer1 node2 eth0:192.168.32.32
eth1:10.160.100.32
RealServer2 node3 eth0:192.168.32.33
eth1:10.160.100.33
二、安裝
1、安裝libnet
[root@node1 ~]# tar -zxvf libnet-1.1.4.tar.gz
[root@node1 ~]# cd libnet-1.1.4
[root@node1 libnet-1.1.4]# ./configure
[root@node1 libnet-1.1.4]# make;make install
#libnet是一個高層次API工具,使用heartbeat需要用到他
2、安裝heartbeat
[root@node1 ~]# tar -zxvf heartbeat-2.1.3.tar.gz
[root@node1 ~]# cd heartbeat-2.1.3
[root@node1 heartbeat-2.1.3]# ./ConfigureMe configure --disable-swig --disable-snmp-subagent
[root@node1 heartbeat-2.1.3]# make ; make install
[root@node1 heartbeat-2.1.3]# cp doc/ha.cf doc/haresource doc/anthkeys /etc/ha.d/
#heartbeat複制樣本配置檔案(ha.cf、haresources、authkeys要到/etc/ha.d目錄下面
[root@node1 heartbeat-2.1.3]# cp ldirectord/ldiretord.cf /etc/ha.d/
#複制ldirectord的配置檔案至/etc/ha.d目錄下
[root@node1 heartbeat-2.1.3]# grouadd -g 694 haclient
#添加heartbeat運作需要的haclient組
[root@node1 heartbeat-2.1.3]# useradd -u 694 -g 694 hacluster
#添加heartbeat運作需要的hacluster使用者
#heartbeat的安裝包中預設包含ldirectord插件,該插件主要用于管理負載均衡,為保證ldirectord可用還行安裝perl-Mailtools
[root@node1 ~]# yum install perl-TimeDate.noarch
[root@node1 ~]# rpm -ivh perl-MailTools-2.04-1.el5.rf.noarch.rpm
#安裝ldirectord正常運作所需依賴工具
3、安裝ipvsadm
[root@node1 ~]# yum install ipvsadm.i386
[root@node1 ~]# modprobe -l | grep ipvs
/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs.ko
/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_dh.ko
/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_ftp.ko
/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_lblc.ko
/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko
/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_lc.ko
/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_nq.ko
/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_rr.ko
/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_sed.ko
/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_sh.ko
/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_wlc.ko
/lib/modules/2.6.18-194.el5PAE/kernel/net/ipv4/ipvs/ip_vs_wrr.ko
#檢視核心是否加載ipvs子產品
三、配置ldirectord
[root@node1 ~]# vim /etc/ha.d/ldirectord.cf
checktimeout=3 #檢測逾時時間
checkinterval=1 #檢測時間
autoreload=yes #配置檔案改動時是否自動加載
logfile="/var/log/ldirectord.log" # ldirectord日志路徑
quiescent=yes #檢測到real server異常後是否保留該real server的配置
virtual=192.168.32.21:80 #VIP
real=192.168.32.32:80 gate #Real Server1
real=192.168.32.33:80 gate #Real Server2
service=http
request="test.html"
#要求httpd根下必須存在test.html檔案且内容為receive參數所定義
receive="test"
virtualhost=httpd #随意定義
scheduler=rr #LVS負載算法,rr:輪詢
persistent=600 #連接配接會話保持時間
protocol=tcp
checktype=negotiate #通過互動來判斷服務是否正常
checkport=80
[root@node1 ~]# scp /etc/ha.d/ldirectord node0:/etc/ha.d/ldirectord
#確定兩lvs主機(node0和node1)ldirectord.cf檔案内容完全一樣
四、heartbeat(兩台lvs伺服器node0和node1配置完全一樣)
1、heartbeat主配置檔案(/etc/ha.d/ha.cf)
[root@node1 ha.d]# vim /etc/ha.d/ha.cf
#debugfile /var/log/ha-debug
logfile /var/log/ha-log
#指名heartbeat的日志存放位置。
#crm yes
#是否開啟Cluster Resource Manager(叢集資源管理)功能。
bcast eth1
#指明心跳使用以太網廣播方式,并且是在eth1接口上進行廣播。
keepalive 2
#指定心跳間隔時間為2秒(即每兩秒鐘在eth1上發送一次廣播)。
deadtime 30
#指定備用節點在30秒内沒有收到主節點的心跳信号後,則立即接管主節點的服務資源。
warntime 10
#指定心跳延遲的時間為十秒。當10秒鐘内備份節點不能接收到主節點的心跳信号時,就會往日志中寫入一個警告日志,但此時不會切換服務。
initdead 120
#在某些系統上,系統啟動或重新開機之後需要經過一段時間網絡才能正常工作,該選項用于解決這種情況産生的時間間隔。取值至少為deadtime的兩
倍。
udpport 694 #設定廣播通信使用的端口,694為預設使用的端口号。
#baud 19200 #設定串行通信的波特率。
#serial /dev/ttyS0 #選擇串行通信裝置,用于雙機使用序列槽線連接配接的情況。如果雙機使用以太網。
#ucast eth0 192.168.1.2 #采用網卡eth1的udp單點傳播來組織心跳,後面跟的IP位址應為雙機對方的IP位址。
#mcast eth0 225.0.0.1 694 1 0 #采用網卡eth0的Udp多點傳播來組織心跳,一般在備用節點不止一台時使用。Bcast、ucast和mcast分别代表廣播、單點傳播和多點傳播,是組織心跳的三種方式,任選其一即可。
auto_failback on
#用來定義當主節點恢複後,是否将服務自動切回,heartbeat的兩台主機分别為主節點和備份節點。主節點在正常情況下占用資源并運作所有的服務,遇到故障時把資源交給備份節點并由備份節點運作服務。在該選項設為on的情況下,一旦主節點恢複運作,則自動擷取資源并取代備份節點,如果該選項設定為off,那麼當主節點恢複後,将變為備份節點,而原來的備份節點成為主節點。
#stonith baytech /etc/ha.d/conf/stonith.baytech
# stonith的主要作用是使出現問題的節點從叢集環境中脫離,進而釋放叢集資源,避免兩個節點争用一個資源的情形發生。保證共享資料的安全性和完整性。
#watchdog /dev/watchdog
#該選項是可選配置,是通過Heartbeat來監控系統的運作狀态。使用該特性,需要在核心中載入"softdog"核心子產品,用來生成實際的裝置檔案,如果系統中沒有這個核心子產品,就需要指定此子產品,重新編譯核心。編譯完成輸入"insmod softdog"加載該子產品。然後輸入"grep misc /proc/devices"(應為10),輸入"cat /proc/misc |grep watchdog"(應為130)。最後,生成裝置檔案:"mknod /dev/watchdog c 10 130" 。即可使用此功能。
node node0 #主節點主機名,可以通過指令“uanme –n”檢視。
node node1 #備用節點主機名。
ping 192.168.32.254
#選擇ping的節點,ping 節點選擇的越好,HA叢集就越強壯,可以選擇固定的路由器作為ping節點,但是最好不要選擇叢集中的成員作為ping節點
,ping節點僅僅用來測試網絡連接配接。
#ping_group group1 192.168.12.251 192.168.12.239 #類似于ping。
#respawn hacluster /usr/local/ha/lib/heartbeat/ipfail
#apiauth pingd gid=haclient uid=hacluster
apiauth pingd gid=root uid=root
respawn hacluster /usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s
#該選項是可選配置,列出與heartbeat一起啟動和關閉的程序,該程序一般是和heartbeat內建的插件,這些程序遇到故障可以自動重新啟動。最常用的程序是pingd,此程序用于檢測和監控網卡狀态,需要配合ping語句指定的ping node來檢測網絡的連通性。其中hacluster表示啟動pingd程序的身份。
#下面的配置是關鍵,也就是激活crm管理,開始使用v2 style格式
crm respawn
#注意,還可以使用crm yes的寫法,但這樣寫的話,如果後面的cib.xml配置有問題
#會導緻heartbeat直接重新開機該伺服器,是以,測試時建議使用respawn的寫法
#下面是對傳輸的資料進行壓縮,是可選項
compression bz2
compression_threshold 2
#注意,v2 style不支援ipfail功能,須使用pingd代替
[root@node1 ~]# scp /etc/ha.d/ha.cf node0:/etc/ha.d/ha.cf
#拷貝主配置檔案到node0上
2、認證檔案(/etc/ha.d/authkeys)
[root@node1 resource.d]# vim /etc/ha.d/authkeys
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
#authkeys檔案用于設定heartbeat的認證方式,共有三種可用的認證方式:crc、md5和sha1,三種認證方式的安全性依次提高,但是占用的系統資源也依次增加。如果heartbeat叢集運作在安全的網絡上,可以使用crc方式,如果HA每個節點的硬體配置很高,建議使用sha1,這種認證方式安全級别最高,如果是處于網絡安全和系統資源之間,可以使用md5認證方式。無論auth後面指定的是什麼數字,在下一行必須作為關鍵字再次出現,例如指定了“auth 6”,下面一定要有一行“6 認證類型”。最後確定這個檔案的權限是600(即-rw-------)。
[root@node1 ~]# scp /etc/ha.d/authkeys node0:/etc/ha.d/authkeys
#拷貝認證檔案到node0上
3、資源檔案
[root@node1 ~]# vim /etc/ha.d/haresources
node0 IPaddr2::192.168.32.21/24/eth0 ldirectord::ldirectord.cf LVSSyncDaemonSwap::master
#添加VIP,通過ldirectord啟動lvs配置
#haresources檔案用于指定雙機系統的主節點、叢集IP、子網路遮罩、廣播位址以及啟動的服務等叢集資源,檔案每一行可以包含一個或多個資源腳本名,資源之間使用空格隔開,參數之間使用兩個冒号隔開,在兩個HA節點上該檔案必須完全一緻,此檔案的一般格式為:
node-name network <resource-group>
#node-name表示主節點的主機名,必須和ha.cf檔案中指定的節點名一緻,network用于設定叢集的IP位址、子網路遮罩、網絡裝置辨別等,需要注意的是,這裡指定的IP位址就是叢集對外服務的IP位址,resource-group用來指定需要heartbeat托管的服務,也就是這些服務可以由heartbeat來啟動和關閉,如果要托管這些服務,必須将服務寫成可以通過start/stop來啟動和關閉的腳步,然後放到/etc/init.d/或者/etc/ha.d/resource.d/目錄下,heartbeat會根據腳本的名稱自動去/etc/init.d或者/etc/ha.d/resource.d/目錄下找到相應腳步進行啟動或關閉操作。
[root@node1 ~]# scp /etc/ha.d/haresources node0:/etc/ha.d/haresources
#拷貝資源檔案到node0上
五、RealServer(node2和node3)配置
1、生成負載均衡VIP腳本(node2和node3一樣)
[root@node2~] # vim /etc/rc.d/init.d/lvsrs #
#!/bin/bash
#discription : Start Real Server
VIP=192.168.32.21
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo "Start LVS of Real Server"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
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
;;
stop)
/sbin/ifconfig lo:0 down
echo "Close LVS of Director Server"
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
*)
echo "Usage : $0 {start|stop}"
exit 1
esac
[root@node2~] # chmod a+x /etc/rc.d/init.d/lvsrs #給腳本增加可執行權限,然後啟動并設定為開機啟動:
2、生成測試檔案
[root@node2~] # echo "test"> /var/www/html/test.html #ldirectord測試頁,檔案名和内容與ldirectord.cf中定義一樣
[root@node2~] # echo "I am node2; My Ip:10.160.100.32"> /var/www/html/index.html
[root@node3~] # echo "test"> /var/www/html/test.html #ldirectord測試頁,檔案名和内容與ldirectord.cf中定義一樣
[root@node3~] # echo "I am node3; My Ip:10.160.100.33"> /var/www/html/index.html
六、啟動測試
1、啟動服務
[root@node0 ~]# service heartbeat start
[root@node0 ~]# chkconfig heartbeat on
[root@node1 ~]# service heartbeat start
[root@node1 ~]# chkconfig heartbeat on
[root@node2 ~]# service lvsrs start
[root@node2 ~]# chkconfig lvsrs on
[root@node2 ~]# service httpd start
[root@node2 ~]# chkconfig httpd on
[root@node3 ~]# service lvsrs start
[root@node3 ~]# chkconfig lvsrs on
[root@node3 ~]# service httpd start
[root@node3 ~]# chkconfig httpd on
2、測試
[root@node0 ~]# ip addr show | grep 192.168.32.21
inet 192.168.32.21/24 brd 192.168.32.255 scope global secondary eth0
#node0的eth0網口已經添加vip
[root@node0 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.32.21:80 rr
-> 192.168.32.32:80 Route 1 0 1
-> 192.168.32.33:80 Route 1 0 1
#node0的lvs配置生效
[root@node0 ~]# iptables -A OUTPUT -d 192.168.32.254 -p icmp -j REJECT #人為斷開網絡
[root@node1 ~]# ipvsadm -ln
-> 192.168.32.32:80 Route 1 0 0
-> 192.168.32.33:80 Route 1 0 0
#lvs自動切換到node1上,說明heartbeat雙機機制成功
realserver配置測試略,通過ie通路可得到web内容再2s輪詢方式切換
本文轉自netsword 51CTO部落格,原文連結:http://blog.51cto.com/netsword/769156