コピペコードで快適生活

明日使えるソースを自分のために

consulのリーダー選出の仕組み

よくわかっていなかったのでメモ。

consulのリーダー選出には、Raft プロトコル(分散合意アルゴリズム)が使用されている。

  • 各ノードは次の3つのステートを持つ。
    • leader
    • follower
    • candidate
  • 遷移
    1. 起動直後はみんな follower
    2. followerはランダムなTimeout(150ms~300ms)値を持ち、過ぎると candidate に変わる。
      • 非サーバモードの場合は candidate にならない
    3. candidate になると自分のtermをインクリメントする # よくわからない
    4. candidate は各ノード(follower)にRequestVoteRPC(投票リクエスト)をブロードキャストする
    5. follower RequestVoteRPCを受け取ったら自分のTimeoutをリセットして、投票レスポンスをする
      • follower は最初にRequestVoteRPCを投げた candidate に投票する
    6. 過半数以上の得票を受け取った時点で candidateleader になる
    7. leader は定期的にAppendEntriesRPC(ハートビート)を各 follower にブロードキャストする
    8. follower はハートビートを受け取ると自分のTimeoutをリセットする
  • 参照