1. 程式人生 > >zookeeper腦裂解決方案總結

zookeeper腦裂解決方案總結

zookeeper腦裂解決方案:

避免這種情況其實也很簡單,在slaver切換的時候不在檢查到老的master出現問題後馬上切換,而是在休眠一段足夠的時間,確保老的master已經獲知變更並且做了相關的shutdown清理工作了然後再註冊成為master就能避免這類問題了,這個休眠時間一般定義為與zookeeper定義的超時時間就夠了,但是這段時間內系統可能是不可用的,但是相對於資料不一致的後果我想還是值得的。當然最徹底的解決這類問題的方案是將master HA叢集做成peer2peer的,遮蔽掉外部Zookeeper的依賴。每個節點都是對等的沒有主次,這樣就不會存在腦裂的問題,但是這種ha解決方案需要使用兩階段,paxos這類資料一致性保證協議來實現,不可避免的會降低系統資料變更的系統,如果系統中主要是對master的讀取操作很少更新就很適合了。

為了避免出現腦裂,可採用下面的預防措施: 

新增冗餘的心跳線,例如雙線條線。儘量減少“裂腦”發生機會。 
啟用磁碟鎖。正在服務一方鎖住共享磁碟,“裂腦”發生時,讓對方完全“搶不走”共享磁碟資源。但使用鎖磁碟也會有一個不小的問題,如果佔用共享盤的一方不主動“解鎖”,另一方就永遠得不到共享磁碟。現實中假如服務節點突然宕機或崩潰,就不可能執行解鎖命令。後備節點也就接管不了共享資源和應用服務。於是有人在HA中設計了“智慧”鎖。即,正在服務的一方只在發現心跳線全部斷開(察覺不到對端)時才啟用磁碟鎖。平時就不上鎖了。 

設定仲裁機制。例如設定參考IP(如閘道器IP),當心跳線完全斷開時,2個節點都各自ping一下 參考IP,不通則表明斷點就出在本端,不僅“心跳”、還兼對外“服務”的本端網路鏈路斷了,即使啟動(或繼續)應用服務也沒有用了,那就主動放棄競爭,讓能夠ping通參考IP的一端去起服務。更保險一些,ping不通參考IP的一方乾脆就自我重啟,以徹底釋放有可能還佔用著的那些共享資源。