zookeeper之leader選舉過程

關(guān)于leader選舉會分為兩個過程:

1.啟動時(shí)leader的選舉

2.leader崩潰時(shí)的選舉

在每個節(jié)點(diǎn)剛啟動的時(shí)候,狀態(tài)都是Locking狀態(tài),然后就會開始選舉的流程,因?yàn)閘eader選舉至少需要兩臺服務(wù)器,所以一般會選舉三臺組成服務(wù)器集群。當(dāng)?shù)谝慌_服務(wù)器剛啟動的時(shí)候,它自己是無法進(jìn)行和完成leader選舉的,等待第二臺服務(wù)器啟動的時(shí)候,兩臺機(jī)器才可以相互通信。每臺機(jī)器都試圖找到leader,就進(jìn)入leader的選舉過程。

1.每一個服務(wù)器都會發(fā)起一個投票,由于剛開始第一輪啟動,所以都會選擇自己。然后生成一個(myid,Zxid.epoch)消息,epoch為0,zxid也為0.此時(shí)假設(shè)服務(wù)器A先啟動,則消息為(1,0),服務(wù)器B生成的消息為(2,0),然后將投票發(fā)給急群中的其他機(jī)器

2.接收來自其他各個服務(wù)器上的投票。集群中各個服務(wù)器接收到投票后,會先判斷該投票的有效性,先檢查版本是否本輪投票、是否來自Lock狀態(tài)的服務(wù)器。

3.處理該投票。先比較其他服務(wù)器的投票與自己的,比較順序?yàn)?

1.優(yōu)先檢查 ZXID。ZXID 比較大的服務(wù)器優(yōu)先作為Leader
2.如果 ZXID 相同,那么就比較 myid。myid 較大的服務(wù)器作為 Leader 服務(wù)器。

對于 Server1 而言,它的投票是(1, 0),接收 Server2的投票為(2, 0),首先會比較兩者的 ZXID,均為 0,再比較 myid,此時(shí) Server2 的 myid 最大,于是更新自己的投票為(2, 0),然后重新投票。

對于 Server2 而言,它不需要更新自己的投票,只是再次向集群中所有機(jī)器發(fā)出上一次投票信息即可。

此時(shí)更新投票為第二輪,epoch+1

4.統(tǒng)計(jì)投票信息,每次投票后,服務(wù)器都會統(tǒng)計(jì)投票信息,判斷是否已經(jīng)有過半機(jī)器接受到相同的投票信息,對于 Server1、Server2 而言,都統(tǒng)計(jì)出集群中已經(jīng)有兩臺機(jī)器接受了(2, 0)的投票信息,此時(shí)便認(rèn)為已經(jīng)選出了 Leader。

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

二、運(yùn)行過程中的 leader 選舉

當(dāng)集群中的 leader 服務(wù)器出現(xiàn)宕機(jī)或者不可用的情況時(shí),那么整個集群將無法對外提供服務(wù),而是進(jìn)入新一輪的Leader 選舉,服務(wù)器運(yùn)行期間的 Leader 選舉和啟動時(shí)期的 Leader 選舉基本過程是一致的。

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

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

3處理投票。與啟動時(shí)過程相同,此時(shí),Server1 將會成為 Leader。

4.統(tǒng)計(jì)投票。與啟動時(shí)過程相同。

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

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

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

  • 【轉(zhuǎn)自】http://www.cnblogs.com/leesf456/p/6107600.html 一、前言 前...
    lxqfirst閱讀 898評論 0 0
  • 一、Leader選舉過程 Leader選舉是保證分布式數(shù)據(jù)一致性的關(guān)鍵所在。當(dāng)Zookeeper集群中的一臺服務(wù)器...
    yannhuang閱讀 1,304評論 0 2
  • 一、前言 前面學(xué)習(xí)了Zookeeper服務(wù)端的相關(guān)細(xì)節(jié),其中對于集群啟動而言,很重要的一部分就是Leader選舉,...
    阿斯蒂芬2閱讀 17,738評論 4 19
  • zookeeper集群中往往需要在集群服務(wù)器中選舉出一個Leader,Leader選舉是保證分布式數(shù)據(jù)一致性的關(guān)鍵...
    探索者_(dá)逗你玩兒閱讀 521評論 0 0
  • Leader選舉是保證分布式數(shù)據(jù)一致性的關(guān)鍵所在。當(dāng)Zookeeper集群中的一臺服務(wù)器出現(xiàn)以下兩種情況之一時(shí),需...
    tracy_668閱讀 1,325評論 1 11

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