heartbeat的心跳鏈接:html
講過上面的描述,要部署heartbeat服務,至少須要兩臺主機才能完成。那麼,要實現高可用服務,這兩臺主機之間,是如何作到互相通訊互相監控的呢/數據庫
下面是兩臺heartbeat主機之間通訊的一些經常使用的可行的方法:服務器
1)串行電纜,即所謂的串口(首選,缺點是距離不能太遠)網絡
2)一根以太網電纜量網口直連(生產環境中經常使用的方式)ide
3)以太網電纜,經過交換機等網絡設備鏈接(次選,緣由是增長了故障點,很差排查故障,同時,線路不是專用的心跳線,容易受其餘數據傳輸的影響,致使心跳報文發送問題)網站
Heartbeat裂腦:spa
什麼是裂腦?code
因爲兩臺高可用服務器之間在指定的時間內,沒法互相檢測到對方心跳而各自啓動故障轉移功能,取得了資源以及服務的全部權,而此時的兩臺高可用服務器對都還活着並做正常運行,這樣就會致使同一個IP湖綜合服務在兩端同時啓動而發生衝突的嚴重問題,最嚴重的就是兩臺主機同時佔用一個VIP的地址,當用戶寫入數據的時候可能會分別寫入到兩端,這樣可能會致使服務器兩端的數據不一致或形成數據的丟失,這種狀況就本成爲裂腦,也有的人稱之爲分區集羣或者大腦垂直分隔orm
致使裂腦發生的緣由: htm
通常來講,裂腦的發生,主要是由如下的幾個緣由致使的:
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)經過第三方軟件仲裁誰該得到資源,這個在阿里有相似的軟件應用