在沒有stonith設備下使用heartbeat實現高可用的原理和測試

如何在使用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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章