【ラフトアルゴリズム】

Raftアルゴリズム とは?

最終更新:
💡 変更の順序をそろえる、リーダーと過半数の合意

複数ノードで、実行する変更の順序に合意するためのアルゴリズム。リーダー選出とログ複製を分けて設計され、etcdなどで使われます。過半数の意味と、全ノードが常に同じ状態とは限らない理由を解説します。

📌 このページのポイント
Raft:ログの保存を過半数で確認クライアントの変更要求リーダーAログを保存現在の任期で作られた変更フォロワーB保存済みフォロワーCこの時点は未保存AがBの保存を確認 → 2 / 3で過半数この変更を確定できる全ノードが同時に適用するとは限らない矢印は要求と複製。保存の応答等は省略
3ノード構成の一時点の例です。現在の任期の変更を扱い、古い任期のログを単に台数だけで確定することとは区別します。下段は判断の説明で別の通信先ではありません。
ひよこ ひよこ
Raftは多数決で正しい答えを決めるの?
ペンギン先生 ペンギン先生
情報の真偽ではなく、「どの変更をどの順序で実行するか」に合意するんだ。各ノードが同じ確定済みのログを順に適用して、食い違う変更を確定しないようにする。全ノードの処理が同時に終わる、という意味ではないよ。
ひよこ ひよこ
書き込みはどう進む?
ペンギン先生 ペンギン先生
リーダーが変更をログに記録し、フォロワーへ複製する。現在のリーダーの任期で作られたログなら、リーダーを含む過半数が保存したことを確認して確定できる。3台構成なら2台、5台なら3台だね。単に通信が届いたこととは違うよ。
ひよこ ひよこ
リーダーが止まると?
ペンギン先生 ペンギン先生
連絡が一定時間来ないフォロワーが候補者となって選挙を始める。ノードは任期ごとに原則1票を投じ、候補者のログが十分新しいかも確認する。過半数の票を得た候補者がリーダーになる。票が割れたら次の選挙が必要になることもあるよ。
ひよこ ひよこ
過半数の電源が入っていれば続けられる?
ペンギン先生 ペンギン先生
互いに通信でき、ログの保存なども進むことが必要だよ。ネットワークが分断されて過半数を確保できない側では、新しい書き込みを確定できない。リーダーの切り替え中に一時的に処理が待つこともあるんだ。
ひよこ ひよこ
実際にはどこで使われる?
ペンギン先生 ペンギン先生
たとえばキーバリューストアのetcdが使っている。Raftの原論文は、リーダー選出やログ複製を分けて理解しやすくする設計を説明しているよ。Paxosを名前だけ変えたものではなく、合意という課題に取り組む別のアルゴリズムなんだ。
もっと詳しく知りたい人へ

古い任期のログも、過半数にあれば確定できる?

Raftでは、過去の任期のログを単に複製台数だけで直接確定することはしません。現在の任期のログを確定することで、その前にあるログも確定します。原論文の5.4.2節は、この制約が必要になる例を説明しています。

悪意あるノードにも対応できる?

原論文のモデルは、停止や復旧などの障害を扱い、ノードが任意の嘘をつくビザンチン障害を前提にしていません。合意したログを同じ状態に適用するには、状態遷移の決定性も必要です。通信・保存・実装の条件を無視して、Raftという名前だけで安全性を保証することはできません。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Raft」って出てきたら「複数ノードが変更の順序に合意する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Raft Consensus Algorithm」 = Raft合意アルゴリズム
💬 原論文の題名は「In Search of an Understandable Consensus Algorithm」。理解しやすい合意アルゴリズムを目指した設計であることを示しています。

参考資料

← 用語集にもどる