Skip to content

followerノードの再起動を正しく認識する #11

@sile

Description

@sile

リーダノードは、各followerノード毎に状態(e.g., ログの長さ)を保持しているが、今はfollowerノードの再起動を上手く認識できないことがあるので改善する。

案: ノードにインスタンスIDを付与して、それが変わっている場合には、リーダが保持するそのノードの状態を初期化する

問題の再現方法①:

  • 三ノードでクラスタを組んで、適当にpropose
  • その内の一つを落としてデータを削除
  • 落としたノードを再起動
    • => この状態では、リーダが再選出されたり同期されたりしないことがある?
    • => おそらく、既存のリーダがダウンノードの状態をダウンする前の情報をもとに判断してしまっているのが原因

問題の再現方法②:

  • クラスタ内の一つのノードを停止
  • ストレージを削除
  • 再起動
    • => この時点で同期が走らないのは想定通り
  • 新しいログがコミットされた
  • => 再起動ノードはbusy-loop状態に

考察:

  • ストレージが消えていないなら、状態を初期化する必要はない(逆に、初期化したら何か問題が発生するかもしれない)
  • ストレージのUUIDをインスタンスのIDとして使うのが良いかもしれない?
    • ただ、本当にちゃんとやるなら、クラスタ構成の変更を走らせるのが正しい(データが消えているなら、それは別ノードとして扱わないと整合性が崩れる可能性がある)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions