前の記事:アルゴリズムのリーダー選挙筏
完成リーダー選挙プロセスいかだアルゴリズムの前に、この記事では、上の記事に基づいてログのレプリケーションを説明します。
ログのレプリケーションアルゴリズムの筏
ログが含まれているの基本的な内容を見てください:
- COPYコマンドは、ステートマシンで実行することができます
- 番号の在職期間:ログ号に作成されたオフィスの今期のリーダー
- インデックス:ことを識別する整数位置ログ
ステータスログを2つに分割されている:コミットされていない、(セキュリティのためのログは、削除または上書きされることはありません)に提出されました。
通常、1
- 場合
Leader
リクエストを受信する(要求がコピーコマンドを実行する状態マシンに含まれていてもよい)、クライアントによって送信された新たなコンテンツがログ(現在の用語の数に加算されるように、リーダーは、要求を配置しますLeader
における用語の数、インデックス特許現在のLeader
ローカルに保存されたログのログのセット最高インデックス番号+1)。Leader
ログに指定されたインデックス番号を構成することができ、現在の用語で(すなわち2つ以上の可能はで同じインデックス用語を有するログエントリを作成します)
- それまでのログ
AppendEntries RPC
(以下、ネットワーク内の他のサーバーにメッセージを送信するにはFollower
)、ログをコピーします。 - ネットワークでは
Follower
、メッセージログ正常にコピーされ、応答を受信した後、返されます。 - で
Leader
ネットワークの大半を受けるFollower
正常にコピー応答の後、およびLeader
、ログを考える提出することができます。この時点で、Leader
あなたは、同時に3つのことを行います。
- ログの
Leader
ステート・マシンのローカルコピー - すべての
Follower
すべての受信された通知メッセージの送信はログFollower
ログをコミットして、ステートマシンのそれぞれのローカルコピーに適用します - クライアントからの実行結果の通知
ネットワーク内で最も成功したときのログメッセージFollower
実行後のローカルコピーのステート・マシン、ログがあると考えることができる提出されています。前ログが提出された時には場合、Leader
いくつかの以前のログが提出されていない、それが一緒に提出されます。
ネットワークは、いくつかはFollower
遅い応答またはクラッシュのネットワーク状態の理由に起因し得る、それはLeader
無期限に送信しようと繰り返されるAppendEntries RPC
にメッセージをFollower
。それが成功するまで。
1.1ログの整合性チェック
上記では、我々は言ったFollower
受信時にAppendEntries RPC
メッセージが応答の成功を複製するために返されます。ログの最初のメッセージを受信した後、実際に一貫性チェックは、(通常、ログは、一貫性の整合性チェックが失敗しないままになります)、次のように整合性チェック:Leader
Follower
- で
Leader
作成AppendEntries RPC
メッセージ、メッセージは、現在のログログエントリの前に番号とインデックス番号の用語が含まれています。 Follower
受信ではAppendEntries RPC
、メッセージを、任期前にログが数とインデックス番号が一致するかどうかをチェックします- 説明に一致している場合
Leader
、以前のログが一致しています。 - 一致が拒否されていない場合は
AppendEntries RPC
、メッセージを。
- 説明に一致している場合
整合性チェックは、誘導プロセスです。通常、ネットワーク内の最初のログは、ログの整合性チェックを満たしている必要があり、第2のログは限り最初のログターム数とインデックス番号、含む最初のログ一貫した、第二のログには、整合性チェックを満たしていますので、各ログには、整合性チェックの後に会う予定です。Leader
Follower
ログマッチング属性に到着するには:
- 二つの異なるエンティティが同じログインデックス番号と任期を持っている場合、それらは同じストレージ・コマンドを持っています。
- 二つの異なるエンティティが期間を記録し、同じインデックス番号を持っている場合は、ログ内のすべての以前のエントリは同じです。(整合性チェック結果から導出されます)
2つの特別な事情
ネットワークが正常な状態にされていることができませんでした。そのためLeader
か、Follower
常に一貫することはできませんログで、その結果、クラッシュする可能性。そのため、次の3つの場合:
Follower
現在の不足Leader
のログが存在にエントリー。Follower
現在あるLeader
ログエントリが存在しません。(このような古いようにLeader
単にAppendEntries RPC
一部にメッセージを送信しFollower
、新たな選出、その後、クラッシュアウトにLeader
正確に受信しませんでしたサーバーAppendEntries RPC
のサーバーメッセージ)- または
Follower
、現在不足しているLeader
ログエントリが存在する上、現在そこにあるLeader
ログエントリが存在しません。
図最上ログインデックス番号は、ログブロックの数項を表わし、数値(1-12)は、各正方形は、ログメッセージを表しています。図電流Leader
(現在のログを表す図最上行Leader
8の数の用語の時間ログ)を。この図は、上記の3例存在理由を示しています。
Follower
A、B(Follower
崩壊を受信しないLeader
送信AppendEntries RPC
メッセージ)を第一のケースは、上記を満たします。- (
Follower
C 6時間期間において、Follower
D時間の用語である。7)されているLeader
が、完全に完了ログ送信は崩壊するではない。上述した第3ケースを満たします。 Follower
E用語4の時には、Follower
F 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の期間中
Leader
(S5タイマー残業中の鉛、第3刻みタームので高いサーバーよりもS3、S4、選出することができるLeader
)が、ログを送信するための時間が出てクラッシュする必要はありませんでした。 - ケースCのサーバー:S1は 4再選の時の期間中に
Leader
(S1の再起動は、この用語は、まだ2は、新たな受信Leader
S5、3の項により送信された更新されたハートビートメッセージをしばらくにおけるLeader
S5クラッシュ後、サーバー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
保存します。
- 期間のために提出されたTの任期で選出されなければならないログに存在していないUの
Leader
(ため複製されたステート・マシンLeader
のログエントリを上書きしたり削除しないが)。 - 期間Tがされて
Leader
ローカルクラスタログのメンバーの過半数にコピー。そして、の用語UのLeader
短期から受信されたほとんどのクラスタのメンバーの選挙の段階での投票に受信するので、クラスタの少なくとも一種がある(以下は、有権者と呼ぶ)されたTのLeader
ログが送信され、もの長期のためされているUのLeader
彼が投票しました。だから、有権者は矛盾したことを証明するための鍵です。 - 有権者はの任期のためでなければなりませんUの
Leader
前投票のための任務TさんはLeader
、ログの送信済みコミット。そうでなければ、有権者は用語拒絶するようにTの(なぜなら受信するための用語一度要求をUとのよりも高くなる投票要求有権者期間T)。Leader
AppendEntries PRC
Leader
- 期間のための有権者ときUの
Leader
投票は、ストアはログエントリを持つことになります。用語であると仮定TとUとの間の各Leader
ログエントリを(含む両方のLeader
ログエントリを削除することがない、しかしFollower
唯一でLeader
削除エントリの競合)。 - 期間のための有権者Uの
Leader
程度の用語投票、UのLeader
ログと有権者は、少なくとも新しいログとしてでなければなりません。これは、生成する2つの紛争における矛盾につながります。 - まず、有権者の用語とIF Uの
Leader
同じ日付のログ用語。その後の長期UのLeader
少なくとも長いログのようにログと有権者。だから、の期間のためにUのLeader
ログすべてのログ有権者が含まれています。任期を含ま有権者の仮定の前に提出されたので、これは、矛盾であるTのログ、および期間UがされているLeader
含まれておりません。 - それ以外の場合は、の任期Uの
Leader
ログ番号の事務所の最後の項は、オフィスの最後の項有権者のログの数よりも大きくなければなりません。また、それ以上であるT少なくともの有権者の数がログ用語ので、大きなT(用語の含まれているTの提出のすべてのエントリを)。用語の作成UのLeader
古いの最後のログエントリLeader
(仮説)そのログに提出されたエントリが含まれている必要があります。その後、期間のログ属性を照合することによってUのLeader
それはまた、エントリが含まれている必要があり、ログに矛盾している、提出されました。 - より、すべての用語大きいので、これは、矛盾した証明したTさんは、
Leader
のために、すべての用語を含まなければならないTのログが提出されています。 - ログのマッチングは未来が確実にするための属性
Leader
も提出され、間接ログエントリが含まれます。
次の記事:会員ラフトアルゴリズムの変化との関係