ログのレプリケーションアルゴリズムの筏

前の記事:アルゴリズムのリーダー選挙筏
  完成リーダー選挙プロセスいかだアルゴリズムの前に、この記事では、上の記事に基づいてログのレプリケーションを説明します。

ログのレプリケーションアルゴリズムの筏

  ログが含まれているの基本的な内容を見てください:

  1. COPYコマンドは、ステートマシンで実行することができます
  2. 番号の在職期間:ログ号に作成されたオフィスの今期のリーダー
  3. インデックス:ことを識別する整数位置ログ

ステータスログを2つに分割されている:コミットされていない、(セキュリティのためのログは、削除または上書きされることはありません)に提出されました。

通常、1

  • 場合Leaderリクエストを受信する(要求がコピーコマンドを実行する状態マシンに含まれていてもよい)、クライアントによって送信された新たなコンテンツがログ(現在の用語の数に加算されるように、リーダーは、要求を配置しますLeaderにおける用語の数、インデックス特許現在のLeaderローカルに保存されたログのログのセット最高インデックス番号+1)。
    • Leaderログに指定されたインデックス番号を構成することができ、現在の用語で(すなわち2つ以上の可能はで同じインデックス用語を有するログエントリを作成します)
  • それまでのログAppendEntries RPC(以下、ネットワーク内の他のサーバーにメッセージを送信するにはFollower)、ログをコピーします。
  • ネットワークではFollower、メッセージログ正常にコピーされ、応答を受信した後、返されます。
  • Leaderネットワークの大半を受けるFollower正常にコピー応答の後、およびLeader、ログを考える提出することができますこの時点で、Leaderあなたは、同時に3つのことを行います。
  1. ログのLeaderステート・マシンのローカルコピー
  2. すべてのFollowerすべての受信された通知メッセージの送信はログFollowerログをコミットして、ステートマシンのそれぞれのローカルコピーに適用します
  3. クライアントからの実行結果の通知

  ネットワーク内で最も成功したときのログメッセージFollower実行後のローカルコピーのステート・マシン、ログがあると考えることができる提出されています前ログが提出された時には場合、Leaderいくつかの以前のログが提出されていない、それが一緒に提出されます。
  ネットワークは、いくつかはFollower遅い応答またはクラッシュのネットワーク状態の理由に起因し得る、それはLeader無期限に送信しようと繰り返されるAppendEntries RPCにメッセージをFollowerそれが成功するまで。

1.1ログの整合性チェック

  上記では、我々は言ったFollower受信時にAppendEntries RPCメッセージが応答の成功を複製するために返されます。ログの最初のメッセージを受信した後、実際に一貫性チェックは、(通常、ログは、一貫性の整合性チェックが失敗しないままになります)、次のように整合性チェック:LeaderFollower

  • Leader作成AppendEntries RPCメッセージ、メッセージは、現在のログログエントリの前に番号とインデックス番号の用語が含まれています。
  • Follower受信ではAppendEntries RPC、メッセージを、任期前にログが数とインデックス番号が一致するかどうかをチェックします
    • 説明に一致している場合Leader、以前のログが一致しています。
    • 一致が拒否されていない場合はAppendEntries RPC、メッセージを。

  整合性チェックは、誘導プロセスです。通常、ネットワーク内の最初のログは、ログの整合性チェックを満たしている必要があり、第2のログは限り最初のログターム数とインデックス番号、含む最初のログ一貫した、第二のログには、整合性チェックを満たしていますので、各ログには、整合性チェックの後に会う予定です。LeaderFollower

  ログマッチング属性に到着するには:

  • 二つの異なるエンティティが同じログインデックス番号と任期を持っている場合、それらは同じストレージ・コマンドを持っています。
  • 二つの異なるエンティティが期間を記録し、同じインデックス番号を持っている場合は、ログ内のすべての以前のエントリは同じです。(整合性チェック結果から導出されます)

2つの特別な事情

  ネットワークが正常な状態にされていることができませんでした。そのためLeaderか、Follower常に一貫することはできませんログで、その結果、クラッシュする可能性。そのため、次の3つの場合:

  1. Follower現在の不足Leaderのログが存在にエントリー。
  2. Follower現在あるLeaderログエントリが存在しません。(このような古いようにLeader単にAppendEntries RPC一部にメッセージを送信しFollower、新たな選出、その後、クラッシュアウトにLeader正確に受信しませんでしたサーバーAppendEntries RPCのサーバーメッセージ)
  3. またはFollower、現在不足しているLeaderログエントリが存在する上、現在そこにあるLeaderログエントリが存在しません。

