Redis, Redis Sentinel の導入


インストール

Redisの最新版をyumでインスコした - Qiita
Redis を入れると Redis Sentinel というHA構成ツールもついてくる。

Redis の設定

/etc/redis.confを編集する。
デフォルトでbind 127.0.0.1というオプションが入っており、ローカルホストからしか繋がらないので注意。指定なしの場合はどこからでも繋がる。自IPを指定する形で、サブネット指定とかは多分できず、ちょっとめんどくさい……。

外から繋ぐ場合はこの設定と、ポート開放とかが必要。

Redis スレーブの設定

もう一台用意してスレーブ設定する。
192.168.10.11 master
192.168.10.12 slave
とする。

slave側の/etc/redis.confslaveof 192.168.10.11 6379と指定すればOK。
それぞれの環境でredis-cli info replicationで設定確認できる。

Redis Sentinel の設定

Redis Sentinel というHA構成ツールが付いてきており、masterが落ちたらslaveをmasterに昇格させるよう設定する事ができる。
Redisと同居できるので、masterとslaveそれぞれに1つ起動させる形にする。

それぞれの/etc/redis-sentinel.confsentinel monitorセクションを変更
sentinel monitor mymaster 192.168.10.11 6379 1
最後の数字(quorum)を1にしているのは、2ついるsentinelの片方が死んでもfailoverできるようにするため。1なら1台がmaster落ちた!判定したら切り替わる。

master落ちた!判定はsentinel down-after-milliseconds mymaster 30000といった形で指定でき、デフォルトで30秒。quorumも含めて、別拠点に置くとか本気で高可用性を担保するなら色々考えて弄る必要がある……。

can-failoverセクションについて触れている記事も多かったがなくなったっぽい。

指定するのはmasterだけで良い。
自分のslaveはどれか、自分を監視している他のsentinelはいるかなど、必要な情報はmasterが持っており、masterと通信するだけで全部把握していい感じに動いてくれる!!!
これマジで便利だし、特化してるかわりに超手軽に使える! Sentinelはいいぞ!

フェイルオーバー時は旧slaveが新masterに昇格し、旧slaveのRedis・各Sentinelの設定ファイルが更新され完全に新しい構成で動くようになる。
旧masterを復帰させると、新masterのslaveとして動くようになる。設定ファイルも起動後に書き換わる。sentinelが設定ファイルにホスト情報を保存しており、それを元に設定しているようだった。

Sentinelはとにかく設定ファイルを書き換えまくるので、検証する時はあらかじめ設定ファイルのバックアップを取っておいたほうが良いと思われます。