1. 程式人生 > >Zookeeper -- leader選舉

Zookeeper -- leader選舉

        Zookeeper的核心是源自廣播,實現這個機制的協議是Zab協議。Zab協議有兩種模式,分別是恢復模式和廣播模式。當伺服器啟動或者領導者崩潰後,Zab就進入了恢復模式,當領導者被選舉出來,且大多數Server完成了和leader的狀態同步以後,恢復模式就結束了。

        zookeeper次用了遞增的食物id號(zxid)來標識事務。所有提議在被踢出來的時候都加上了zxid。實現中zxid是一個64位的數字,它高32位是epoch用來標識leader關係是否改變,每次一個leader被選出來,它都會有一個新的epoch,標識當前屬於那個leader的統治時期。低32位用於遞增計數。

        server在工作過程中有三種狀態:

        (1)觀察者:LOOKING,當前server不知道leader是誰,正在尋找

        (2)領導者:LEADING,選舉出的leader伺服器

        (3)跟隨著:FOLLOWING,leader已經選出來,當前server與之同步

        當前leader崩潰或者失去大多數的follower,這時候zk進入恢復模式,恢復模式需要重新選舉出一個新的leader,讓所有的Server都恢復到一個正確的狀態。選舉演算法兩種:basic paxos、fast paxos,預設是後者。

        每個server重啟或者啟動都會先,找leader,如下:

         (1)basic paxos:當前server向叢集內所有server發起詢問,得到回覆,統計其他server推薦的leader,選擇zxid最大的作為推薦leader,如果同時該server擁有超過半數的支援,則把它作為leader,修改自己的資訊;如果沒有獲得半數以上支援則再次發起詢問,直至得到leader資訊。

         (2)fast paxos:某Server首先向所有Server提議自己要成為leader,一週期後,如果沒有被選擇為leader,則根據收到的回覆資訊,更新自己的投票,重新發起提議(這次推薦其他server,zxid最大的 ),不斷重複,直至選出leader。