heartbeat心跳檢測和裂腦

heartbeat的心跳連接:

  講過上面的描述,要部署heartbeat服務,至少需要兩臺主機才能完成。那麼,要實現高可用服務,這兩臺主機之間,是如何做到互相通信互相監控的呢/

  下面是兩臺heartbeat主機之間通信的一些常用的可行的方法:

    1)串行電纜,即所謂的串口(首選,缺點是距離不能太遠)

    2)一根以太網電纜量網口直連(生產環境中常用的方式)

    3)以太網電纜,通過交換機等網絡設備連接(次選,原因是增加了故障點,不好排查故障,同時,線路不是專用的心跳線,容易受其他數據傳輸的影響,導致心跳報文發送問題)

Heartbeat裂腦:

     什麼是裂腦?

    由於兩臺高可用服務器之間在指定的時間內,無法互相檢測到對方心跳而各自啓動故障轉移功能,取得了資源以及服務的所有權,而此時的兩臺高可用服務器對都還活着並作正常運行,這樣就會導致同一個IP湖綜合服務在兩端同時啓動而發生衝突的嚴重問題,最嚴重的就是兩臺主機同時佔用一個VIP的地址,當用戶寫入數據的時候可能會分別寫入到兩端,這樣可能會導致服務器兩端的數據不一致或造成數據的丟失,這種情況就本成爲裂腦,也有的人稱之爲分區集羣或者大腦垂直分隔

 

導致裂腦發生的原因:  

  一般來說,裂腦的發生,主要是由以下的幾個原因導致的:

  1)高可用服務器對之間心跳線路故障,導致無法正常的通信。原因比如:

    (1).心跳線本身就壞了(包括斷了,老化)

    (2).網卡以及相關驅動壞了,IP配置及衝突問題

    (3).心跳線間連接的設備故障(交換機的故障或者是網卡的故障)

    (4).仲裁的服務器出現問題

  2)高可用服務器對上開啓了防火牆阻擋了心跳消息的傳輸

  3)高可用服務器對上的心跳網卡地址等信息配置的不正確,導致發送心跳失敗。

  4)其他服務配置不當等原因,如心跳的方式不同,心跳廣播衝突,軟件出現了BUG等

防止腦裂發生的方法總結:

  發生腦裂的時候,對業務的影響是及其嚴重的,有的時候甚至是致命的。如:兩臺高可用的服務器對之間發生腦裂,導致互相競爭同一個IP資源,就如同我們局域網內常見的IP地址衝突一樣,兩個機器就會有一個或者兩個不正常,影響用戶正常訪問服務器。如果是應用在數據庫或者是存儲服務這種極重要的高可用上,那就導致用戶發佈的數據間斷的寫在兩臺服務器上的惡果,最終數據恢復及困難或者是難已恢復

  實際的生產環境中,我們可以從以下幾個方面來防止裂腦的發生:

  1)同時使用串行電纜和以太網電纜連接,同時用兩條心跳線路,這樣一條線路壞了,另一個線路還是好的,依然能傳送消息(推薦的)

  2)檢測到裂腦的時候強行的關閉一個心跳節點(需要特殊的節點支持,如stonith,fence),相當於程序上備節點發現心跳線故障,發送關機命令到主節點。

  3)做好對裂腦的監控報警(如郵件以及手機短信等),在問題發生的時候能夠人爲的介入到仲裁,降低損失。當然,在實施高可用方案的時候,要根據業務的實際需求確定是否能夠容忍這樣的損失。對於一般的網站業務,這個損失是可控的(公司使用)

  4)啓用磁盤鎖。正在服務一方鎖住共享磁盤,腦裂發生的時候,讓對方完全搶不走共享的磁盤資源。但使用鎖磁盤也會有一個不小的問題,如果佔用共享盤的乙方不主動解鎖,另一方就永遠得不到共享磁盤。現實中介入服務節點突然死機或者崩潰,另一方就永遠不可能執行解鎖命令。後備節點也就截關不了共享的資和應用服務。於是有人在HA中涉及了“智能”鎖,正在服務的一方只在發現心跳線全部斷開時才啓用磁盤鎖,平時就不上鎖了

  5)報警報在服務器接管之前,給人員處理留足夠的時間就是1分鐘內報警了,但是服務器不接管,而是5分鐘之後接管,接管的時間較長。數據不會丟失,但就是會導致用戶無法寫數據。

  6)報警後,不直接自動服務器接管,而是由人員接管。

  7)增加仲裁的機制,確定誰該獲得資源,這裏面有幾個參考的思路:

    1)增加一個仲裁機制。例如設置參考的IP,當心跳完全斷開的時候,2個節點各自都ping一下參考的IP,不同則表明斷點就出現在本段,這樣就主動放棄競爭,讓能夠ping通參考IP的一端去接管服務。

    2)通過第三方軟件仲裁誰該獲得資源,這個在阿里有類似的軟件應用

HeartBeat的一些介紹和功能上的一些總結


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