zookeeperのleader選挙過程
リーダー選挙の流れ
リーダー選挙は、分散的なデータの整合性を保証する重要なポイントです。Zookeeperクラスタ内のサーバーが次の2つの状況になった時、リーダー選挙に入る必要があります。クラスタサーバ起動時のリーダー選挙 リーダー選挙を行うなら、少なくとも2台のマシンが必要です。ここで3台のマシンからなるサーバークラスタを選択します。クラスタ初期化段階において、サーバServer 1が起動された時に、単独でリーダー選挙を行うことができず、2台目のサーバServer 2が起動されると、2台のマシンは互いに通信でき、各マシンはLeaderを見つけようとして、Leader選挙のプロセスに入る。選挙過程は5段階に分けられます。サーバ実行時のリーダー選挙 Zookeeperが実行している間、リーダーと非Leaderサーバがそれぞれ役割を果たしています。Leaderサーバのあたごがある場合でも、新たに加入した場合は、リーダーに影響はありませんが、Leaderサーバがインストールされると、クラスタ全体は外部サービスを停止し、新たなLeader選挙に入ります。その過程と起動時期のLeader選挙過程はほぼ一致します。Server 1、Server 2、Server 3のサーバーが実行されていると仮定して、現在のLeaderはServer 2です。いつかLeaderがかかったら、Leader選挙が始まります。選挙過程は6段階に分けられます。
Zookeeper 3.4.0以降のバージョンはTCPバージョンのFastLeaderElectionの選挙アルゴリズムだけを残しています。一つのマシンがリーダーの選挙に入ると、現在のクラスタは以下の二つの状態になります。サーバ状態 投票データ構造 QuorumCnxManager:ネットワークI/O
リーダー選挙は、分散的なデータの整合性を保証する重要なポイントです。Zookeeperクラスタ内のサーバーが次の2つの状況になった時、リーダー選挙に入る必要があります。
1. 。
2. Leader 。
二つの場合の解析
:
Server 。 ,Server1 Server2 Leader ,
myid ZXID, (myid, ZXID) , Server1 (1, 0),
Server2 (2, 0), 。
:
。 , , 、
LOOKING 。
:
。 , PK,PK
1. ZXID。ZXID Leader。
2. ZXID , myid。myid Leader 。
Server1 , (1, 0), Server2 (2, 0), ZXID, 0,
myid, Server2 myid , (2, 0), , Server2 ,
, 。
:
。 , , ,
Server1、Server2 , (2, 0) ,
Leader。
:
。 Leader, , Follower,
FOLLOWING, Leader, LEADING。
:
。Leader , Observer LOOKING,
Leader 。
:
Server 。 , ZXID , Server1 ZXID 123,
Server3 ZXID 122; ,Server1 Server3 , (1, 123),(3, 122),
。
:
。 , , 、
LOOKING 。
:
。 , PK,PK
1. ZXID。ZXID Leader。
2. ZXID , myid。myid Leader 。
Server1 , (1, 123), Server3 (3, 122), ZXID,
Server1 Server3, Server1 , ,
Server3 , ZXID Server1 , (1, 123),
, Server1 Leader。
:
。 , , ,
Server1、Server3 , (1, 123) ,
Leader。
:
Leader , 。 Leader, ,
Follower, FOLLOWING, Leader, LEADING。
リーダー選挙アルゴリズム分析Zookeeper 3.4.0以降のバージョンはTCPバージョンのFastLeaderElectionの選挙アルゴリズムだけを残しています。一つのマシンがリーダーの選挙に入ると、現在のクラスタは以下の二つの状態になります。
1. Leader。
2. Leader。
クラスタ内に既にリーダーが存在する場合、通常はあるマシンの起動が遅くなり、その起動前にクラスタが正常に動作している場合、このマシンがリーダーを選挙しようとすると、現在のサーバのリーダー情報が通知されます。このマシンにとっては、リーダーマシンと接続を確立し、状態同期を行うだけで良いです。クラスタ内にリーダーが存在しない場合は比較的複雑であり、そのステップは以下の通りである。 :
。 Leader , Leader , LOOKING
,LOOKING , 。 SID( ) ZXID
( ID),(SID, ZXID) 。 Zookeeper 5 ,SID 1、2、3、4、
5,ZXID 9、9、9、8、8, SID 2 Leader , ,1、2 ,
Leader 。 , , SID 3、4、5
(3, 9),(4, 8), (5, 8)。
:
。 , , ,
, Leader , :
1. vote_sid: Leader SID。
2. vote_zxid: Leader ZXID。
3. self_sid: SID。
4. self_zxid: ZXID。
, (vote_sid, vote_zxid) (self_sid, self_zxid) 。
: vote_zxid self_zxid, , 。
: vote_zxid self_zxid, , 。
: vote_zxid self_zxid, SID, vote_sid self_sid,
, 。
: vote_zxid self_zxid, vote_sid self_sid, 。
, 。
:
Leader。 , , ,
, SID Leader。 Server3 Leader。
, (ZXID ), Leader ,
。 ZXID , SID 。
リーダー選挙実現の詳細 , LOOKING、FOLLOWING、LEADING、OBSERVING。
LOOKING: Leader 。 , Leader,
Leader 。
FOLLOWING: 。 Follower。
LEADING: 。 Leader。
OBSERVING: 。 Observer。
, SID ZXID, (Vote) Zookeeper
id: Leader SID。
zxid: Leader ID。
electionEpoch: , , ,
, 1 。
peerEpoch: Leader epoch。
state: 。
, QuorumPeerManager, Leader
。
(1) 。QuorumCnxManager , 、 ,
, SID , 3 , 3
, 。
· recvQueue: , 。
· queueSendMap: , , SID 。
· senderWorkerMap: , SenderWorker , Zookeeper ,
, SID 。
· lastMessageSent: , SID 。
(2) 。 ,Zookeeper 。QuorumCnxManager
ServerSocket Leader ( 3888)。 ,Zookeeper
, TCP , 。
TCP ,Zookeeper SID , 。
, SID , SID
, , 。 , SID
SendWorker RecvWorker, 。
(3) 。 : RecvWorker , Zookeeper
RecvWorker, , RecvWorker TCP , recvQueue
。 : Zookeeper SendWorker, , SendWorker
, lastMessageSent 。
SendWorker , Zookeeper , lastMessageSent
, ,
。 ,Zookeeper , 。
4.FastLeaderElection:選挙アルゴリズムの核心 · : 。
· : 。
· :Zookeeper Leader , logicalclock。
· PK: 。
(1)
· sendqueue: , 。
· recvqueue: , 。
· WorkerReceiver: 。 QuorumCnxManager ,
, recvqueue , , ,
, 。
· WorkerSender: , sendqueue , QuorumCnxManager 。
(2)
FastLeaderElection I/O 。Leader
1. 。Zookeeper , ,
logicalclock 。
2. 。 , , ,
Leader。
3. 。 , 。Zookeeper
sendqueue , WorkerSender 。
4. 。 recvqueue 。
, , , ,
, 。
5. 。 , 。 ,
。
· 。 ,
(logicalclock), ,
PK 。 。
· 。 ,
Zookeeper , , 4。
· 。 PK。
6. PK。 PK , 。
· Leader , 。
· , ZXID, ZXID , 。
· ZXID , SID, SID , 。
7. 。 PK , , ,
, , 。
8. 。 , recvset 。recvset
Leader ( SID , {(1, vote1), (2, vote2)...})。
9. 。 , ,
, , 。 4。
10. 。 , ,
Leader , , LEADING, ,
FOLLOWING OBSERVING。
10 FastLeaderElection , 4-9 , Leader 。