リーダー選出:投票で1人を選ぶ

複数ノードが選挙タイムアウトで立候補し、term を上げて投票を集め、過半数で 1 人のリーダーが決まる仕組み(Raft 風)を体感します。

5
1.5×
左2 / 右3

「リーダーを落とす」で再選出、「分断」でスプリットブレイン回避(少数派は選べない)を確かめましょう。

リーダー(Leader) 立候補(Candidate) 追従(Follower) 停止(Down)
現在の term
過半数の必要票
リーダー
状態
この term の投票集計
クラスタ(クリックでもノードを落とせます)
分散システムでは「誰が指示役か」を 1 人に決めないと、各ノードが勝手な決定をして矛盾します。そこで リーダー選出を行います。
各ノードは一定時間リーダーから連絡が無いと選挙タイムアウトで立候補し、番号 term を 1 つ上げて全員に投票を依頼します。1 つの term につき各ノードは1 票だけ投じ、過半数(N/2 + 1 票)を集めたノードがリーダーになります。
過半数を条件にすることで、同時に 2 人がリーダーになることはありません。ネットワークが分断されても、票が過半数に届かない側はリーダーを選べず、スプリットブレイン(二重リーダー)が起きません

いま何が起きている?

ここがポイント