-
Notifications
You must be signed in to change notification settings - Fork 6
Open
Description
リーダノードは、各followerノード毎に状態(e.g., ログの長さ)を保持しているが、今はfollowerノードの再起動を上手く認識できないことがあるので改善する。
案: ノードにインスタンスIDを付与して、それが変わっている場合には、リーダが保持するそのノードの状態を初期化する
問題の再現方法①:
- 三ノードでクラスタを組んで、適当にpropose
- その内の一つを落としてデータを削除
- 落としたノードを再起動
- => この状態では、リーダが再選出されたり同期されたりしないことがある?
- => おそらく、既存のリーダがダウンノードの状態をダウンする前の情報をもとに判断してしまっているのが原因
問題の再現方法②:
- クラスタ内の一つのノードを停止
- ストレージを削除
- 再起動
- => この時点で同期が走らないのは想定通り
- 新しいログがコミットされた
- => 再起動ノードはbusy-loop状態に
考察:
- ストレージが消えていないなら、状態を初期化する必要はない(逆に、初期化したら何か問題が発生するかもしれない)
- ストレージのUUIDをインスタンスのIDとして使うのが良いかもしれない?
- ただ、本当にちゃんとやるなら、クラスタ構成の変更を走らせるのが正しい(データが消えているなら、それは別ノードとして扱わないと整合性が崩れる可能性がある)
Metadata
Metadata
Assignees
Labels
No labels