Redis
CentOS
CentOS6.x
Redis-Sentinel

はじめに

他のRedis構築に関するページは以下をご参考ください。
Redis構築のまとめ

▽参考にさせていただきました
http://qiita.com/toshiro3/items/931ededeece6b8b1c680

Redis Sentinelとは

SentinelがRedisのレプリケーションの状態を監視し、
マスタのダウンを検知すると任意のスレーブがマスタへ昇格してくれる監視プロセス

環境

CentOS 6.8
Redis 3.2.5

構成

IPアドレス ポート番号 役割
192.168.56.111 6379 Master
192.168.56.112 6379 Slave
192.168.56.113 26379 Sentinel
192.168.56.113 26379 Sentinel
192.168.56.113 26379 Sentinel

各種設定

Master/Slaveサーバのredis.conf設定

$ vim /etc/redis/6379.conf
daemonize yes

デーモンとして使わないのならこの設定はしない

Sentinelサーバのredis.conf設定

$ vim /etc/redis/6379.conf
slaveof 192.168.56.111 6379

台数を増やす場合は追記サーバに上記と同様の設定を追加

Masterのレプリケーション確認

192.168.56.111:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.56.112,port=6379,state=online,offset=15,lag=0
master_repl_offset:15
repl_backlog_active:1
repl_backlog_size:1048576

192.168.56.112がレプリケーション設定されていることがわかる

Sentinelサーバのsentinel.conf設定
(詳細設定はsentinel.confの設定内容参照)

$ cp  -p /usr/local/redis-3.2.5/sentinel.conf /etc/redis/26379.conf
$ vim /etc/redis/26379.conf
---
protected-mode no //もしくはbindに「0.0.0.0」を設定
port 26379 //プロセス毎にポート番号を+1する
daemonize yes
pidfile redis_sentinel.pid
dir /var/run/redis
sentinel monitor mymaster 192.168.56.111 6379 2
logfile "/var/log/redis/sentinel_26379.log"
loglevel notice
---

上記「sentinel monitor mymaster 192.168.56.111 6379 2」の「2」はsentinelでMasterが落ちたと検知したらフェールオーバするための件数(Sentinelが2台検知したらフェールオーバする)

protected-modeが無効になっていないと自動フェールオーバができない
参考)http://kenken0807.hatenablog.com/entry/2016/06/10/103656

sentinelのスクリプト化

service redis startみたいにredis-sentinelも開始できるようにする(redisをスクリプト化してなかったらRedisインストール〜起動までを参照)

$ cp -p /etc/init.d/redis /etc/init.d/redis-sentinel // 複数プロセス設定時はredis-sentinel-80,81と設定
$ vim /etc/init.d/redis-sentinel
#chkconfig:345 75 15
REDISPORT=26379 //プロセス毎にポート番号を+1する
EXEC=/usr/local/bin/redis-sentinel
PIDFILE=/var/run/redis/sentinel_${REDISPORT}.pid

$ service redis-sentinel start
Starting Redis server...

$ sudo chkconfig redis-sentinel on //自動起動する場合は設定

これでredis-sentinelをserviceコマンドが使用できるようになる

※同サーバでsentinelを複数自動起動する場合は、chkconfigの優先度をそれぞれ変更すること

例:「chkconfig: 345 75 15」「chkconfig: 345 76 16」みたいに