背景
- redis clusterのfailoverには過半数のmasterの投票が必要らしい
- 実際に確認してみた
初期状態
- 3 master, 3 slave
- redis 4.0.9
slaveを1台破壊
こうすると
こうなる
slave1こわれるだけ。masterには影響なし
masterを1台破壊
こうすると
こうなる
replicationされてるslaveが昇格.1minくらいタイムラグあり
master2台を順次破壊する
こうすると
こうなる
replicationされてるslaveが昇格.1minくらいタイムラグあり
master2台を同時に破壊
こうすると
こうなる
failoverが発生しない理由
- slaveの昇格ルール
- 全masterの過半数の投票が必要
- 1台ずつ壊れたとき
- 1台目壊れたとき
- 投票権を持っているmasterは2台。(master2, master3)
- 全master3台中、過半数の投票によりfailoverが発生
- 2台目も同様
- 1台目壊れたとき
- 2台同時に壊れたとき
- 投票権を持っているmasterは1台。(master3)
- 投票数は過半数に達しないので、failover発生せず
- 公式: https://redis.io/topics/cluster-spec#availability
同じ系統のmaster-slaveを破壊
こうすると
こうなる
結論
以下の場合にアプリに影響あり。
- 同じ系統のmaster, slaveが死ぬ
- masterが2台以下の状態で、masterが死ぬ