實(shí)現(xiàn)目標(biāo):
1,借助ldirectord工具實(shí)現(xiàn)兩臺director節(jié)點(diǎn)備份;
2,當(dāng)某RealServer或其web服務(wù)出現(xiàn)故障時,Director能自動將其隔離,并在RealServer的web服務(wù)恢復(fù)時自動將其重新上線;期望將時間控制在5秒鐘之內(nèi)(此過程通過腳本實(shí)現(xiàn))
前提:
VIP 172.16.4.1
Master 172.16.4.10
Backup 172.16.4.20
Trans1 192.168.4.10
Trans2 192.168.4.20
Realserver1 172.16.4.11
Realserver2 172.16.4.22
(此實(shí)驗(yàn)是基于虛擬機(jī)環(huán)境實(shí)現(xiàn),其中trans1,和trans2是用于director相互傳遞心跳信息,這里我們將其放在同一區(qū)域vmnet5中)
準(zhǔn)備環(huán)境:
1,在兩個director上配置(以下操作在兩臺節(jié)點(diǎn)上均需要配置):
#vim /etc/sysconfig/network
主機(jī)名為node1.a.com
#vim /etc/hosts
172.16.4.10 node1.a.com node1
172.16.4.20 node2.a.com node2
方便兩個director傳遞心跳信息,配置無密碼通信:
#ssh-keygen -t rsa
#ssh-copy-id -i/ .ssh/id_rsa.pub
root@node2.a.com 2,在realservers上安裝測試服務(wù)httpd:
#yum install httpd
為了方便測試設(shè)置兩個頁面:
#echo "<h1>I'm realserver1,welcome to</h1>" > /var/www/html/index.html
#echo "<h1>I'm realserver2,welcome to</h1>" > /var/www/html/index.html
#echo "<h1>ok</h1> > /var/www/html/.test.html
#echo "<h1>ok</h1>" > /var/www/html/.test.html
# service httpd restart
# elinks
http://172.16.4.22 --dump //測試網(wǎng)頁是否正常顯示
I'm realserver2,welcome to //說明服務(wù)正常
一、在director上安裝ipvadm的軟件包:
#rpm -ivh ipvsadm.i386
安裝heartbeat軟件包:
heartbeat-2.1.4-9.el5.i386.rpm
heartbeat-devel-2.1.4-9.el5.i386.rpm
heartbeat-gui-2.1.4-9.el5.i386.rpm
heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
heartbeat-pils-2.1.4-10.el5.i386.rpm
heartbeat-stonith-2.1.4-10.el5.i386.rpm
libnet-1.1.4-3.el5.i386.rpm
perl-MailTools-1.77-1.el5.noarch.rpm
這些軟件包需從網(wǎng)上下載
本地安裝軟件包:
#yum localinstall --nogpgcheck heartbeat-2.1.4-9.el5.i386.rpm
#yum localinstall --nogpgcheck heartbeat-devel-2.1.4-9.el5.i386.rpm
#yum localinstall --nogpgcheck heartbeat-gui-2.1.4-9.el5.i386.rpm
#yum localinstall --nogpgcheck heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
#yum localinstall --nogpgcheck heartbeat-pils-2.1.4-10.el5.i386.rpm
#yum localinstall --nogpgcheck heartbeat-stonith-2.1.4-10.el5.i386.rpm
#yum localinstall --nogpgcheck libnet-1.1.4-3.el5.i386.rpm
#yum localinstall --nogpgcheck perl-MailTools-1.77-1.el5.noarch.rpm
二、配置相關(guān)文件
# cp /usr/share/doc/heartbeat-2.1.4/{authkeys, ha.cf, haresources} /etc/ha.d/
#cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/
1,配置authkeys文件
#cd /etc/ha.d/
#vim authkeys
auth 2
2 sha1 kfjhkjdfhladfh //sha1后面的字符串是隨機(jī)的(可以隨便輸入)
#chmod 400 authkeys //此處改變此文件的屬性為400或600,不然無法啟動heartbeat
2,配置ha.cf文件
#vim ha.cf
debugfile /var/log/ha-debug //調(diào)試日志的文件存放位置
logfile /var/log/ha-log //啟動及運(yùn)行時產(chǎn)生的日志存放的位置(此功能非常重要)
logfacility local0 // Facility to use for syslog()/logger
keepalive 2 //指定心跳間隔時間即每隔2秒鐘在eth1上發(fā)送一次廣播
deadtime 30 //指定若備用節(jié)點(diǎn)在30內(nèi)沒有收到主節(jié)點(diǎn)的心跳信號,則立即接管主節(jié)點(diǎn)的服務(wù)資源
warntime 10 //指定心跳延遲的時間為10秒。當(dāng)10秒鐘內(nèi)備份節(jié)點(diǎn)不能接收到主節(jié)點(diǎn)的心跳信號時,就會往日志中寫入一個警告日志,但此時不會切換服務(wù)
initdead 120 //在某些系統(tǒng)上,系統(tǒng)啟動或重啟之后需要經(jīng)過一段時間網(wǎng)絡(luò)才能正常工作,該選項(xiàng)用于解決這種情況產(chǎn)生的時間間隔。取值至少為deadtime的兩倍
udpport 694 //開放防火墻694端口
ucast eth1 192.168.4.20 //檢測對端心跳接口的地址
bcast eth1 //廣播心跳信息的網(wǎng)卡
auto_failback on //默認(rèn)設(shè)置
node node1.a.com //配置director主節(jié)點(diǎn),且與uname -n保持一致
node node2.a.com //配置director備份節(jié)點(diǎn)
3,配置director腳本
#vim /etc/init.d/ipvs
#!/bin/bash
#
# LVS script for VS/DR
#
. /etc/rc.d/init.d/functions
VIP=172.16.4.1
RIP1=192.168.0.50
RIP2=192.168.0.60
PORT=80
case "$1" in
start)
echo " start LVS "
/sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:1
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -F
/sbin/iptables -Z
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t $VIP:80 -s wlc
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w 1
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w 2
/bin/touch /var/lock/subsys/ipvsadm &> /dev/null
;;
stop)
echo "close LVS Director"
echo 0 > /proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ifconfig eth0:1 down
/sbin/route del $VIP
/bin/rm -f /var/lock/subsys/ipvsadm
echo "ipvs is stopped..."
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ]; then
echo "ipvsadm is stopped ..."
else
echo "ipvs is running ..."
ipvsadm -L -n
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
;;
esac
#chmod +x /etc/init.d/ipvs
4,配置realservers的腳本(運(yùn)行此腳本能夠?qū)崿F(xiàn)快速配置realservers)
#vim /etc/init.d/realserver.sh
#!/bin/bash
#
. /etc/rc.d/init.d/functions
VIP=172.16.4.1
host=`/bin/hostname`
case "$1" in
start)
echo "Start LVS-DR real server on this machine."
/sbin/ifconfig lo down
/sbin/ifconfig lo 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
sysctl –p
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
;;
stop)
echo "Stop LVS-DR real server loopback device(s)."
/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
;;
status)
echo "Status of LVS-DR real server."
islothere=`/sbin/ifconfig lo:0 | grep $VIP`
isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
if [ ! "$islothere" -o ! "isrothere" ];then
echo "LVS-DR real server Stopped."
else
echo "LVS-DR real server Running."
fi
;;
*)
echo "$0: Usage: $0 {start|status|stop}"
exit 1
;;
esac
#chmod +x /etc/init.d/realserver.sh
5,配置heartbeat文件
#vim /etc/ha.d/haresources
node1.a.com 172.16.4.1 ipvs ldirectord
注:node1.a.com是主節(jié)點(diǎn)的計算機(jī)名,172.16.4.1是VIP地址,ipvs和ldirectord是兩個腳本,ipvs能夠?qū)崿F(xiàn)lvs—DR模型的基本設(shè)置,并設(shè)置相應(yīng)的ipvsadm規(guī)則;ldirectord是一個軟件工具安裝的啟動腳本,能夠?qū)崿F(xiàn)監(jiān)控realservers的狀態(tài);Herartbeat默認(rèn)尋找程序的路徑為 :/etc/rc.d/init.d/ 和/etc/ha.d,heartbeat會實(shí)時監(jiān)控兩個節(jié)點(diǎn)的心跳信息,當(dāng)主節(jié)點(diǎn)宕機(jī)或備份節(jié)點(diǎn)宕機(jī)時,會立即啟用另一節(jié)點(diǎn)。
6,修改ldirectord.cf文件
#vim /etc/ha.d/ldirectord.cf
checktimeout=3 //檢測超時時間
checkinterval=1 //檢測間隔時間
autoreload=yes //是否重新載入客戶機(jī),這里我們選擇重新載入
logfile="/var/log/ldirectord.log" //日志路徑
logfile="local0"
quiescent=no
virtual=172.16.4.1:80 //指定VIP地址,并監(jiān)聽80端口
real=172.16.4.11:80 gate //設(shè)置realserverIP地址和并設(shè)置為路由模式
real=172.16.4.22:80 gate
fallback=127.0.0.1:80 gate
service=http //我們這里測試的服務(wù)是http
request=".test.html" //這個文件一定要在realserver的web網(wǎng)頁目錄中存在,并且能夠正常訪問的,ipvs通過它來判斷客戶端是否存活
receive="ok" //設(shè)置測試網(wǎng)頁的文件內(nèi)容
scheduler=wlc //設(shè)定算法為wlc
protocol=tcp //基于tcp協(xié)議
checktype=negotiate // ldirectord進(jìn)程用于監(jiān)控Realserver的方法
checkport=80 //檢查的端口
7,將以上的配置文件拷貝給備份director節(jié)點(diǎn)上
#scp /etc/ha.d/{authkeys,ha.cf,haresources} node2:/etc/ha.d/
注意這三個文件除ha.cf中的監(jiān)聽地址需要改為 ucast eth1 192.168.4.10,其他的文件不需要改變。
#scp /etc/init.d/ipvs node2:/etc/init.d/
8,將realservers腳本拷貝給另一臺服務(wù)器
#scp /etc/init.d/realserver.sh 172.16.4.22:/etc/init.d/
9,啟動服務(wù)
# /etc/init.d/heartbeat start
# ssh node2 -- '/etc/init.d/heartbeat start' //通過ssh啟動另一臺節(jié)點(diǎn)的heartbeat
# /etc/init.d/ldirectord start
# ssh node2 -- '/etc/init.d/ldirectord start'
#/etc/init.d/ipvs start
#/etc/init.d/realserver.sh start
10,測試服務(wù)
在瀏覽器中輸入
http://172.16.4.1 出現(xiàn)頁面如下: