Zookeeper選舉原理

2021-08-20 03:26:09 字數 1018 閱讀 8948

作為乙個分布式應用程式協調服務,在大型**中,其本身也是集群部署的,安裝zookeeper的時候最好是單數節點,因為要選舉。zookeeper的leader節點是集群工作的核心,用來更新並保證leader和server具有相同的系統狀態,follower伺服器是leader的跟隨者,用於接收客戶端的請求並向客戶端返回結果,在選舉過程中參與投票。對於客戶端來說,每個zookeeper都是一樣的。

zookeeper提供了三種選擇策略:

這裡僅介紹預設的演算法:fastleaderelection。

當系統啟動或者leader崩潰後,就會開始leader的選舉。

狀態變更。伺服器啟動的時候每個server的狀態時looking,如果是leader掛掉後進入選舉,那麼餘下的非observer的server就會將自己的伺服器狀態變更為looking,然後開始進入leader的選舉狀態;

發起投票。每個server會產生乙個(sid,zxid)的投票,系統初始化的時候zxid都是0,如果是執行期間,每個server的zxid可能都不同,這取決於最後一次更新的資料。將投票傳送給集群中的所有機器;

接收並檢查投票。server收到投票後,會先檢查是否是本輪投票,是否來自looking狀態的server;

處理投票。對自己的投票和接收到的投票進行pk:

統計投票。每次投票後,伺服器統計投票資訊,如果有過半機器接收到相同的投票,那麼leader產生,如果否,那麼進行下一輪投票;

改變server狀態。一旦確定了leader,server會更新自己的狀態為following或者是leading。選舉結束。

補充說明:

在步驟2傳送投票的時候,投票的資訊除了sidzxid,還有:

為了能夠相互投票,每兩台伺服器之間都會建立網路連線,為避免重複建立tcp連線,zk的server只允許sid大於自己的伺服器與自己建立連線,否則斷開當前連線,並主動和對方建立連線。

參考:

zookeeper選舉機制

fastleaderelection演算法通過非同步的通訊方式來收集其它節點的選票,同時在分析選票時又根據投票者的當前狀態來作不同的處理,以加快leader的選舉程序。每個在zookeeper伺服器啟動先讀取當前儲存在磁碟的資料,zookeeper中的每份資料都有乙個對應的id值,這個值是依次遞增的...

Zookeeper 選舉機制

選舉訊息內容 fastleaderelection 選舉演算法介紹 伺服器id 編號。比如有三颱伺服器,編號分別是1,2,3。編號越大在選擇演算法中的權重越大。資料id。伺服器中存放的最大資料id。值越大說明資料越新,在選舉演算法中資料越新權重越大。邏輯時鐘,用來判斷多個投票是否在同一輪選舉週期中,...

zookeeper選舉機制

在分布式系統中選主最直接或者傳統的方法是直接選定集群的乙個節點為 leader,其它的節點為 follower,這樣引入的乙個問題是如果 leader節點掛掉,整個集群就掛掉了。所以我們需要一種自動選主演算法,如果 leader節點掛掉,則從 follower節點中選出乙個主節點。選舉階段 lead...