系統環境: rhel6 x86_64 iptables and selinux disabledhtml
主機: 192.168.122.119 server19.example.com node
192.168.122.25 server25.example.comlinux
192.168.122.163 server63.example.com算法
192.168.122.193 server93.example.com apache
所需的包:heartbeat-3.0.4-1.el6.x86_64.rpm heartbeat-libs-3.0.4-1.el6.x86_64.rpm heartbeat-devel-3.0.4-1.el6.x86_64.rpm ldirectord-3.9.2-1.2.x86_64.rpmvim
Realserver1 192.168.122.163:apacheapi
Realserver2 192.168.122.193:apache服務器
Load Balance 192.168.122.119:heartbeat apache網絡
Load Balance 192.168.122.25:heartbeat apachetcp
#配置 Load Balance
如下步驟在server19和server25上實施:
[root@server19 kernel]# yum localinstall heartbeat-3.0.4-1.el6.x86_64.rpm heartbeat-devel-3.0.4-1.el6.x86_64.rpm heartbeat-libs-3.0.4-1.el6.x86_64.rpm ldirectord-3.9.2-1.2.x86_64.rpm -y
[root@server19 kernel]# yum install perl-IO-Socket-INET6 ipvsadm -y
[root@server19 ha.d]# modprobe softdog
[root@server19 ha.d]# echo modprobe softdog >> /etc/rc.d/rc.local
[root@server19 ha.d]# yum install httpd -y
[root@server19 ha.d]# echo `hostname` > /var/www/index.html
[root@server19 ha.d]# /etc/init.d/httpd stop
如下步驟在server19或server25上實施:
[root@server19 kernel]# cd /usr/share/doc/heartbeat-3.0.4/
[root@server19 heartbeat-3.0.4]# cp authkeys haresources ha.cf /etc/ha.d/
注:這三個配置文件能夠經過rpm -q heartbeat -d 查看其位置
[root@server19 heartbeat-3.0.4]# cd /usr/share/doc/packages/ldirectord/
[root@server19 ldirectord]# cp ldirectord.cf /etc/ha.d/
注:這個配置文件能夠經過rpm -q ldirectord -d 查看其位置
[root@server19 ldirectord]# cd /etc/ha.d/
#配置/etc/ha.d/authkeys
[root@server19 ha.d]# vim authkeys
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello! (去掉註釋)
[root@server19 ha.d]# chmod 600 authkeys
認證文件(/etc/ha.d/authkeys),文件的權限必須是 600
#配置/etc/ha.d/ha.cf
[root@server19 ha.d]# vim ha.cf
debugfile /var/log/ha-debug (去掉註釋)
調試日誌文件文件,取默認值
logfile /var/log/ha-log (去掉註釋)
系統運行日誌文件,取默認值
logfacility local0
日誌等級,取默認值
keepalive 2(去掉註釋)
心跳頻率,本身設定。1:表示 1 秒;200ms:表示 200 毫秒
deadtime 30(去掉註釋)
節點死亡時間閥值,就是從節點在過了 30 後尚未收到心跳就認爲主節點死亡,本身設定
warntime 10 (去掉註釋)
發出警告時間,本身設定
initdead 120 (去掉註釋)
守護進程首次啓動後應該等待 120 秒後再啓動主服務器上的資源
udpport 694 (去掉註釋)
心跳信息傳遞的 udp 端口,使用端口 694 進行 bcast 和 ucast 通訊,取默認值
bcast eth0 (去掉註釋)
採用 udp 廣播播來通知心跳
auto_failback on
當主節點恢復後,是否自動切回
watchdog /dev/watchdog (去掉註釋)
watchdog 能讓系統在出現故障 1 分鐘後重啓該機器,這個功能能夠幫助服務器在確實中止心 跳後可以從新恢復心跳
node server19.example.com
主節點名稱,與 uname --n 保持一致.排在第一的默認爲主節點,因此不要搞措順序
node server25.example.com
副節點名稱,與 uname --n 保持一致
ping 192.168.122.1
respawn hacluster /usr/lib64/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
默認 heartbeat 並不檢測除自己以外的其餘任何服務,也不檢測網絡情況。 因此當網絡中斷時,並不會進行 Load Balancer 和 Backup 之間的切換。 能夠經過 ipfail 插件,設置'ping nodes'來解決這一問題,但不能使用一個集羣節點做爲 ping 的節點.
#配置/etc/ha.d/haresources
[root@server19 ha.d]# vim haresources
server19.example.com IPaddr::192.168.122.178/24/eth0 ldirectord httpd
注:192.168.122.178爲虛擬IP
這個文件中定義了實現集羣所需的各個軟件的啓動腳本,這些腳本必須放在/etc/init.d 或者 /etc/ha.d/resource.d 目錄裏 IPaddr 的做用是啓動 Virutal IP,它是 HeartBeart 自帶的一個 腳本.ldirectord 的做用是啓動 ldirectord 監控程序,它會使 ldirectord.cf 中定義的 lvs 生效, 並監聽其健康狀;httpd 是 apache 服務的啓動腳本。
#配置/etc/ha.d/ldirectord.cf
[root@server19 ha.d]# vim ldirectord.cf
# Sample for an http virtual service
virtual=192.168.122.178:80 虛擬IP:服務端口
real=192.168.122.163:80 gate realserver:服務端口
real=192.168.122.193:80 gate realserver:服務端口
fallback=127.0.0.1:80 gate 當realserver全掛掉後,由調度器上的服務來提供服務
service=http 服務名
scheduler=rr 算法
#persistent=600 持續鏈接時間
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80 檢測端口
request="index.html" 檢測有無inde.html測試頁
# receive="Test Page" 檢測測試頁中的內容
# virtualhost=www.x.y.z
[root@server19 ha.d]# scp authkeys ha.cf haresources ldirectord.cf root@192.168.122.25:/etc/ha.d/
#配置Realserver
如下步驟在server63上實施:
[root@server63 ~]# yum install arptables_jf httpd -y
[root@server63 ~]# arptables -A IN -d 192.168.122.178 -j DROP
[root@server63 ~]# arptables -A OUT -s 192.168.122.178 -j mangle --mangle-ip-s 192.168.122.163
[root@server63 ~]# /etc/init.d/arptables_jf save
[root@server63 ~]# ifconfig eth0:0 192.168.122.178 netmask 255.255.255.255 up
或
[root@server63 ~]# ip addr add 192.168.122.178 dev eth0
注:可用ip addr show查看
[root@server63 ~]# echo `hostname` > /var/www/html/index.html
[root@server63 ~]# /etc/init.d/httpd start
如下步驟在server93上實施:
[root@server93 ~]# yum install arptables_jf httpd -y
[root@server93 ~]# arptables -A IN -d 192.168.122.178 -j DROP
[root@server93 ~]# arptables -A OUT -s 192.168.122.178 -j mangle --mangle-ip-s 192.168.122.193
[root@server93 ~]# /etc/init.d/arptables_jf save
[root@server93 ~]# ifconfig eth0:0 192.168.122.178 netmask 255.255.255.255 up
或
[root@server93 ~]# ip addr add 192.168.122.178 dev eth0
注:可用ip addr show查看
[root@server93 ~]# echo `hostname` > /var/www/html/index.html
[root@server93 ~]# /etc/init.d/httpd start
#啓動
如下步驟在server19和server25上實施:
[root@server19 ha.d]# /etc/init.d/heartbeat start
測試
訪問192.168.122.178反覆刷新頁面,若是頁面在server63和server93直接來回切換,說明正常。
注:當server63和server93上的apache服務關閉後,訪問的將是調度器上的apache頁面,若是調度器上的apache也關閉,將沒法訪問到頁面.當一臺調度器宕掉後,另外一臺調度器會接管,發揮調度的做用(即調度器之間實現了高可用)