zookeeper leader選舉

zookeeper選舉算法

  • zookeeper有三種算法來實現(xiàn)leader選舉:
    1. LeaderElection算法
    2. AuthFastLeaderElection算法
    3. FastLeaderElection算法.

具體使用哪種算法,可以在配置文件中配置,對應(yīng)的配置項是electionAlg,
配置值分別對應(yīng)以上序號,默認使用FastLeaderElection算法,本文僅以默認算法流程;

leader 選舉

選舉屬性:

  • electionEpoch:每執(zhí)行一次leader選舉,electionEpoch就會自增,用來標記leader選舉的輪次
  • peerEpoch:每次leader選舉完成之后,都會選舉出一個新的peerEpoch,用來標記事務(wù)請求所屬的輪次
  • serverID:配置文件中配置的每個服務(wù)器對應(yīng)的ID
  • zxid:為了保證事務(wù)一致性,zk采用了遞增的事務(wù)ID號(zxid)來標識事務(wù)。所有的提議都在唄提出的時候加上了zxid。實現(xiàn)中,zxid是一個64位的數(shù)字,它高32位是epoch用來標識leader關(guān)系是否改變,每次一個leader被選出來,它都會有一個新的peerEpoch,標識當前屬于那個leader的通知時期,低32位用于遞增計數(shù);

選舉狀態(tài):

  • Looking: 當前server不知道leader是誰,正在搜尋
  • Following: leader已經(jīng)選舉出來,當前server與之同步
  • Leading: 當前server即為選舉出來的leader
  • Observing:大多數(shù)行為與following一致,但是不參加選舉,只接受選舉的結(jié)果

選舉發(fā)送內(nèi)容:

  • serverID,zxid,peerEpoch,當前選舉狀態(tài);

選舉流程:

  1. 每個服務(wù)器都發(fā)送自己選舉的leader,首輪會發(fā)送的選票都會投給自己;
  2. 服務(wù)器收到其他服務(wù)器的選票:
    收到的推薦人是looking狀態(tài):
    首先判斷邏輯時間:
    (1) 收到的選票邏輯時間大于目前的邏輯時鐘,則說明選舉已經(jīng)進入新一輪了,所以需要更新本機邏輯時間,并清空之前收到的選票信息;然后更新選票信息,廣播出去;
    (2) 收到的選票邏輯時間等于目前的邏輯時鐘,則判斷是否需要更新推薦人,如更新,則廣播出去;
    然后記錄選票信息,本地進行選舉,如選舉出來,則等待一段時間沒有新的選票后,則進行角色確認,更改狀態(tài)返回最終選票;
    收到的推薦人是following、leading狀態(tài):
    (1) 收到的選票邏輯時間等于目前的邏輯時鐘,進行本地選舉,并確定收到的選票為leader,如果確定,則進行角色確認,返回最終選票
    (2) 如果上一步?jīng)]有確定角色且返回最終選票,則將選票存入outofelection中,進行再次選舉,如果能確定出leader,且確定收到的選票為leader,如果確定,則進行角色確認,返回最終選票;

流程圖:

選舉流程圖

選舉判定:

依次判定peerEpoch,zxid,serverId


FastLeaderElection

選舉源碼類:

FastLeaderElection,實現(xiàn)Election接口的lookForLeader方法,從類關(guān)系上來看,AuthFastLeaderElection,LeaderElection這兩個實現(xiàn)類已經(jīng)被廢棄,目前僅剩FastLeaderElection這個實現(xiàn)類;

以上為根據(jù)源碼及網(wǎng)上資料總結(jié),總結(jié)的過程中可以使自己的理解更深刻

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容