分散型 Kv-2 ラフトリーダー選出の実装

分散型 Kv-2 ラフトリーダー選出の実装

[[441163]]

この記事から、raft をベースに分散 KV を構築していきます。

Raft は、分散システム内の各ノードのデータの一貫性を主に保証する分散一貫性アルゴリズムです。ラフト アルゴリズムは、それが解決する分散一貫性問題が本質的に難しい問題であるため、比較的複雑です。ラフト アルゴリズムの実装は、次の 3 つの部分に分けられます。

  • リーダー選挙
  • ログのレプリケーション
  • 安全

ラフト アルゴリズムに詳しくない場合は、次の Web サイトでアニメーションを視聴できます。

http://thesecretlivesofdata.com/raft

ラフト アルゴリズムが直面する問題と、ラフト アルゴリズムが問題を解決する基本的なプロセスを鮮明に示します。

もちろん、ラフトアルゴリズムに関する論文も参照する価値があります。

https://github.com/maemual/raft-zh_cn

また、インターネット上でラフト アルゴリズムに関する優れた一連の記事も見つけました。

https://www.codedump.info/post/20180921-raft

https://blog.betacat.io/post/raft-implementation-in-etcd

これらの資料を読んだ後、ラフト アルゴリズムの概要を理解し、それを具体的に実装する方法がわかるようになります。

この記事では、TinyKV のプロジェクト 2aa に対応する最初のリーダー選出問題のみを紹介します。

ラフト クラスターでは、ノードはフォロワー、候補、リーダーの 3 つの状態に分かれています。ノードの初期状態はフォロワーです。

フォロワー ノードは、自身のステータスを維持するために、リーダーのハートビート情報を定期的に取得する必要があります。 Follower ノードにはタイムアウト (ElectionTimeout) があります。この期間中にリーダーからハートビート メッセージを受信しない場合、クラスター内にリーダーが存在しないものと見なし、選出を開始します。

選挙の具体的な手順:

上図に示すように、ノード A の選挙タイムアウトが最初に到来するため、ノード A はステータスを候補に変更し、任期数を 1 増やします (図の初期任期数は 0 で、追加後は 1 になります)。その後、ノード A 自身に投票し、ノード B と C に投票要求メッセージを送信します。

ノード B と C は、自分の用語数が A より小さいことに気付くため、A に承認票を投じます。応答を受信した後、ノード A は投票数がノード数の半分を超えているかどうかを計算します。そうであれば、それがリーダーになります。

上記はリーダー選挙の最も理想的な状況を説明しています。厳密に言えば、候補ノードが選挙を開始した後、次のいずれかの状況が発生するまでステータスを維持する必要があります。

  • 選挙自体に勝利した
  • 他のノードが選挙に勝利した
  • 選挙のタイムアウトが到来し、どのノードもリーダーになれない

最初のケースは、上で説明した選挙プロセスです。自ら選挙を開始し、半数以上のノードの投票を獲得すると、リーダーになります。

2 番目のケースでは、選挙プロセス中に別のノードが候補になり選挙に勝利した場合、そのノードは新しいリーダーから AppendEntry RPC メッセージを受信し、新しいリーダーの任期数が自身の任期数より大きい場合、そのリーダーを有効と見なし、自身をフォロワーに変更します。

3 番目のケースは、選挙で負けることも勝つこともないノードに対応します。これは、クラスター ノードの数が偶数で、2 つのノードが同時に選出を開始した場合に発生する可能性があり、その場合、選出は無効になります。選挙のタイムアウトが再び到来し、まだ新しいリーダーがいない場合は、候補者が新たな選挙ラウンドを開始します。

具体的なコード実装については、まず、初期ロジックは外側のレイヤーによって呼び出される tick 関数にあります。ノードの選挙タイムアウトが到来したかどうかを判断する必要があります。もしそうなら、選挙を開始する必要があります。

  1. // tick は内部論理クロック1 ティック進めます。
  2. func (r *Raft) tick() {
  3. // ここにコードを記述します (2A)。
  4. スイッチr.State{
  5. ケースStateLeader:
  6. // ...
  7. StateFollower、StateCandidateの場合:
  8. r.electionElapsed++ 選挙経過日数
  9. r.electionElapsed >= r.electionTimeout の場合 {
  10. // 新しい選挙を開始する
  11. r.startElection()
  12. }
  13. }
  14. }

選挙を開始し、自分自身を候補者(任期番号 + 1)に変更し、自分自身に投票します。次に、他のノードに MsgRequestVote メッセージを送信する必要があります。

