目錄
腦裂(Split Brain)
在 HA(高可用)系統中,當聯繫主、從節點之間的 “心跳線路” 斷開時,本來作爲一個整體、動作協調的 HA 系統,就分裂成爲兩個獨立的節點,即兩者都認爲自己是 Master。導致兩個 “Master” 本能的爭搶資源、互相沖突,繼而導致嚴重的後果。
對於無狀態的 HA 系統而言,無所謂腦裂的存在,但對有狀態的 HA 系統而言,必須要嚴格防止腦裂的產生。
腦裂的原因
產生腦裂的原因,歸根結底是 “心跳線路” 的網絡故障,通常有以下幾種情況:
- 硬件損壞:網卡、網線、交換機損壞等。
- 軟件配置錯誤:IP 衝突、防火牆不放行、軟件 BUG 等。
防止腦裂的辦法
實際上,雙節點的主從 HA 架構很難做到 100% 防腦裂的效果,升級爲 3 冗餘架構才能從根源上解決問題。
-
心跳鏈路冗餘:物理/虛擬網卡 Bond。
-
設置第三方仲裁:根據實際情況設置 “衝裁機構”,當雙方出現爭議時,由仲裁者做決定。例如:設置參考 IP(e.g. GW IP),當心跳鏈路斷開時,雙方各自 ping 都一下,不通則表明斷點出現在本端。在 Keepalived 場景中,可以讓 check_script 週期性的 ping 參考 IP,如果不通則 “service keepalived stop”。
-
使用 Fence 機制:當檢測到裂腦時強行關閉一個心跳節點。相當於備節點接收不到心跳消患時,就通過單獨的線路發送關機命令關閉主節點的電源。
Fence 技術
Fence 技術的目的是解決高可用集羣在出現極端條件下出現的運行保障問題,例如:腦裂問題。Fence 的核心思路是:隔離不需要的主機,當一臺主機和集羣失去聯繫時,將其隔離,以防止腦裂。
實現了 Fence 技術的設備稱之爲 Fence 設備,或者 Stonith (Shoot The Other Node In The Head,打爆另一個節點的頭)設備。通常可以將一臺虛擬機作爲 Fence 設備。
Keepalived vs Pacemaker
綜上,可以看出 Keepalived 並不適用於是狀態的 HA 系統,而 Pacemaker 是一個不錯的替代方案。Pacemkaer 自帶的 3 節點仲裁機制,集羣的所有節點中的多數選出一個協調者,集羣的所有指令都由這個協調者發出,可以完美的杜絕腦裂問題,同時也支持 Fence 功能。
參考文檔
https://www.cnblogs.com/kevingrace/p/7205846.html