zookeeper中的選舉機制

2021-08-21 17:11:27 字數 1284 閱讀 7622

選舉機制發生的時間

選舉演算法

zookeeper提供了三種方式:

選舉中的概念

選舉參與的引數

值越大說明資料月新,在選舉演算法中資料約新權重越大

選舉狀態

leader選舉邏輯描述

啟動時的leader選舉

每個節點啟動時的狀態都是looking,處於 競選狀態,接下來就是開始進行選取leader的過程。

進行leader選舉 至少需要兩台機器,我們選取3臺機器組成的集群為例。在集群初始化階段,當一台伺服器server1啟動時,它本身是無法進行和完成leader選舉,當第二台伺服器server2啟動時,這時候兩台機器可以互相通訊,每台機器都試圖找到leader,於是進入leader選舉過程:

(1) : 每個server都發出一票,由於是初始情況,server1和 server2 都會先投自己,將自己作為leader,每次投票都包含 myid,zxid,epoch。假設 server1的資訊為(1,0),server2的資訊為(2,0)。然後將投票資訊廣播給其他機器。

(2): 接受來自各個伺服器的投票資訊。收到資訊後,首先判斷投票資訊的有效性, 如檢查是否是本輪投票(epoch),是否來自looking狀態的伺服器。

(3): 處理投票,針對每乙個投票,伺服器都需要將別人的投票和自己的投票進行 pk,pk規則如下

(4): 統計投票,每次投票後,伺服器都會統計投票資訊,判斷是否已經有過半機器接受到相同的投票資訊,

(5): 改變服務伺服器狀態,一但完成選舉,確定leader,每個伺服器就會更新自己的狀態,如果是follower 那麼就變更為follower,如果是leader 那就變更為leader

執行過程中的leader選舉

當集群中的leader節點出現宕機或者不可用的情況時,那麼整個集群無法對外提供服務,而是進入新一輪的leader選舉,伺服器執行期間是leader的選舉過程和啟動時的leader選舉基本過程一致。

(1) 狀態變更,leader掛掉後,餘下的非observer伺服器都會將自己的伺服器狀態變更為looking狀態,然後開始選舉過程

(2) 每個server會發出乙個投票,在執行期間,每個伺服器上的zxid可能不同,假設server1的zxid為123 ,server3的zxid為122,在第一輪的投票中,server1或server3都會投自己,產生投票資訊(123,1),(3,123)。然後將各自投票傳送給集群中所有機器,接受來自各個伺服器的投票,與啟動過程相同。

(3) 處理投票

(4) 統計投票

(5)選舉成功,改變伺服器狀態

zookeeper選舉機制

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

Zookeeper 選舉機制

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

zookeeper選舉機制

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