マップ

  図最上ログインデックス番号は、ログブロックの数項を表わし、数値(1-12)は、各正方形は、ログメッセージを表しています。図電流Leader(現在のログを表す図最上行Leader8の数の用語の時間ログ)を。この図は、上記の3例存在理由を示しています。

  • Follower A、BFollower崩壊を受信しないLeader送信AppendEntries RPCメッセージ)を第一のケースは、上記を満たします。
  • FollowerC 6時間期間において、FollowerD時間の用語である。7)されているLeaderが、完全に完了ログ送信は崩壊するではない。上述した第3ケースを満たします。
  • FollowerE用語4の時には、FollowerF 3の時間期間内のLeader他の選出されたサーバはながら,,ではなく、完全に崩壊するログの送信を完了Leader新しい時刻を受信しないLeader送信AppendEntries RPC、メッセージ三分の一を満たしますケース。

2.1ログの一貫性のないソリューション

  Leader強制Follower彼のログログを繰り返して矛盾に対処します。この手段Follower競合ログログがされるLeaderログエントリをカバーしました。したがって、Leaderあなたは見つける必要がありますFollower削除、その後、ログの競合の初めに発生の場所をFollowerすべてLeaderログの競合を。その後にそのログを送信Follower競合を解決するために。
Leaderそれはあなた自身のローカルログエントリを削除したり上書きしません

  それがログに来る前に、これらの手順は、一貫性チェックから始まります。

  • 競合ログは、ときFollowerによって拒否されるLeader送信AppendEntries RPCメッセージを、と知らせるために、応答メッセージを返すLeaderログの競合を。
  • Leaderそれぞれについて、Follower維持nextIndex値を。この値はに送信するかを決定するために使用されるFollower次のログの位置インデックス。(現在のサーバーで値が選出されたLeader最後のインデックス番号1のローカルログにリセット後)
  • ときLeader、後に我々はそのログの競合を学んだ、デクリメントされnextIndexた値を。そして、再送信しAppendEntries RPCたものにFollowerそしてまで、このプロセスを繰り返してFollowerメッセージを受信します。
  • いったんFollower受け入れられたAppendEntries RPCニュースを、Leaderその後に応じたnextIndex位置の値は、それによって強制的に、決定された競合することができFollower、競合を解決するために彼らのログログリピートを。

マップ

  • ここで、A:示すように、サーバS1は、 2対数項の時間だけで<index:2,term:2>、サーバーに送信されたS2が出てクラッシュしますが。
  • ケースB:サーバーS5選出アワー3の期間中LeaderS5タイマー残業中の鉛、第3刻みタームので高いサーバーよりもS3、S4、選出することができるLeader)が、ログを送信するための時間が出てクラッシュする必要はありませんでした。
  • ケースCのサーバー:S1は 4再選の時の期間中にLeaderS1の再起動は、この用語は、まだ2は、新たな受信LeaderS5、3の項により送信された更新されたハートビートメッセージをしばらくにおけるLeaderS5クラッシュ後、サーバーS1最初のためにタイマーは、したがって、4更新の用語をポーリング、期限切れになった他の場所でネットワーク・サーバ・在職中よりも大きく、選出されたLeaderログは、一方で、)<index:2,term:2>サーバーに送信されS2、S3が、通知サーバのログが出てクラッシュします提出されていません。
  • ここで、D:(A-> D用語サーバ2の場合)S1としてLeaderクラッシュアウト、S5が 3選出された用語の時間でLeaderログがあるため、<index:2,term:2>ほとんどのサーバに複製されていない、と提出されていないので、S5自分のログを<index:2,term:3>上書きログ<index:2,term:2>
  • ここで、E:ここで、(A-> E)と用語サーバときに2である場合S1としてLeader、と<index:2,term:2>に送らS2、S3は、メンバーの過半数が正常サーバにコピー。そして、成功したジャーナルに提出し、その後も、S1が出てクラッシュし、S5が成功裏に選出することができないLeaderので、S5は、最新のネットワークログエントリが提出されている必要はありません(ここでは上の記事を示し選挙のリーダーいかだアルゴリズムを選挙でLeader要件その時点プレゼンテーション要件はありません)。

