構築方法はこちらをご参照ください
サーバのスペックやバージョンは同一環境で実施しております
また、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
※logfileは追記してください
※とりあえずあとの設定はデフォルトで問題ありません
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同士が接続したことをログで確認します
起動するのは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してみます
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
また、元master側はまだダウン状態でslaveとしても参加していないので「connected_slaves:0」となっていることがわかります
# 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:0slaveがmasterに昇格していると思います
また、元master側はまだダウン状態でslaveとしても参加していないので「connected_slaves:0」となっていることがわかります
■slave側復旧
sentinelを起動している場合、元masterで今度slaveになるサーバはredis-serverのプロセスを起動するだけで勝手にslaveとして登録してくれます
・slave(元master)側作業
・slave(元master)側作業
nohup redis-server /etc/redis.conf &
redis-cli
> info replication
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の詳しい設定状況を確認することもできます
でsentinelのポートに接続すると「sentinel」という管理コマンドが使えるようになります
sentinel masters とするとsentinelの詳しい設定状況を確認することもできます
0 件のコメント:
コメントを投稿