2014年5月26日月曜日

redis-sentinel をやってみた

redisでmaster - slave構成を事前に構築しておいてください
構築方法はこちらをご参照ください
サーバのスペックやバージョンは同一環境で実施しております
また、redis-severですでにreplicationが動作していることを前提としております

■設定ファイル準備
・master & slave側作業
cp redis-2.8.9/src/redis-sentinel /usr/local/bin
cp redis-2.8.9/sentinel.conf /etc/
vim /etc/sentinel.conf
sentinel monitor mymaster 10.100.45.30 6379 2
logfile /var/log/sentinel.log
※IPの部分にはmaster側のIPを記載してください
※logfileは追記してください
※とりあえずあとの設定はデフォルトで問題ありません

■redis-sentinel起動
設定ファイルを引数として起動します
起動するのはmasterとslave両方で起動します

nohup redis-sentinel /etc/sentinel.conf &

tailf /var/log/sentinel.log
masterとslaveでそれぞれ起動したsentinel同士が接続したことをログで確認します
[30363] 23 May 14:41:59.831 # +monitor master mymaster 10.100.45.30 6379 quorum 2
[30363] 23 May 14:41:59.831 * +slave slave 10.100.42.181:6379 10.100.42.181 6379 @ mymaster 10.100.45.30 6379
[30363] 23 May 14:42:01.851 * +sentinel sentinel 10.100.42.181:26379 10.100.42.181 26379 @ mymaster 10.100.45.30 6379

■fail over検証
masterをkillしてみます
# pgrep redis-server
30115
# kill 30115

30秒後にmasterが落ちたというログがmaster側のsentinelに出力されます
slave側のログに「[30298] 23 May 14:45:35.169 # +switch-master mymaster 10.100.45.30 6379 10.100.42.181 6379」
と出ていればfail over完了です

slave側の情報を確認してみます

redis-cli
> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
slaveがmasterに昇格していると思います
また、元master側はまだダウン状態でslaveとしても参加していないので「connected_slaves:0」となっていることがわかります

■slave側復旧
sentinelを起動している場合、元masterで今度slaveになるサーバはredis-serverのプロセスを起動するだけで勝手にslaveとして登録してくれます

・slave(元master)側作業
nohup redis-server /etc/redis.conf &
redis-cli
> info replication
# Replication
role:slave
master_host:10.100.42.181
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:31972
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

以上でsentinelを使った自動fail overの設定は完了です
fail overはこれでOKなので、あとはダウンしたサーバの処理を忘れないようにしましょう

ポイントはsentinelのプロセスを複数起動させる点かなと思います

■参考サイト

■Tips
redis-cli -p 26379
でsentinelのポートに接続すると「sentinel」という管理コマンドが使えるようになります
sentinel masters とするとsentinelの詳しい設定状況を確認することもできます

0 件のコメント:

コメントを投稿