2.2選挙Leaderログの要件

  • 防ぐためにラフト利用投票手続きCandidate選挙に勝つ、彼らは、ログエントリをログに記録しない限り、すべてが提出含まれています。
  • Candidateほとんどが提出され、各エントリには、少なくとも一つのサーバに存在しなければならないことがその手段、クラスターが選出されなければなら連絡することができます。場合はCandidate、最新のログサーバのログ(の正確な定義のような少なくともログ最新)、それが提出されたすべてのエントリを保存します。
  • ログ内のインデックスとの比較の任期最後のエントリを通じていかだ最新にある2つのログのかを決定します。ログログエントリは異なる最後の項、より最新ではとの新しい用語を持っている場合。ログが同じ用語で終わる場合、インデックス大きなログが優先するものと置きます。

  最適化ソリューション
  では、Follower拒否AppendEntries RPCのメッセージが返されるに拒絶に含まれるログインデックス項の第一項と競合するログを選択することができ、メッセージをLeaderそれはので、Leaderすぐに競合の位置を特定することができます。この情報により、LeaderあなたはデクリメントすることができますnextIndexバイパスへのすべての競合のエントリの任務を。それぞれが持っている競合ログエントリがここで用語必要とAppendEntries RPCのメッセージではなく、必要性よりも、各ログエントリのAppendEntries RPCメッセージを。

3ログのレプリケーションのセキュリティ

任意の瞬間がここに各属性が設定されていることを確認いかだ

  • Leader唯一の追加特性:Leader決して上書きまたはそのログエントリを削除するには、新しいもののみを追加しました。
  • ログマッチ:同じインデックスと用語を持つログを構成する2つのエンティティが、その後、インデックス指定した日付まで、ログ内のすべてのエントリが同じである場合。
  • Leader整合性:ログが与えられた期間内に提出するように要求されている場合、エントリはログのすべてが高い用語のリーダーに表示されます。
  • ステートマシンの安全性:そのステートマシンに指定されたインデックスのエンティティのサーバアプリケーションログ場合は、他のサーバーが同じインデックスに別のログを使用することはできません。

3.1 Leader整合性の証明

  仮定すると、Leader整合性が成立しない場合、矛盾したことが判明しました。
  想定の期間TがされLeader、現在のログエントリの用語を提出しますが、ログは短期よりも高くないTのための長期Uの新しい将来のLeader保存します。

  1. 期間のために提出されたTの任期で選出されなければならないログに存在していないULeader(ため複製されたステート・マシンLeaderのログエントリを上書きしたり削除しないが)。
  2. 期間TがされてLeaderローカルクラスタログのメンバーの過半数にコピー。そして、の用語ULeader短期から受信されたほとんどのクラスタのメンバーの選挙の段階での投票に受信するので、クラスタの少なくとも一種がある(以下は、有権者と呼ぶ)されたTLeaderログが送信され、もの長期のためされているULeader彼が投票しました。だから、有権者は矛盾したことを証明するための鍵です。
  3. 有権者はの任期のためでなければなりませんULeader前投票のための任務TさんはLeader、ログの送信済みコミット。そうでなければ、有権者は用語拒絶するようにT(なぜなら受信するための用語一度要求をUとよりも高くなる投票要求有権者期間T)。LeaderAppendEntries PRCLeader
  4. 期間のための有権者ときULeader投票は、ストアはログエントリを持つことになります。用語であると仮定TUとの間の各Leaderログエントリを(含む両方のLeaderログエントリを削除することがない、しかしFollower唯一でLeader削除エントリの競合)。
  5. 期間のための有権者ULeader程度の用語投票、ULeaderログと有権者は、少なくとも新しいログとしてでなければなりません。これは、生成する2つの紛争における矛盾につながります。
  6. まず、有権者の用語とIF ULeader同じ日付のログ用語。その後の長期ULeader少なくとも長いログのようにログと有権者。だから、の期間のためにULeaderログすべてのログ有権者が含まれています。任期を含ま有権者の仮定の前に提出されたので、これは、矛盾であるTのログ、および期間UがされているLeader含まれておりません。
  7. それ以外の場合は、の任期ULeaderログ番号の事務所の最後の項は、オフィスの最後の項有権者のログの数よりも大きくなければなりません。また、それ以上であるT少なくともの有権者の数がログ用語ので、大きなT(用語の含まれているTの提出のすべてのエントリを)。用語の作成ULeader古いの最後のログエントリLeader(仮説)そのログに提出されたエントリが含まれている必要があります。その後、期間のログ属性を照合することによってULeaderそれはまた、エントリが含まれている必要があり、ログに矛盾している、提出されました。
  8. より、すべての用語大きいので、これは、矛盾した証明したTさんは、Leaderのために、すべての用語を含まなければならないTのログが提出されています。
  9. ログのマッチングは未来が確実にするための属性Leaderも提出され、間接ログエントリが含まれます。

次の記事:会員ラフトアルゴリズムの変化との関係

おすすめ

転載: www.cnblogs.com/cbkj-xd/p/12152222.html