投票時:使用(myid, ZXID)來表示html
處理投票時:服務器
· 優先檢查ZXID。ZXID比較大的服務器優先做爲Leader。數據結構
· 若是ZXID相同,那麼就比較myid。myid較大的服務器做爲Leader服務器。app
Leader選舉實現細節server
1. 服務器狀態htm
服務器具備四種狀態,分別是LOOKING、FOLLOWING、LEADING、OBSERVING。blog
LOOKING:尋找Leader狀態。當服務器處於該狀態時,它會認爲當前集羣中沒有Leader,所以須要進入Leader選舉狀態。事務
FOLLOWING:跟隨者狀態。代表當前服務器角色是Follower。io
LEADING:領導者狀態。代表當前服務器角色是Leader。集羣
OBSERVING:觀察者狀態。代表當前服務器角色是Observer。
2. 投票數據結構
每一個投票中包含了兩個最基本的信息,所推舉服務器的SID和ZXID,投票(Vote)在Zookeeper中包含字段以下
id:被推舉的Leader的SID。
zxid:被推舉的Leader事務ID。
electionEpoch:邏輯時鐘,用來判斷多個投票是否在同一輪選舉週期中,該值在服務端是一個自增序列,每次進入新一輪的投票後,都會對該值進行加1操做。
peerEpoch:被推舉的Leader的epoch。
state:當前服務器的狀態。
https://leesf456.cnblogs.com/p/6107600.html?from=timeline&isappinstalled=0