分散ロック・キュレーターの枠組みの中にいくつかのツール
InterProcessMutex:分散排他ロックリエントラント
InterProcessSemaphoreMutex:分散排他ロック
InterProcessReadWriteLock:分散読み書きロック
コード:
飼育係の実現リーダー選挙を使用します
ラッチが選挙に参加するすべてのノードのリーダーは、ノードのシーケンスを作成し、最小のノードが前のノードを削除した後、ノードのリーダーは、ノード、グラブの再マスターをリッスンする前にイベントを削除つかむなかった、ノードをマスターするために設定されています、マスタノードは、()メソッドまたはマスターノードがハングアップし、次のサブマスタノードはつかむであろう手動近い呼び出したとき。このメソッドを使用してスパーク
LeaderSelector
LeaderSelectorとリーダーは、あなたが競争を続けることができ、ほとんど差がリーダーのリーダーシップが後半にリリースすることができ、ということであるラッチ
パブリック クラス LeaderSelectorClientは拡張 LeaderSelectorListenerAdapterが実装閉鎖可能{ プライベート 文字列名を、 // 表示当前的进程 プライベート LeaderSelector leaderSelector。 // リーダー选举の的のAPI プライベートたCountDownLatchたCountDownLatch = 新たCountDownLatch(1 ); パブリックLeaderSelectorClient(){ } 公共LeaderSelectorClient(文字列名){ この .nameの= 名前。 } 公共LeaderSelector getLeaderSelector(){ リターン leaderSelectorと、 } 公共 ボイドsetLeaderSelector(LeaderSelector leaderSelector){ この .leaderSelector = leaderSelector; } パブリック 無効スタート(){ leaderSelector.start(); // 競争のリーダー開始 } @Override 公共 ボイド takeLeadership(CuratorFrameworkクライアント)がスロー例外{ // 入ってくる場合をロックを取得するために、現在のプロセスを意味する現在の方法。ロックを取得した後、このメソッドはコールバックです // このメソッドの実装後、解除権のリーダーを示す のSystem.out.println(「 - >は、今リーダーである」名前+を); // CountDownLatch.await(); // ブロックを現在のプロセスは、損失のリーダーを防ぎ } @Override 公共 ボイド近い()は、スローのIOException { leaderSelector.close()。 } プライベート 静的文字列CONNECTION_STRは= "XXXX:2181; パブリック静的ボイドメイン(文字列[]引数)がスローにIOException { CuratorFramework curatorFramework = 。CuratorFrameworkFactory.builder() のconnectString(CONNECTION_STR).sessionTimeoutMs( 50000000を)。 retryPolicy(新しい ExponentialBackoffRetry(1000 3 。))の構築(); curatorFramework.start(); LeaderSelectorClient leaderSelectorClient =新しい LeaderSelectorClient( "クライアントA" ); LeaderSelector leaderSelector = 新しい LeaderSelector(curatorFramework、 "/リーダー" 、leaderSelectorClient)。 leaderSelectorClient.setLeaderSelector(leaderSelector)。 leaderSelectorClient.start(); // 开始选举 System.in.read(); } }
ZAB合意紹介
ZABプロトコルは、2つの基本モードを含み、
2. 1.クラッシュリカバリは放送原子であります
起動時の場合は、クラスタ全体、またはネットワーク障害のリーダーノードが発生したときの状況がクラッシュし、ZAB契約はリカバリモードに入り、新しいリーダーがサーバによって選出されたリーダー、およびクラスタマシンとよりの半分以上を選出しますリーダーノードは、データの同期を(同期データの同期は、クラスタの半分を確保するために使用されることを意味し、データの一貫性マシン状態のリーダーサーバも)完了後、ZABプロトコルがリカバリモードを終了します。クラスタノードが同期状態の後フォロワーとリーダーの半分以上を完了したとき、クラスタ全体がニュース放送モードに入りました。今回は、リーダーノードが正常に動作しているとき、クラスタに新しいサーバを起動し、それがサーバーのデータ復旧モードでは、データの同期やリーダーノードに直接移動します。同期が完了した後は、通常、外部のハンドル非トランザクション要求を提供することができます。なお:リーダーノードは、非トランザクション要求およびトランザクション要求を処理することができ、フォロワーノードのみが非トランザクション要求を処理することができ、フォロワーノードが非トランザクション要求を受信した場合、それはサーバのリーダーに要求を転送します
原則メッセージ放送
我々は分散トランザクション2PCや3PC契約を理解していれば、1リーダーがメッセージ要求を受信コミット処理、メッセージブロードキャストプロセスは、実際には2つの相の簡易版であるメッセージを、その後(、それは問題ではありません理解していない私たちは、後で話します)達成するためには、TCPプロトコルによって実装FIFOキューを(準備2.リーダーが各フォロワーのために注文し、この機能によって達成することができ、zxid原因と結果の両方のサイズを比較しzxid:グローバルに一意の64ビットインクリメントIDは、呼び出し割り当てこれはフォロワーフォロワーが提案を受ける3の全てに配布グローバルなニュースと秩序の特徴)提案(提案としてzxidとなります)で、最初の提案は、ディスクに書き込まれ、再びリーダーの成功ACK 4に書かれた返信後フォロワをコミットするコミットコマンドを送信するときに有効な数(ノードの半分以上)を受信ACKリーダーは、リーダーは、同時に従動5にローカルメッセージを実行する時期排除するために送信されるコマンドメッセージを受信し
ZXIDについて
このIDはどのように生成されるか、順番に簡単な説明がトランザクションの一貫性のための下で皆のために確保するためにどのような役割とidその後、この特定は、飼育係は、トランザクションIDの数を増やす使用して、つまり、トランザクションID、先にzxidを述べてきた(zxid )トランザクションを識別します。すべての提案(案)をzxid時に追加することが提案されています。Zxid実装が高い32ビット・エポックリーダー関係を変更するか否かを識別するために使用される(数によってリーダーエポック期間を区別するZABポリシー変更プロトコル)である64ビットの数であり、リーダーが選出されるたびに、それがなければなりません新たなエポック=(元のエポック+ 1)は、指導者の統治の現在の部分を識別する。低カウントのため32。
-------仕上げさ......