Redis Sentinelが動いていたらslaveof no oneしない

March 20, 2013

色々とあれだったのでシンプルにキメうちにしました
thanks: @sawanoboly
update: 2013/03/22

環境

Redis version 2.6.7

Redis Sentinelは MonitoringNotificationAutomatic failover
の3つの機能があって、主に自動フェイルオーバ目的で利用する機会が多いと思うのですが
その際に、手動でslaveof no oneを打っちゃうことで予期しない状態になるので

slaveof no one打つならRedis Sentinelを止めてからにしましょう。


事前情報

こんな感じでredis-sentinel.confが設定されているとします

構成: Master:1 <=> Slave:1

sentinel monitor check_one 192.168.2.100 6379 2
sentinel down-after-milliseconds check_one 5000
sentinel failover-timeout check_one 50000
sentinel can-failover check_one yes
sentinel parallel-syncs check_one 1

daemonize yes
pidfile /var/run/redis-sentinel.pid
loglevel notice
logfile /var/log/redis-sentinel.log
port 26379

Redis Sentinelが動いているのに「slaveof no one」をかます

こわいですねー、Redis Sentinelさんが
レプリケーションの状況理解できなくなってしまいますね。
やるならRedis Sentinelは落としてやるべきですね。

Redis Sentinelが動いているのに「slaveof host port」をかます

こわいですねー、Redis Sentinelさんは
そんなの無視して正しい状況に持って行こうとしますから
やるならRedis Sentinelは落としてやるべきですね。
永続的に設定を変更するなら、Redis Sentinelさんを落として
設定を期待している内容にして起動し直すのが良いですね。

## 対策?
などなど、Redis Sentinelさんが動いている状態での
手動レプリケーション設定変更を行うと、色々と予期しないことが起こるので
- Redis Sentinelが動いてる時に*slaveofなんとか*は発行しない
- レプリケーションの設定を変えるならデータのバックアップをとっておく
- レプリケーションの状態を変えるならRedis Sentinelは落としてから行う
- レプリケーションの状態を変えるならRedis Sentinel側の設定を変えて落としてから行う
など対策というか、ハウツーがあるかと思うのですが
こういうオペミスっぽいのを未然に防ぐにはどうしたらいいですかねー
って話をしてました。
みなさんどうやってRedis使ってるんでしょう