質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

5417閲覧

Redis Sentinelの自動フェールオーバーしたい

soich

総合スコア176

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2016/12/19 08:37

編集2016/12/27 10:10

何か必要な情報があれば追記します。
正解でなくてもいいので何かアドバイスをいただけると幸いです。

#環境
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

いろいろ試したのですが、今の所下記の2つで自動フェールオーバーはされるようになりました。

1.protected-modeを設定する
Redis3.2.0以上はprotected-modeが有効でデフォルト設定されているようです。

$ vim /etc/redis/26379.conf(sentinel.conf) protected-mode no

この設定があるとsentinelで自動フェールオーバーされないとのこと。
http://kenken0807.hatenablog.com/entry/2016/06/10/103656

2.bindの設定

$ vim /etc/redis/26379.conf(sentinel.conf) bind 0.0.0.0

bindでどのIPからの接続も許可したところ自動フェールオーバーされるようになりました。

上記2つの方法だとセキュリティ上の課題がありそうです。
①パスワードを設定する
②bindを使用するRedisサーバのみの設定にする
③ポート番号を特定のものしか開かない
などで対策していこうと思います。(②がうまくいっていなくて悩み中)

一応参考までに、もしもっといい解決方法があればコメントお願いします。

投稿2016/12/25 15:08

soich

総合スコア176

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問