zookeeper選主和同步機制

2021-07-14 05:59:01 字數 1621 閱讀 5879

在上篇博文《zookeeper輕鬆入門》中,已經詳細介紹了zookeeper的架構和資料互動的過程。我們已經知道zookeeper的更新操作具有強一致性,而這一過程正是通過leader廣播實現的。本篇博文就在此基礎上詳細介紹一下zookeeper的選舉機制的同步機制。

zookeeper的核心是原子廣播,這個機制保證了各個server之間的同步。實現這個機制的協議叫做zab協議。zab協議有兩種模式,它們分別是恢復模式(選主)和廣播模式(同步)。

當服務啟動或者在領導者崩潰後,zab就進入了恢復模式,當領導者被選舉出來,且大多數server完成了和leader的狀態同步以後,恢復模式就結束了。

因此,選主得到的leader保證了同步狀態的進行,狀態同步又保證了leader和server具有相同的系統狀態,當leader失去主權後可以在其他follower中選主新的leader。

為了保證事務的順序一致性,zookeeper採用了遞增的事務id號(zxid)來標識事務。所有的提議(proposal)都在被提出的時候加上了zxid。實現中zxid是乙個64位的數字,它高32位是epoch(年號)用來標識leader關係是否改變,每次乙個leader被選出來,它都會有乙個新的epoch(時期、。紀元),標識當前屬於那個leader的統治時期。低32位用於遞增計數。

每個server在工作過程中有三種狀態:

looking:當前server不知道leader是誰,正在搜尋

leading:當前server即為選舉出來的leader

following:leader已經選舉出來,當前server與之同步

1). 選舉過程中,新的server加入

當乙個server啟動時它都會發起一次選舉,此時由選舉執行緒發起相關流程,那麼每個server都會獲得當前zxid最大的那個server,如果本次最大的server沒有獲得n/2+1 個票數,那麼下一次投票時,他將向zxid最大的server投票,重複以上流程,最後一定能選舉出乙個leader。

2). 選舉過程中,server退出

只要保證n/2+1個server存活zk service仍可以正確工作,如果少於n/2+1個server 存活就沒辦法選出leader。

3). 選舉過程中或選舉完成後,leader死亡

當選舉出leader以後,其他server已經處於fllowing 狀態,本次選主過程正常進行。當選主完成後,所有的fllower都會向leader傳送ping訊息,如果無法ping通,就改變自己的狀為(fllowing ==> looking),發起新的一輪選舉。

4). 雙主問題

leader的選舉是保證只產生乙個公認的leader的,而且follower重新選舉與舊leader恢復並退出基本上是同時發生的,當follower無法ping通leader時就認為leader已經出問題開始重新選舉,leader收到follower的ping沒有達到半數以上則要退出leader重新選舉。

el tree只能勾選已選同層

最近有個需求,樹結構選項,如果有已勾選節點了,後續只能勾選同一層級節點資料。感覺可以記錄下。實現思路 1.同一層級的上一節點 父節點 肯定是相同的。所以判斷當前勾選的節點的父節點是否相同 2.如果沒有已選節點則可以隨意勾選節點 orgtreeref node key dataid check cha...

ZooKeeper技術內幕 Leader選舉

leader選舉的實現細節 每台伺服器啟動的時候,都會啟動乙個quorumcnxmanager,負責各台伺服器之間底層的leader選舉過程中的網路通訊。自增選舉輪次 在fastleaderelection實現中,有乙個logicalclock屬性,用於標識當前leader的選舉輪次,zookeep...

Paxos 演算法 與 Zookeeper 集群選舉

分布式系統中,集群副本 是比較重要的存在形式。對於其協議 一般常見分為兩種,中心化副本控制協議 類似主從 另一種 去中心化副本協議 無絕對中心概念,一般選舉產生 本文paxos 演算法 其實是 一種比較經典的 去中心化 副本協議,而 zookeeper 集群選舉流程 其實是一種 簡化版 paxos。...