簡述ZK的fastleaderelection選舉leader的算法

假設有三個server,server1,server2,server3服務器

服務啓動時期的選舉server

1.每一個Server發出一個投票統計

        投票包含(myid,ZXID),剛開始server都是投本身的,即Server1的投票爲(1,0),Server2的投票爲(2,0)

2.接收來自各個服務器的投票

    每一個服務器接收來自其餘服務器的投票,接收到投票,檢查投票的有效性(是否爲本輪投票,是否來自LOOKING狀態的服務器)

3.處理投票

    針對每一個投票,服務器都須要將別人的投票和本身的投票進行PK

  •    優先檢查ZXID,ZXID比較大做爲leader
  •    ZXID相等,比較myid

    本例Server2與Server1 PK,更新server1的投票爲(2,0),server2投票保持不變

4.統計投票

  每次投票後,服務器都會統計全部投票,判斷是否有過半機器收到相同的投票信息。本例中,server2擁有過半的票數,選爲leader

5.改變服務器狀態

  leader狀態---->LEADING,follower狀態------>FOLLOWING

服務器運行期間選舉(發生在leader那臺服務掛了)

1.變動狀態

  當leader(本例中server2)掛了後,非observer服務器狀態變爲LOOKING,進入leader選舉(同上)

相關文章
相關標籤/搜索