服务器启动时的leader选举
每個節(jié)點(diǎn)啟動的時候狀態(tài)都是LOOKING,處于觀望狀態(tài),接下來就開始進(jìn)行選主流程?
若進(jìn)行Leader選舉,則至少需要兩臺機(jī)器,這里選取3臺機(jī)器組成的服務(wù)器集群為例。在集群初始化階段,當(dāng)有一臺服務(wù)器Server1啟動時,其單獨(dú)無法進(jìn)行和完成Leader選舉,當(dāng)?shù)诙_服務(wù)器Server2啟動時,此時兩臺機(jī)器可以相互通信,每臺機(jī)器都試圖找到Leader,于是進(jìn)入Leader選舉過程。選舉過程如下
(1) 每個Server發(fā)出一個投票。由于是初始情況,Server1和Server2都會將自己作為Leader服務(wù)器來進(jìn)行投票,每次投票會包含所推舉的服務(wù)器的myid和ZXID、epoch,使用(myid, ZXID,epoch)來表示,此時Server1的投票為(1, 0),Server2的投票為(2, 0),然后各自將這個投票發(fā)給集群中其他機(jī)器。
(2) 接受來自各個服務(wù)器的投票。集群的每個服務(wù)器收到投票后,首先判斷該投票的有效性,如檢查是否是本輪投票(epoch)、是否來自LOOKING狀態(tài)的服務(wù)器。
(3) 處理投票。針對每一個投票,服務(wù)器都需要將別人的投票和自己的投票進(jìn)行PK,PK規(guī)則如下?
i. 優(yōu)先比較epoch
ii. 其次檢查ZXID。ZXID比較大的服務(wù)器優(yōu)先作為Leader?
iii. 如果ZXID相同,那么就比較myid。myid較大的服務(wù)器作為Leader服務(wù)器。
對于Server1而言,它的投票是(1, 0),接收Server2的投票為(2, 0),首先會比較兩者的ZXID,均為0,再比較myid,此時Server2的myid最大,于是更新自己的投票為(2, 0),然后重新投票,對于Server2而言,其無須更新自己的投票,只是再次向集群中所有機(jī)器發(fā)出上一次投票信息即可。
(4) 統(tǒng)計(jì)投票。每次投票后,服務(wù)器都會統(tǒng)計(jì)投票信息,判斷是否已經(jīng)有過半機(jī)器接受到相同的投票信息,對于Server1、Server2而言,都統(tǒng)計(jì)出集群中已經(jīng)有兩臺機(jī)器接受了(2, 0)的投票信息,此時便認(rèn)為已經(jīng)選出了Leader。
(5) 改變服務(wù)器狀態(tài)。一旦確定了Leader,每個服務(wù)器就會更新自己的狀態(tài),如果是Follower,那么就變更為FOLLOWING,如果是Leader,就變更為LEADING。
?
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的服务器启动时的leader选举的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leader选举的原理
- 下一篇: 运行过程中的leader选举