zookeeper的leader選舉機制

2021-10-01 23:56:06 字數 1923 閱讀 5181

三個核心選舉原則:

1. zookeeper集群中只有超過了半數以上的伺服器啟動,此集群才能正常工作;

2. 在集群正常工作之前,myid小的伺服器會給myid大的伺服器投票,這種投票會一直持續到集群開始正常工作,即,選出了leader。

3. 選出leader之後,之前的伺服器們的狀態要由looking轉為following,以後的伺服器不管是不是新加進來的都會變成follower從機。

舉例:

​​ 現在有五颱伺服器,組成了乙個zookeeper集群,假設它們的myid為1~5,而且它們都是最新啟動的,沒有歷史資料。

​ 假設這五颱伺服器的啟動順序是從1~5的順序啟動的;

分析:

1. 因為一共五颱伺服器,所以只有超過半數以上,即三颱伺服器,集群才能正常工作。

2. 只有looking狀態的伺服器才能進行投票,處於following狀態和leading狀態的伺服器不再參與投票。

開始

第一步: 伺服器1啟動,發起一次選舉,

首先伺服器1會投給自己一票,

小結:此時伺服器1具備1票,不夠半數(即3票),選舉無法完成,故伺服器1的狀態還是保持looking。

第二步: 伺服器2啟動,發起了一次選舉,
首先伺服器2會投給自己一票,

然後伺服器1也會投自己一票, 但是當它在投的時候,發現伺服器2的myid值比伺服器1的myid值大,此時它會轉而把這一票投給伺服器2。

小結:伺服器2在本次選舉中收到了2票,但還是不夠半數,沒有完成選舉;

伺服器2的狀態仍然保持looking;

第三步:伺服器3啟動,再發起一次選舉,
與上面過程一致,

伺服器3會投給自己一票,

然後伺服器1在投給自己一票的時候,發現伺服器3的myid值比伺服器1的myid值大,所以伺服器1會轉而把這一票投給伺服器3,

同理,伺服器2與伺服器1一樣,也是把原本打算投給自己的這一票轉而投給了伺服器3;

小結:本次選舉中,伺服器3的票數有3票,超過半數,伺服器3當選leader,

於是伺服器1和2的狀態由原來的looking改為了follwing。

注意: 此時,伺服器3當選leader了,但是還沒有真正的成為leader,只是準leader(因為還有伺服器沒有啟動呢),此時伺服器3的狀態是變成了leading。

第四步:只要還沒有真正的leader出現,選舉就還要進行。所以伺服器4啟動,再發起一次選舉,
此時,伺服器1和2的狀態已經變成了follwing,所以不會再參與投票了;

伺服器4還是處於following狀態,它會準備投給自己一票,而且它的myid值還比伺服器3的myid值要大,所以它更想投給自己一票;

但是,伺服器4發現,伺服器3已經收到了3票(超過了半數),即,已經成為了準leader了;

所以,此時伺服器4就會遵從:少數服從多數原則(服從leader原則),轉而將自己的這一票改投給——準leader伺服器3,

小結:然後伺服器4的狀態也變成了following,

此時伺服器3的票數變成了4票!

第五步:伺服器5啟動,還是再發起一次選舉,
伺服器5會和伺服器4一樣,遵從少數服從多數原則(服從leader原則),把票投給了伺服器3,

小結:然後伺服器5的狀態也會變成了following,

此時伺服器3的票數變成了5票!

最後:伺服器全部啟動完畢,選舉結束。
最終選舉結果出爐:伺服器3變成了真的leader,

其他的伺服器(即1245伺服器)變成了follower.

通過Q1研發leader述職看leader成長

4月15日,hrbp組織了研發團隊的述職 在這次述職中,除了了解大家的業務產出外,也還有一件非常有意義的事情,述職過程中體現出了各個leader目前所處的階段 遇到的問題。針對他們所在的階段和遇到的問題,一一給了建議。令人欣慰的是,研發團隊的leader都在進步的路上,相信他們在未來的職業之路上,會...

zookeeper集群 Zookeeper集群搭建

zookeeper有兩種執行模式 單機模式和集群模式。因為單機模式只是在開發測試時使用,所以這裡就不介紹單機模式的搭建。注意 因為zookeeper遵循半數原則,所以集群節點個數最好是奇數。ip位址 系統環境 192.168.0.10 centos7 jdk8 192.168.0.11 centos...

zookeeper集群 Zookeeper集群搭建

埠分別為 2181 2182 2183。投票選舉埠分別為 2881 3881 2882 3882 2883 3883。tar zxf zookeeper 3.4.6.tar.gz 將解壓後的 zookeeper 應用目錄重新命名,便於管理 在 zookeeper01 應用目錄中,建立 data 目錄...