讓我們分析如何在ZooKeeper集合中選舉leader節點。考慮一個叢集中有N個節點。leader選舉的過程如下:
- 所有節點建立具有相同路徑 /app/leader_election/guid_ 的順序、臨時節點。
- ZooKeeper集合将附加10位序列号到路徑,建立的znode将是 /app/leader_election/guid_0000000001,/app/leader_election/guid_0000000002等。
- 對于給定的執行個體,在znode中建立最小數字的節點成為leader,而所有其他節點是follower。
- 每個follower節點監視下一個具有最小數字的znode。例如,建立znode/app/leader_election/guid_0000000008的節點将監視znode/app/leader_election/guid_0000000007,建立znode/app/leader_election/guid_0000000007的節點将監視znode/app/leader_election/guid_0000000006。
- 如果leader關閉,則其相應的znode/app/leader_electionN會被删除。
- 下一個線上follower節點将通過螢幕獲得關于leader移除的通知。
- 下一個線上follower節點将檢查是否存在其他具有最小數字的znode。如果沒有,那麼它将承擔leader的角色。否則,它找到的建立具有最小數字的znode的節點将作為leader。
- 類似地,所有其他follower節點選舉建立具有最小數字的znode的節點作為leader。