更新時間:2020-11-06 來源:黑馬程序員 瀏覽量:
當leader崩潰或者leader失去大多數的follower,這時zk進入恢復模式,恢復模式需要重新選舉出一個新的 leader,讓所有的Server都恢復到一個正確的狀態。Zk的選舉算法有兩種:一種是基于basic paxos實現 的,另外一種是基于fast paxos算法實現的。系統默認的選舉算法為 fast paxos 。
1、Zookeeper選主流程(basic paxos)
(1)選舉線程由當前Server發起選舉的線程擔任,其主要功能是對投票結果進行統計,并選出推薦的 Server;
(2)選舉線程首先向所有Server發起一次詢問(包括自己);
(3)選舉線程收到回復后,驗證是否是自己發起的詢問(驗證zxid是否一致),然后獲取對方的id(myid),并存 儲到當前詢問對象列表中,最后獲取對方提議的leader相關信息(id,zxid),并將這些信息存儲到當次選舉的投 票記錄表中;
(4)收到所有Server回復以后,就計算出zxid最大的那個Server,并將這個Server相關信息設置成下一次 要投票的Server;
(5)線程將當前zxid最大的Server設置為當前Server要推薦的Leader,如果此時獲勝的Server獲得n/2 + 1的Server票數,設置當前推薦的leader為獲勝的Server,將根據獲勝的Server相關信息設置自己的狀 態,否則,繼續這個過程,直到leader被選舉出來。 通過流程分析我們可以得出:要使Leader獲得多數 Server的支持,則Server總數必須是奇數2n+1,且存活的Server的數目不得少于n+1. 每個Server啟動后 都會重復以上流程。在恢復模式下,如果是剛從崩潰狀態恢復的或者剛啟動的server還會從磁盤快照中恢復數據和會話信息,zk會記錄事務日志并定期進行快照,方便在恢復時進行狀態恢復。
2、Zookeeper選主流程(fast paxos)
fast paxos流程是在選舉過程中,某Server首先向所有Server提議自己要成為leader,當其它Server收到提議以后,解決epoch和zxid的沖突,并接受對方的提議,然后向對方發送接受提議完成的消息,重復這個流程,最后一定能選舉出Leader。
猜你喜歡: