1.單點故障問題什么是分布式系統中的單點故障:通常分布式系統采用主從模式,就是一個主控機連接多個處理節點。主節點負責分發任務,從節點負責處理任務,當我們的主節點發生故障時,那么整個系統就都癱瘓了,那么我們把這種故障叫作單點故障。傳統方式是采用一個備用節點,這個備用節點定期給當前主節點發送ping包,主節點收到ping包以后向備用節點發送回復Ack ,當備用節點收到回復的時候就會認為當前主節點還活著,讓他繼續提供服務。如下圖所示:
圖片描述(最多50字)
但是這種方式就是有一個隱患,就是網絡問題 ,來看一網絡問題會造成什么后果。
圖片描述(最多50字)
也就是說 我們的主節點的并沒有掛,只是 在回復的時候網絡發生故障,這樣我們的備用節點同樣收不到回復,就會認為主節點掛了 , 然后備用節點將他的Master實例啟動起來,這樣我們的分布式系統當中就有了兩個主節點也就是---雙Master , 出現雙Master以后我們的從節點就會將它所做的事一部分匯報給了主節點,一部分匯報給了備用節點,這樣服務就全亂了。 為了防止出現這種情況,我們引入了 ZooKeeper,它雖然不能避免網絡故障,但它能夠保證每時每刻只有一個Master。2.ZooKeeper解決方案在引入了Zookeeper以后,我們啟動了兩個主節點, "主節點-A"和"主節點-B"他們啟動以后,都向ZooKeeper去注冊一個節點 。 我們 假設"主節點-A"鎖注冊地節點是"master-00001","主節點-B"注冊的節點是"master-00002", 注冊完以后進行選舉,編號最小的節點將在選舉中獲勝獲得鎖成為主節點 ,也就是我們的"主節點-A"將會獲得鎖成為主節點,然后"主節點-B"將被阻塞成為一個備用節點。那么,用這種方式就完成了對兩個Master進程的調度。
圖片描述(最多50字)
如果"主節點-A"掛了,這時候他所注冊的節點將被自動刪除, ZooKeeper會自動感知節點的變化,然后再次發出選舉,這時候"主節點-B"將在選舉中獲勝,替代"主節點-A"成為主節點。
圖片描述(最多50字)
3.Master 恢復
圖片描述(最多50字)
如果主節點恢復了,他會再次向ZooKeeper注冊一個節點,這時候他注冊的節點將會是 "master-00003" , ZooKeeper會感知節點的變化再次發動選舉 ,這時候"主節點-B"在選舉中會再次獲勝繼續擔任"主節點","主節點-A"會擔任備用節點。
轉載于:https://blog.51cto.com/14028890/2309926