首頁技術(shù)文章正文

Zookeeper怎么選取主leader?【黑馬程序員】

更新時間:2020-11-06 來源:黑馬程序員 瀏覽量:

1577370495235_學IT就到黑馬程序員.gif


當leader崩潰或者leader失去大多數(shù)的follower,這時zk進入恢復模式,恢復模式需要重新選舉出一個新的 leader,讓所有的Server都恢復到一個正確的狀態(tài)。Zk的選舉算法有兩種:一種是基于basic paxos實現(xiàn) 的,另外一種是基于fast paxos算法實現(xiàn)的。系統(tǒng)默認的選舉算法為 fast paxos 。

1、Zookeeper選主流程(basic paxos)

(1)選舉線程由當前Server發(fā)起選舉的線程擔任,其主要功能是對投票結(jié)果進行統(tǒng)計,并選出推薦的 Server;

(2)選舉線程首先向所有Server發(fā)起一次詢問(包括自己);

(3)選舉線程收到回復后,驗證是否是自己發(fā)起的詢問(驗證zxid是否一致),然后獲取對方的id(myid),并存 儲到當前詢問對象列表中,最后獲取對方提議的leader相關(guān)信息(id,zxid),并將這些信息存儲到當次選舉的投 票記錄表中;

(4)收到所有Server回復以后,就計算出zxid最大的那個Server,并將這個Server相關(guān)信息設置成下一次 要投票的Server;

(5)線程將當前zxid最大的Server設置為當前Server要推薦的Leader,如果此時獲勝的Server獲得n/2 + 1的Server票數(shù),設置當前推薦的leader為獲勝的Server,將根據(jù)獲勝的Server相關(guān)信息設置自己的狀 態(tài),否則,繼續(xù)這個過程,直到leader被選舉出來。 通過流程分析我們可以得出:要使Leader獲得多數(shù) Server的支持,則Server總數(shù)必須是奇數(shù)2n+1,且存活的Server的數(shù)目不得少于n+1. 每個Server啟動后 都會重復以上流程。在恢復模式下,如果是剛從崩潰狀態(tài)恢復的或者剛啟動的server還會從磁盤快照中恢復數(shù)據(jù)和會話信息,zk會記錄事務日志并定期進行快照,方便在恢復時進行狀態(tài)恢復。

2、Zookeeper選主流程(fast paxos)

fast paxos流程是在選舉過程中,某Server首先向所有Server提議自己要成為leader,當其它Server收到提議以后,解決epoch和zxid的沖突,并接受對方的提議,然后向?qū)Ψ桨l(fā)送接受提議完成的消息,重復這個流程,最后一定能選舉出Leader。


猜你喜歡:

什么是Master選舉?

ZooKeeper集群管理

Java高級軟件工程課程?

分享到:
在線咨詢 我要報名
和我們在線交談!