ログ複製:全ノードが同じ履歴に

Raft では、リーダーに追加したコマンドが各フォロワーへ複製され、過半数が持った時点で commit 確定(緑)。障害や旧リーダー復帰で生じた分岐ログも、新リーダーのログで上書きされ全員が同じ履歴に揃います。

5
40%
未 commit(過半数未満) commit 確定(過半数到達) 分岐ログ(孤児・上書き対象) リーダー
現在の term
リーダー
過半数 = ⌊N/2⌋+1
commitIndex
各ノードのログ(横=ログのインデックス、行=ノード)
分散データベースでは、複数ノードがまったく同じ操作履歴(ログ)を持つことで一貫性を保ちます。Raft では特定の1台がリーダーになり、クライアントのコマンドをまず自分のログに書き、各フォロワーAppendEntries で複製します。
あるエントリを過半数(⌊N/2⌋+1 台)が持った瞬間、それは commit 確定(緑)となり、もう失われません。
リーダーが落ちて新しいリーダーが選ばれると、古いリーダーだけが持っていた未 commit のエントリ(分岐ログ・赤)は孤児になり、新リーダーのログで上書きされて全員が同じ履歴に戻ります。

いま何が起きている?

ここがポイント