zookeeper之leader選舉過程

2021-10-08 20:39:45 字數 1548 閱讀 3827

關於leader選舉會分為兩個過程:

1.啟動時leader的選舉

2.leader崩潰時的選舉

一在每個節點剛啟動的時候,狀態都是locking狀態,然後就會開始選舉的流程,因為leader選舉至少需要兩台伺服器,所以一般會選舉三颱組成伺服器集群。當第一台伺服器剛啟動的時候,它自己是無法進行和完成leader選舉的,等待第二台伺服器啟動的時候,兩台機器才可以相互通訊。每台機器都試圖找到leader,就進入leader的選舉過程。

1.每乙個伺服器都會發起乙個投票,由於剛開始第一輪啟動,所以都會選擇自己。然後生成乙個(myid,zxid.epoch)訊息,epoch為0,zxid也為0.此時假設伺服器a先啟動,則訊息為(1,0),伺服器b生成的訊息為(2,0),然後將投票發給急群中的其他機器

2.接收來自其他各個伺服器上的投票。集群中各個伺服器接收到投票後,會先判斷該投票的有效性,先檢查版本是否本輪投票、是否來自lock狀態的伺服器。

3.處理該投票。先比較其他伺服器的投票與自己的,比較順序為:

1.優先檢查 zxid。zxid 比較大的伺服器優先作為leader

2.如果 zxid 相同,那麼就比較 myid。myid 較大的伺服器作為 leader 伺服器。

對於 server1 而言,它的投票是(1, 0),接收 server2的投票為(2, 0),首先會比較兩者的 zxid,均為 0,再比較 myid,此時 server2 的 myid 最大,於是更新自己的投票為(2, 0),然後重新投票。

對於 server2 而言,它不需要更新自己的投票,只是再次向集群中所有機器發出上一次投票資訊即可。

此時更新投票為第二輪,epoch+1

4.統計投票資訊,每次投票後,伺服器都會統計投票資訊,判斷是否已經有過半機器接受到相同的投票資訊,對於 server1、server2 而言,都統計出集群中已經有兩台機器接受了(2, 0)的投票資訊,此時便認為已經選出了 leader。

5.改變伺服器狀態。一旦確定了 leader,每個伺服器就會更新自己的狀態,如果是 follower,那麼就變更為following,如果是 leader,就變更為 leading。

二、執行過程中的 leader 選舉

當集群中的 leader 伺服器出現宕機或者不可用的情況時,那麼整個集群將無法對外提供服務,而是進入新一輪的leader 選舉,伺服器執行期間的 leader 選舉和啟動時期的 leader 選舉基本過程是一致的。

1.變更狀態。leader 掛後,餘下的非 observer 伺服器都會將自己的伺服器狀態變更為 looking,然後開始進入 leader 選舉過程。

2.每個 server 會發出乙個投票。在執行期間,每個伺服器上的 zxid 可能不同,此時假定 server1 的 zxid 為123,server3的zxid為122;在第一輪投票中,server1和 server3 都會投自己,產生投票(1, 123),(3, 122),然後各自將投票傳送給集群中所有機器。接收來自各個伺服器的投票。與啟動時過程相同。

3處理投票。與啟動時過程相同,此時,server1 將會成為 leader。

4.統計投票。與啟動時過程相同。

5改變伺服器的狀態。與啟動時過程相同.

Zookeeper之FileTxnLog原始碼分析

if hdr null if hdr.getzxid lastzxidseen is for hdr.getzxid lastzxidseen,hdr.gettype else if logstream null util.makelogname hdr.getzxid logfilewrite n...

Zookeeper之工作原理

zookeeper是乙個分布式的,開放原始碼的分布式應用程式協調服務,它包含乙個簡單的原語集,分布式應用程式可以基於它實現同步服務,配置維護和命名服務等。zookeeper是hadoop的乙個子專案,其發展歷程無需贅述。在分布式應用中,由於工程師不能很好地使用鎖機制,以及基於訊息的協調機制不適合在某...

zookeeper學習之簡述

概況 zookeeper是乙個分布式的,開放原始碼的分布式應用程式協調服務,是google的chubby乙個開源實現,是hadoop和hbase的重要元件。它是乙個為分布式應用提供一致性服務的軟體,提供的功能包括 配置維護 網域名稱服務 分布式同步 組服務等。用途 常用來管理資料,例如作為dubbo...