zookeeper Leader選舉過程簡析

假如當前有三個節點(01,02,03),它們的機器id依次爲1,2, 3。

下面是選舉過程:
首先必須要超過半數的機器是活着的,我這裏三節點的集羣,也就是說只有第二臺啓動後,才能選出leader,這兩臺機器都投票的那個機器就是leader

那麼當第二臺機器啓動後是怎麼選出Leader的呢?

由於是新啓動的,所以事務id都爲0,**機器id(也就是myid中的值)**分別爲1,2,3
投票的格式爲<事務id,機器id>
01啓動,發出投票爲<0,1>
02啓動,發出投票爲<0,2>
每個機器都會往集羣中其它機器發送投票,投票首先都是投自己

這樣01會收到02的投票,02也會收到01的投票
收到其它機器的投票後就會比較:首先比較事務id,如果別的機器的事務id大於自身投票的事務id,則改投其它機器,否則不變。
如果事務id一樣,則比較機器id,如果別的機器id大於自身機器id則改投其它機器,否則不變。

02收到01的投票就不會變,01收到02的投票了,由於02機器id大於01,所以01會改投02,01重新發出投票<0,2>

02會收到01重新發出的投票,發現投的是自己,再加上最開始自己投的自己,票數爲2了,已經大於半數,則認爲自己當選leader了
然後向外廣播,說自己是leader了,讓其它機器來同步自己。
到此leader就選舉出來了,只要存在Leader了,其它後面再啓動的機器都會去同步Leader,不會再選舉了。

大家可以自己試試啓動順序
比如先啓動02再啓動01,02肯定是Leader
先啓動02再啓動03,03肯定是Leader

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章