リーダー選出:投票で1人を選ぶ
複数ノードが選挙タイムアウトで立候補し、term を上げて投票を集め、過半数で 1 人のリーダーが決まる仕組み(Raft 風)を体感します。
5
1.5×
左2 / 右3
「リーダーを落とす」で再選出、「分断」でスプリットブレイン回避(少数派は選べない)を確かめましょう。
リーダー(Leader)
立候補(Candidate)
追従(Follower)
停止(Down)
現在の term
—
過半数の必要票
—
リーダー
—
状態
—
この term の投票集計
クラスタ(クリックでもノードを落とせます)
分散システムでは「誰が指示役か」を 1 人に決めないと、各ノードが勝手な決定をして矛盾します。そこで リーダー選出を行います。
各ノードは一定時間リーダーから連絡が無いと選挙タイムアウトで立候補し、番号
過半数を条件にすることで、同時に 2 人がリーダーになることはありません。ネットワークが分断されても、票が過半数に届かない側はリーダーを選べず、スプリットブレイン(二重リーダー)が起きません。
各ノードは一定時間リーダーから連絡が無いと選挙タイムアウトで立候補し、番号
term を 1 つ上げて全員に投票を依頼します。1 つの term につき各ノードは1 票だけ投じ、過半数(N/2 + 1 票)を集めたノードがリーダーになります。過半数を条件にすることで、同時に 2 人がリーダーになることはありません。ネットワークが分断されても、票が過半数に届かない側はリーダーを選べず、スプリットブレイン(二重リーダー)が起きません。
いま何が起きている?
ここがポイント
- 過半数ルール ── リーダーには
⌊N/2⌋ + 1票が必要。だから同じ term に勝者は最大 1 人。 - term で世代を区別 ── 立候補のたびに term を +1。新しい term の連絡を受けた古いリーダーは自分が時代遅れと気づき退く。
- 再選出は自動 ── リーダーが落ちると連絡が途切れ、誰かがタイムアウトして新しい term で立候補する。
- 分断時の安全性 ── 少数派(過半数に届かない側)は何度立候補してもリーダーを選べず、二重リーダーを防ぐ。