合意アルゴリズム
分散システムでの一貫性を保証する仕組み
合意アルゴリズムは、複数のノードが障害やネットワーク分断があっても同じ値に合意するための仕組み。分散システムの一貫性を保証する基盤技術。
リーダー選出
1. 通常時: リーダーがリクエストを処理
👑
Leader
→ replicate→ replicate
Follower
Follower
2. リーダー障害発生
💥
Leader Down
✕ no heartbeat✕ no heartbeat
Follower?
Follower?
3. 新リーダー選出(投票)
⬜
Old Leader
← vote← vote
New Leader 👑
Follower
Raft アルゴリズム
Raftは理解しやすさを重視した合意アルゴリズム。 etcd、Consul、CockroachDBなどで採用。
ノードの3つの状態
Follower
受動的に複製
timeout
→
Candidate
投票を要求
過半数獲得
→
Leader
ログを複製
ログ複製の流れ
1クライアントがLeaderに書き込みリクエスト
2Leaderがログエントリを追加
3Followerにログを複製(AppendEntries RPC)
4過半数が応答したらコミット
5クライアントに成功を返す
Quorum(定足数)
Quorum = 過半数のノードの合意。 N個のノードで (N/2)+1 以上の合意が必要。
3ノード
Quorum = 2
1障害まで許容
5ノード
Quorum = 3
2障害まで許容
7ノード
Quorum = 4
3障害まで許容
なぜ奇数?偶数だとスプリットブレインのリスク。3ノードと4ノードの耐障害性は同じ(1障害)。
主な実装
etcd
Kubernetes のバックエンドストア。Raftベース。 キーバリューストア、Watch機能。
ZooKeeper
Apache製。ZAB(Paxos派生)ベース。 Kafka、Hadoop等で使用。
Consul
HashiCorp製。Raftベース。 サービスディスカバリ、KVストア。
CockroachDB
分散SQL DB。Raftベース。 強い一貫性を持つNewSQL。
SRE/インフラ観点
クラスタ構成
- • 本番は最低3ノード(推奨5ノード)
- • 異なるAZ/ラックに配置
- • 偶数ノードは避ける
監視項目
- • リーダー選出の頻度(頻繁は問題のサイン)
- • コミットレイテンシ
- • Followerの遅延
- • ディスク使用量(WALログ)
注意点
- • ネットワーク遅延が性能に直結
- • ディスクI/Oが重要(SSD推奨)
- • スプリットブレインの防止設定を確認