高可用性中的腦裂問題(split-brain problem in HA)(轉)


歡迎關注我的社交賬號:

郵箱: jiangxinnju@163.com
博客園地址: http://www.cnblogs.com/jiangxinnju
GitHub地址: https://github.com/jiangxincode
知乎地址: https://www.zhihu.com/people/jiangxinnju

運行於備用主機上的Heartbeat可以通過以太網連接檢測主服務器的運行狀態,一旦其無法檢測到主服務器的“心跳”則自動接管主服務器的資源。通常情況下,主、備服務器間的心跳連接是一個獨立的物理連接,這個連接可以是串行線纜、一個由“交叉線”實現的以太網連接。Heartbeat甚至可同時通過多個物理連接檢測主服務器的工作狀態,而其只要能通過其中一個連接收到主服務器處於活動狀態的信息,就會認為主服務器處於正常狀態。從實踐經驗的角度來說,建議為Heartbeat配置多條獨立的物理連接,以避免Heartbeat通信線路本身存在單點故障。

1、串行電纜:被認為是比以太網連接安全性稍好些的連接方式,因為hacker無法通過串行連接運行諸如telnet、ssh或rsh類的程序,從而可以降低其通過已劫持的服務器再次侵入備份服務器的幾率。但串行線纜受限於可用長度,因此主、備服務器的距離必須非常短。
2、以太網連接:使用此方式可以消除串行線纜的在長度方面限制,並且可以通過此連接在主備服務器間同步文件系統,從而減少了從正常通信連接帶寬的占用。

基於冗余的角度考慮,應該在主、備服務器使用兩個物理連接傳輸heartbeat的控制信息;這樣可以避免在一個網絡或線纜故障時導致兩個節點同時認為自已是唯一處於活動狀態的服務器從而出現爭用資源的情況,這種爭用資源的場景即是所謂的“腦裂”(split-brain)或“partitioned cluster”。在兩個節點共享同一個物理設備資源的情況下,腦裂會產生相當可怕的后果。
為了避免出現腦裂,可采用下面的預防措施:

1、如前所述,在主、備節點間建立一個冗余的、可靠的物理連接來同時傳送控制信息;
2、一旦發生腦裂時,借助額外設備強制性地關閉其中一個節點;

第二種方式即是俗稱的“將其它節點‘爆頭’(shoot the other node in the head)”,簡稱為STONITH。基於能夠通過軟件指令關閉某節點特殊的硬件設備,Heartbeat即可實現可配置的Stonith。但當主、備服務器是基於WAN進行通信時,則很難避免“腦裂”情景的出現。因此,當構建異地“容災”的應用時,應盡量避免主、備節點共享物理資源。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM