Zookeeper Leader選舉機(jī)制

一、前言

前面學(xué)習(xí)了Zookeeper服務(wù)端的相關(guān)細(xì)節(jié),其中對于集群啟動而言,很重要的一部分就是Leader選舉,接著就開始深入學(xué)習(xí)Leader選舉。

二、Leader選舉

2.1 Leader選舉概述

Leader選舉是保證分布式數(shù)據(jù)一致性的關(guān)鍵所在。當(dāng)Zookeeper集群中的一臺服務(wù)器出現(xiàn)以下兩種情況之一時,需要進(jìn)入Leader選舉。
(1) 服務(wù)器初始化啟動。

(2) 服務(wù)器運(yùn)行期間無法和Leader保持連接。

下面就兩種情況進(jìn)行分析講解。

  1. 服務(wù)器啟動時期的Leader選舉
    若進(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(輪次ID),使用(myid, ZXID)來表示,此時Server1的投票為(1, 0),Server2的投票為(2, 0),然后各自將這個投票發(fā)給集群中其他機(jī)器。

(2) 接受來自各個服務(wù)器的投票。集群的每個服務(wù)器收到投票后,首先判斷該投票的有效性,如檢查是否是本輪投票、是否來自LOOKING狀態(tài)的服務(wù)器。

(3) 處理投票。針對每一個投票,服務(wù)器都需要將別人的投票和自己的投票進(jìn)行PK,PK規(guī)則如下

· 優(yōu)先檢查ZXID。ZXID比較大的服務(wù)器優(yōu)先作為Leader。
· 如果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)計投票。每次投票后,服務(wù)器都會統(tǒng)計投票信息,判斷是否已經(jīng)有過半機(jī)器接受到相同的投票信息,對于Server1、Server2而言,都統(tǒng)計出集群中已經(jīng)有兩臺機(jī)器接受了(2, 0)的投票信息,此時便認(rèn)為已經(jīng)選出了Leader。

(5) 改變服務(wù)器狀態(tài)。一旦確定了Leader,每個服務(wù)器就會更新自己的狀態(tài),如果是Follower,那么就變更為FOLLOWING,如果是Leader,就變更為LEADING。

  1. 服務(wù)器運(yùn)行時期的Leader選舉
    在Zookeeper運(yùn)行期間,Leader與非Leader服務(wù)器各司其職,即便當(dāng)有非Leader服務(wù)器宕機(jī)或新加入,此時也不會影響Leader(后來的節(jié)點(diǎn)自動認(rèn)老大,無投票過程),但是一旦Leader服務(wù)器掛了,那么整個集群將暫停對外服務(wù),進(jìn)入新一輪Leader選舉,其過程和啟動時期的Leader選舉過程基本一致。假設(shè)正在運(yùn)行的有Server1、Server2、Server3三臺服務(wù)器,當(dāng)前Leader是Server2,若某一時刻Leader掛了,此時便開始Leader選舉。選舉過程如下

(1) 變更狀態(tài)。Leader掛后,余下的非Observer服務(wù)器都會講自己的服務(wù)器狀態(tài)變更為LOOKING,然后開始進(jìn)入Leader選舉過程。

(2) 每個Server會發(fā)出一個投票。在運(yùn)行期間,每個服務(wù)器上的ZXID可能不同(后加入集群的zxid?。?,此時假定Server1的ZXID為123,Server3的ZXID為122;在第一輪投票中,Server1和Server3都會投自己,產(chǎn)生投票(1, 123),(3, 122),然后各自將投票發(fā)送給集群中所有機(jī)器。

(3) 接收來自各個服務(wù)器的投票。與啟動時過程相同。

(4) 處理投票。與啟動時過程相同,此時,Server1將會成為Leader(混年頭)。

(5) 統(tǒng)計投票。與啟動時過程相同。

(6) 改變服務(wù)器的狀態(tài)。與啟動時過程相同。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、前言 前面學(xué)習(xí)了Zookeeper服務(wù)端的相關(guān)細(xì)節(jié),其中對于集群啟動而言,很重要的一部分就是Leader選舉,...
    數(shù)據(jù)萌新閱讀 1,327評論 0 0
  • 一、前言 前面學(xué)習(xí)了Zookeeper服務(wù)端的相關(guān)細(xì)節(jié),其中對于集群啟動而言,很重要的一部分就是Leader選舉,...
    weare_b646閱讀 68評論 0 0
  • 一、前言前面學(xué)習(xí)了Zookeeper服務(wù)端的相關(guān)細(xì)節(jié),其中對于集群啟動而言,很重要的一部分就是Leader選舉,接...
    __元昊__閱讀 163評論 0 5
  • 一、前言 前面學(xué)習(xí)了Zookeeper服務(wù)端的相關(guān)細(xì)節(jié),其中對于集群啟動而言,很重要的一部分就是Leader選舉,...
    __豆約翰__閱讀 300評論 0 0
  • 選舉機(jī)制中的概念: Serverid:服務(wù)器 ID。 編號越大在選擇算法中權(quán)重越大。 Zxid:數(shù)據(jù) ID。Zoo...
    hellow0rld閱讀 711評論 0 0

友情鏈接更多精彩內(nèi)容