何か必要な情報があれば追記します。
正解でなくてもいいので何かアドバイスをいただけると幸いです。
#環境
Redis 3.2.5
CentOS 6.8(Red Hat64bit)
○6台構成
server001 192.168.56.111 Master
server002 192.168.56.112 Slave
server003 192.168.56.113 Slave
server004 192.168.56.114 Sentinel
server005 192.168.56.115 Sentinel
server006 192.168.56.116 Sentinel
#やりたいこと
Redis Sentinelを使用してフェイルオーバーを自動で行いたいのですが、
自動でフェイルオーバーがされません。
server001をMasterにしてMasterが落ちた場合に、
監視サーバのSentinel3台がそれを検知して、SlaveをMasterに自動で昇格する仕組みを作りたいです。
英語で対処方法が理解できないのですが、
以下のURLの質問と似たような現象が起きています。
http://serverfault.com/questions/655260/redis-sentinel-cluster-failover-results-in-failover-abort-not-elected-master
#設定
各サーバのredis.conf/redis-sentinel.confは下記になります。
#####server1(redis.conf)
$ vim /etc/redis/6379.conf #redis.confを改名 bind 192.168.56.111 127.0.0.1 port 6379 daemonize yes slave-serve-stale-data yes slave-read-only yes slave-priority 100
#####server002-3(redis.conf)
$ vim /etc/redis/6379.conf bind 192.168.56.112 127.0.0.1 #server003の場合は192.168.56.113 port 6379 daemonize yes slave-serve-stale-data yes slave-read-only yes slave-priority 100 slaveof 192.168.56.111 6379
#####server004-6(sentinel.conf)
$ vim /etc/redis/26379.conf daemonize yes port 26379 sentinel monitor mymaster 192.168.56.111 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 90000 sentinel parallel-syncs mymaster 1
#試したこと
1.server001-3のredis起動
$ service redis start
2.server004-6のredis-sentinel起動
$ service redis-sentinel start
※redis-sentinelの自動スクリプト化は以下を参考にしました
http://qiita.com/KurosawaTsuyoshi/items/e6a4def57c9a12f1d752
3.各サーバの情報確認
○info replication情報
・server001
192.168.56.111:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=192.168.56.112,port=6379,state=online,offset=366275,lag=0 slave1:ip=192.168.56.113,port=6379,state=online,offset=366275,lag=0 master_repl_offset:366418 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:366417
.server002
192.168.56.112:6379> info replication # Replication role:slave master_host:192.168.56.111 master_port:6379 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_repl_offset:390596 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
・server003
192.168.56.113:6379> info replication # Replication role:slave master_host:192.168.56.111 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:399389 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
・server004-6
127.0.0.1:26379> sentinel masters 1) 1) "name" 2) "mymaster" 3) "ip" 4) "192.168.56.111" ・・・
自分で見る限り問題なさそうでした。
4.Master(server001)を落とす
$ service redis stop
5.sentinelサーバのログを見る
$ tail -f /var/log/redis/sentinel_26379.log 1693:X 19 Dec 16:02:27.795 # +sdown master mymaster 192.168.56.111 6379
上記の一文が出るが特に何も起きない
6.MasterかSlaveか確認(server002-3にて)
$ redis-cli -p 6379 info | grep role role:slave
両方SlaveのままMasterに昇格していない
→自動で昇格されていない
7.手動で昇格させてみる(server4-6のいずれか)
redis 127.0.0.1:26379> SENTINEL failover mymaster OK
8.server002-3のどちらかがSlaveに昇格している
$ redis-cli -p 6379 info | grep role
role:Master
といった流れを行いました。
手動でMasterに昇格させることができるので、各サーバ間で接続はうまくいっていると思います。
自動フェイルオーバーが行われない設定にしているのでは、と思いながらどこなのかわからず詰まっている次第です。
#その後試したこと
Masterが落ちたと検知したことがSentinel間で行われていないのではと思い、
redis-sentinel.confの設定を下記のように修正しました
#sentinel monitor mymaster 192.168.56.111 6379 2 変更前 sentinel monitor mymaster 192.168.56.111 6379 1
上記はMasterが落ちたと検知したらフェールオーバーをする、という設定を2台から1台に変更しました。
それからMasterを落としてみたのですが、
下記のようなログが出てフェールオーバーの処理が行われません(ログファイルは下記のsentinel.confで設定したもの)
2075:X 19 Dec 23:32:55.543 # +new-epoch 206 2075:X 19 Dec 23:32:56.146 # +new-epoch 207 2075:X 19 Dec 23:32:56.146 # +try-failover master mymaster 192.168.56.111 6379 2075:X 19 Dec 23:32:56.150 # +vote-for-leader 2285be61d950719ca45eeffc7d218f98887703ef 207 2075:X 19 Dec 23:33:06.261 # -failover-abort-not-elected master mymaster 192.168.56.111 6379 2075:X 19 Dec 23:33:06.320 # Next failover delay: I will not start a failover before Mon Dec 19 23:35:56 2016
自動でフェールオーバーするために足りない設定などありますでしょうか。
お手数ですがご教授の程、よろしくお願いいたします。
#参考URLにした
http://qiita.com/KurosawaTsuyoshi/items/e6a4def57c9a12f1d752
http://qiita.com/KurosawaTsuyoshi/items/e6a4def57c9a12f1d752
https://redis.io/topics/sentinel
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。