如何在使用Heartbeat做HA,但有沒有stonith硬件設備,想盡可能地避免鬧裂,使架構更穩定?很簡單,使用冗餘心跳線路,使用Ping 服務器等手段。
[client] 172.16.68.129
|
eth0 172.16.68.128
[router] eth1 172.16.0.254 <---------------------
eth2 10.1.1.19 |
| |
|vip:10.1.1.17 |
eth0 10.1.1.21 /————-[web1] 172.16.0.201---|
[Diretor] eth1 172.16.0.3
| 兩條心跳線路 |
eth0 10.1.1.18
[Backup Diretor] eth1 172.16.0.2 |
\————-[web2] 172.16.0.202---|
http://www.upl.com –> 10.1.1.17
在雙心跳線路的情況下,測試是否會發生資源切換:
ucast eth1 172.16.0.2
ucast eth2 192.168.40.2
1、拔掉主服務器上的電源
資源會切換到備機器
2、測試hb_standby
該指令執行成功,ipfail插件才能工作正常。
手工把資源切換到另外一個節點
/usr/share/heartbeat/hb_standby
手工把資源切換到本機
/usr/share/heartbeat/hb_takeover
3、關閉主服務上生產網絡的網卡(vip所在網絡)
不能簡單判斷是否切換,因爲還要參考ping server所在網絡。
參考思考題3
4、切斷兩臺服務器之間的其中一條心跳線
不會切換。
5、切斷兩臺服務器之間的所有心跳線
備機器由於接受到來自主機器的心跳信號,所以會接管資源,但主機器也不知道備機器已經擁有了資源,所以會出現“腦列”
6、殺死主服務器上所有的heartbeat進程
skill -9 heartbeat
會把資源強過去。主機器上面綁定的vip不會撤銷。
正常情況下,如果是通過service heartbeat stop退出,那麼退出前會把資源讓給備機器,然後在結束進程。
解決:使用看門狗(soft watchdog)
兩個節點相同的配置:
# service heartbeat stop
# vim ha.cf
watchdog /dev/watchdog
# service heartbeat start
加載軟件看門狗模塊
# modprobe softdog
設置看門狗的超時時間(如果超過該時間,heartbeat沒有給狗設備信號,就重啓計算機)
# echo “10″ > /proc/sys/kernel/panic
驗證:在其中節點殺掉所有進程
# skill -9 heartbeat
7、兩臺服務器都重啓
前提:要求heartbeat開機啓動。
步驟: 先重啓備機器,然後關閉主機器,緊接着備機器的heartbeat已經啓動完成並且過來超過兩分鐘,然後再把主機器啓動。
兩分鐘與 initdead=120
auto_failback=off:
備機器接管了資源,主機器啓動後不會接管資源
auto_failback=on:
備機器接管了資源,主機器啓動後會主動接管資源,告訴備機器讓出資源。
單心跳線路下思考的:
生產網絡在:A
心跳網絡:B
Ping server
1、如果心跳網絡和ping server是同一個網絡,那麼如果心跳網絡有問題,會有什麼現象?如何解決?
現象:雙方都收不到心跳信號,認爲對方已死,所以導致腦裂
解決:
方法1: 雙心跳網絡。
方法2:添加硬件的stonith(fence)。
原理:由一開始,就是由主機器發送心跳給備機器,心跳網絡出問題,備機器認爲主機器死了,然後備機器會發指令讓stonith設備重啓或者關閉主機器,方向是單向,只能備機器關閉主機器。
2、如果ping server是處於生產網絡上的,而心跳網絡現在出問題。又會現出什麼現象?如何解決?
跟上面的結果是一樣。解決方法也是一樣。在這種情況,ping server不起作用。
結論:整個架構還是以心跳信號作爲故障判斷主要依據。
3、ping server處於生產網絡,而心跳網絡沒有問題,但生產網絡出現故障。會出現什麼現象?
ping server 到底是什麼一個角色?
作用: 輔助判斷是否是出現網絡故障。用到的插件ipfail.
如果節點node1與ping server失去聯繫(生產網絡故障),該節點node1就會通過心跳網絡問另外一個節點node2是否與ping server通信正常。如果另外一個節點node2能夠通信正常,那麼該節點node1就知道自己出現網絡故障,就會把資源主動讓給另一個節點node2