2021年大数据ZooKeeper(六):ZooKeeper选举机制
目錄
??????ZooKeeper選舉機制
概念
全新集群選舉
非全新集群選舉
ZooKeeper選舉機制
zookeeper默認的算法是FastLeaderElection,采用投票數大于半數則勝出的邏輯。
概念
服務器ID
比如有三臺服務器,編號分別是1,2,3。
編號越大在選擇算法中的權重越大。
選舉狀態
LOOKING,競選狀態。
FOLLOWING,隨從狀態,同步leader狀態,參與投票。
OBSERVING,觀察狀態,同步leader狀態,不參與投票。
LEADING,領導者狀態。
數據ID
服務器中存放的最新數據version。
值越大說明數據越新,在選舉算法中數據越新權重越大。
邏輯時鐘
也叫投票的次數,同一輪投票過程中的邏輯時鐘值是相同的。每投完一次票這個數據就會增加,然后與接收到的其它服務器返回的投票信息中的數值相比,根據不同的值做出不同的判斷。
全新集群選舉
假設目前有5臺服務器,每臺服務器均沒有數據,它們的編號分別是1,2,3,4,5,按編號依次啟動,它們的選擇舉過程如下:
- 服務器1啟動,給自己投票,然后發投票信息,由于其它機器還沒有啟動所以它收不到反饋信息,服務器1的狀態一直屬于Looking。
- 服務器2啟動,給自己投票,同時與之前啟動的服務器1交換結果,由于服務器2的編號大所以服務器2勝出,但此時投票數沒有大于半數,所以兩個服務器的狀態依然是LOOKING。
- 服務器3啟動,給自己投票,同時與之前啟動的服務器1,2交換信息,由于服務器3的編號最大所以服務器3勝出,此時投票數正好大于半數,所以服務器3成為領導者,服務器1,2成為小弟。
- 服務器4啟動,給自己投票,同時與之前啟動的服務器1,2,3交換信息,盡管服務器4的編號大,但之前服務器3已經勝出,所以服務器4只能成為小弟。
- 服務器5啟動,后面的邏輯同服務器4成為小弟。
非全新集群選舉
對于運行正常的zookeeper集群,中途有機器down掉,需要重新選舉時,選舉過程就需要加入數據ID、服務器ID和邏輯時鐘。
數據ID:數據新的version就大,數據每次更新都會更新version。
服務器ID:就是我們配置的myid中的值,每個機器一個。
邏輯時鐘:這個值從0開始遞增,每次選舉對應一個值。 如果在同一次選舉中,這個值是一致的。
這樣選舉的標準就變成:
1、邏輯時鐘小的選舉結果被忽略,重新投票;
2、統一邏輯時鐘后,數據id大的勝出;
3、數據id相同的情況下,服務器id大的勝出;
根據這個規則選出leader。
總結
以上是生活随笔為你收集整理的2021年大数据ZooKeeper(六):ZooKeeper选举机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年大数据ZooKeeper(五)
- 下一篇: 2021年大数据基础(一):大数据概念