ZAB協議以及Zookeeper
1、什麼是Zookeeper
Zookeeper爲分佈式應用提供了一個高效可靠的分佈式協調服務。實體依賴於ZAB協議,實現了一種主備模式的架構來保持集羣中數據的一致性。
Zookeeper使得分佈式應用能夠經過一個共享的樹形結構的命名空間實現協調。Zookeeper將全部的數據存儲在內存中,Zookeeper集羣中的任何一臺機器均可以響應客戶端的讀操做,且全量數據存在在內存中,所以,Zookeeper更適合以讀操做爲主的應用場景。
2、集羣中含有哪些角色
集羣中包括三種角色:leader、follower、observer
leader:是經過選舉肯定一臺機器,爲客戶端提供讀寫功能。follower與observer能夠在不影響寫性能的前提下提高集羣的讀性能。Zookeeper集羣節點的數量爲奇數個,Zookeeper的節點爲:臨時節點、持久節點、順序節點。每一個節點都有一個start結構,最重要的功能就是watcher功能,開源客戶端有:zkclient、curator
3、ZAB協議
是爲zookeeper專門設計的一種支持崩潰恢復的消息廣播協議。ZAB協議只容許有一個主進程接收客戶事務請求並處理,即leader,當leader收到請求後將請求事務轉化爲事務proposal,因爲leader會爲每個follower建立一個對列,將該事務放入響應對列,保證書屋的順序性,以後會在對列中順序向其餘節點廣播該提案,follower收到後hi將其以事務的形式寫入到本地日誌中,並向leader發送反饋,leader會等待其餘follower的回覆,當收到一半以上的follower響應時,leader會向其餘節點發送commit消息,同時leader提交提案。
4、ZAB的兩種模式
ZAB有兩種模式:故障恢復模式以及消息廣播
當系統啓動或者leader服務器出現故障等現象時,進入故障恢復模式。將會開啓新的一輪選舉,選舉產生的leader會與過半的follower進行同步,使數據一致,當同步結束後,退出恢復模式,進入消息廣播模式,當一臺聽從ZAB協議的服務器啓動後,若是檢測到有leader在廣播消息,會啓動進入恢復模式,當共完成與leader的同步之後,進入消息廣播模式,若是集羣中的非leader的節點收到客戶請求,非leader節點會先將請求發送到leader服務器。
5、ZAB協議故障恢復的條件
-
ZAB協議須要保證已經被leader提交的事務最終被全部的機器提交
-
ZAB協議須要保證丟棄那些只在leader上提出的事務
爲了保證以上兩點,選舉時若是選擇zxid最大的節點能夠解決上述問題,數據同步是爲每個follower建立一個隊列,leader將各個follower沒有提交的事務寫入各個隊列,併發送給各個follower,follower將事務同步後leader將其加入真正可用的follower列表
歡迎關注本站公眾號,獲取更多信息