Zookeeper Election Leader のソース コードの分析 (1)

目次

 1. ソースコードのダウンロード

 2. リーダー選出プロセスを開始する


1. 開始またはリーダーのダウンタイム選出プロセス

2. クライアントとサーバーの対話プロセス (NIO または Netty)

3. データを書き込むための ZAB 整合性プロトコル (メッセージの順序を保証する方法)

4.監視のトリガーメカニズムを監視する

 1. ソースコードのダウンロード

 https://github.com/apache/zookeeper.git

 コードからの切り取り、zkServer.sh ファイルからの切り取り 

 

 プログラムのパラメーターを指定し、QuorumPeerMain.java のメイン関数を開始します。

 

 2 つ目の開始方法

ZooKeeperMain に、次の起動パラメーターを追加します。

 

飼育係クラスターを構築し、正常に開くと、リーダーと花はそれぞれにプロンプ​​トが表示されます

 

 2. リーダー選出プロセスを開始する

1. 最初のマシンは自分自身に投票して他のマシンに送信し、他のマシンも自分自身に投票して他のマシンに送信し、どのマシンの zxid が最も高いかを確認しますが、最初の投票ラウンドの zxid はすべて 0 です。 、したがって、myids を比較し続けます。どちらが大きいか、myid=2 のものが最初のラウンドで投票され、勝者が次のラウンドの選挙に進みます

2. myid=1 と myid=2 の両方が myid 2 のマシンに投票し、(2,0) を勝者として決定します。

 

 ソースコード入力

  構成ファイルをメモリに解析し、スナップショット ファイル タスクをクリーンアップし、コア スタートアップ プロセスの runFromConfig メソッドを実行します。

デフォルトでは、NIO を使用して構成をロードします。下の図に示すように、netty で開始することもできます。

 Qrorum パラメータを初期化し、ノード オブジェクトを内部的に使用して生成します。

起動

 

 

 netty パラメータのロード

 

デフォルトでjettyを起動、ポート8080、運用とメンテナンスで使用

 

 リーダー選挙を開始

 デフォルトのサーバー ステータス: 探しています

 

 

 最終選挙アルゴリズムを見る

 デフォルトでスキップ、3 の選出アルゴリズムを参照

 

投票情報をリッスンするための選挙ポートを開始します 

 

 

投票を送信する 2 つのスレッド

 

 

 上記はスレッド監視のいくつかの方法です。super.start が実際の選択方法です。

 コア選挙ロジック:

        1. 開始ステータス: 探しています

 

コア選挙戦略: fastLeaderElection 

 

 投票メッセージを更新してメッセージを送信します. デバッグ中に sendqueue.offer メソッドが失われる可能性があります. キュー内のメッセージを取得するために上記の poll メソッドがあることを知っておく必要があります. 

 

 

 

 manager.connectAll: ソケット接続を確立します

 

 

 

おすすめ

転載: blog.csdn.net/qq_21575929/article/details/125940403
おすすめ