MsgRequestVote メッセージには、現在のノードの最後のログのインデックスと用語を含める必要があります。これにより、フォロワーはノードのログが最新であるかどうかを判断できます。

MsgRequestVote メッセージを受信すると、他の Follower ノードが処理を開始します。処理時に注意すべき点がいくつかあります。

  • メッセージの期間数が自身の期間より小さい場合は、メッセージを直接拒否します。
  • メッセージの期間が自分の期間よりも長い場合は、フォロワーに変更して(フォロワーでない場合)、期間を更新する必要があります。
  • メッセージの用語番号とインデックス番号をチェックする必要があります。メッセージのログが最新でない場合は、メッセージを拒否します。

すべてのチェックに合格すると、フォロワー ノードは賛成票を投じ、候補ノードに MsgRequestVoteResponse メッセージを送信します。

MsgRequestVoteResponse メッセージを受信した後、候補者ノードは投票結果を記録し、投票が次の条件を満たすかどうかを計算する必要があります。

  • 拒否票の数がノード数の 1/2 を超えると、選出は失敗し、候補ノードはフォロワー状態に変わります。
  • 賛成票数がノード数の半分を超えると、選挙は成功します。

選出が成功した場合、自身のステータスをリーダーに変更し、他のノードが引き続き選出を開始するのを防ぐために、空のデータ エントリを含む MsgAppend メッセージを他のノードに送信する必要があります。

追伸具体的なコード実装については、etcd の raft を参照し、それに基づいて TinyKV に手動でコードを実装してください。

<<:  「チャイナクラウド」は世界一?もっと深く掘り下げてください!

>>:  クラウドコスト管理だけではクラウド支出の問題を解決できない理由

推薦する

SEOを行うには、絶対的な優位性を維持するために競合他社を注意深く監視することを学ぶ必要があります。

ウェブサイトのランキングは相対的なプロセスです。最高のウェブサイトは存在せず、より良いウェブサイトが...

ビットコインとWe-mediaは2013年のインターネット業界の流行語トップ10にランクイン

今年も年末となり、様々な業界の見直しが始まりました。インターネット業界にとって、1年間の変化は驚くべ...

FasterVM 記念イベント / 100 人民元チャージごとに 30 人民元、米国および香港の VPS サービスが 25% 割引

FasterVMは記念プロモーションを開催しています。アジアに最適化された回線を備えたKVM VPS...

2019年中国情報フロー広告市場を特別分析!

モバイルインターネットトラフィック配当の消滅に伴い、モバイルマーケティング市場規模の成長率は引き続き...

SEO最適化トラフィックの核心をつかみ、超収益性の高いウェブサイトを作りましょう

SEO 最適化の知識は情報爆発状態にあり、さまざまな SEO 最適化トレーニングが次々と登場していま...

moonvm: 香港 VPS、HGC ライン、月額 45 ドル、KVM/2G メモリ/20g ハードディスク/15T トラフィック/1Gbps 帯域幅

moonvm は新しい VPS を開始しました。香港 HGC ラインの VPS で、静的 IPv4、...

企業がコンテナセキュリティについて知っておくべきこと

コンテナは、テスト環境などの新しい環境でソフトウェアを実行するための一般的なソリューションです。アプ...

質の高いフレンドリーなリンクを獲得するための巧みなコミュニケーション方法

フレンドリーリンクの交換は、ウェブマスターが毎日行うべきことです。誰もが、自分のウェブサイトの重みを...

よくある SEO の問題と解決策

SEO を行う際に、誰もがさまざまな問題に遭遇することは避けられません。これは実は良いことです。問題...

LunarPages 年末イベントで iPad 2 をプレゼント

lunarpages は、通称 LP ホストとして知られている、アメリカの老舗ホスト会社です。200...

分散型データセンターの利点

今日では、ほとんどのデータセンターが仮想サーバーと必要なすべての IT インフラストラクチャのレンタ...

reliablehostingservices-VPS 30% オフ/超大容量ハードディスク (最低 3 USD/512M メモリ/100G ハードディスク)

ReliableHostingServices は 2010 年に設立されました。主な事業はホスティ...

Docker トラブルシューティングの実践: 実際の問題を解決するためのヒント

Docker は、アプリケーションをコンテナ化し、開発ワークフローを合理化するための優れたツールです...

ウェブサイト画像のSEOに関する調査

現在のトレンドの 1 つは、検索エンジン向けに画像を最適化することです。通常の検索エンジンの結果で画...