目次
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: ソケット接続を確立します