web-dev-qa-db-ja.com

マスターがダウンしても、RedisSentinelはアクションを実行しません

3つのノードにまたがってRedis/Sentinelセットアップをセットアップしようとしています。各ノードは、1つのredisインスタンスとセンチネルインスタンスを実行しています。ただし、マスターマシンがダウンすると、残りの歩哨は何もせずにそこに座ってから、各スレーブをそれ自体のスレーブに設定することを決定します。これはもちろん、可能な最悪の行動に近いものです。

セットアップの詳細は次のとおりです。

ノードは10.66.5.310.66.5.410.66.5.5です。

デフォルトでは、.3ノードは(インストール時の)マスターであり、他のすべてのノードは/etc/redis/redis.confファイルに適切なエントリslaveof 10.66.5.3 6379を持っています。残りのredis.confは変更されていません。

センチネルの開始構成は次のとおりです。

daemonize no
sentinel monitor myapp 10.66.5.3 6379 2
sentinel down-after-milliseconds myapp 5000
sentinel failover-timeout myapp 15000
sentinel parallel-syncs myapp 1

注:upstartにサービスを処理させるため、デーモン化フラグがオフになっています。構成ファイルはそれぞれのデーモンによって書き込み可能であるため、センチネルはその構成ファイルを更新できます(実際に更新できます)。問題はありません。

すべてのノードが稼働している限り、セットアップは正常に機能します。マスターに何かを登録すると、スレーブなどに伝播されます。

さて、その時点でRedisマスターをシャットダウン(shutdown -h now)し、クォーラムが発生するまでしばらく待つことを選択した場合、結果として生じる状況は次のとおりです。

  • ノード.4は彼のIPアドレスのスレーブになるように設定されています(10.66.5.4
  • ノード.5127.0.1.1のスレーブに設定されています

歩哨は物を選ぶために何度も行ったり来たりしていますが、そのうちの1つが壊れた後、どうやらお互いに適切に通信できません。彼らはまた、自分自身をダウンや他のばかげたものとして検出し続けます。

1744:X 12 May 17:02:32.453 # -odown master myapp 127.0.1.1 6379
1744:X 12 May 17:02:33.517 # +odown master myapp 127.0.1.1 6379 #quorum 2/2
1744:X 12 May 17:02:38.139 # +sdown slave 10.66.5.5:6379 10.66.5.5 6379 @ myapp 127.0.1.1 6379
1744:X 12 May 17:02:38.358 # +sdown slave 10.66.5.4:6379 10.66.5.4 6379 @ myapp 127.0.1.1 6379
1744:X 12 May 17:02:42.970 # -sdown slave 10.66.5.5:6379 10.66.5.5 6379 @ myapp 127.0.1.1 6379
1744:X 12 May 17:02:43.203 # -sdown slave 10.66.5.4:6379 10.66.5.4 6379 @ myapp 127.0.1.1 6379
1744:X 12 May 17:02:43.230 * -dup-sentinel master myapp 127.0.1.1 6379 #duplicate of 127.0.0.1:26379 or 3369dfeed7f6e970c4620b3689741b47ba5d9972
1744:X 12 May 17:02:43.230 * +sentinel sentinel 127.0.0.1:26379 127.0.0.1 26379 @ myapp 127.0.1.1 6379
1744:X 12 May 17:02:43.280 # -odown master myapp 127.0.1.1 6379
1744:X 12 May 17:02:43.313 * -dup-sentinel master myapp 127.0.1.1 6379 #duplicate of 10.66.5.4:26379 or 3369dfeed7f6e970c4620b3689741b47ba5d9972
1744:X 12 May 17:02:43.313 * +sentinel sentinel 10.66.5.4:26379 10.66.5.4 26379 @ myapp 127.0.1.1 6379
1744:X 12 May 17:02:44.123 # +new-Epoch 24
1744:X 12 May 17:02:44.125 # +vote-for-leader 3369dfeed7f6e970c4620b3689741b47ba5d9972 24
1744:X 12 May 17:02:44.409 # +odown master myapp 127.0.1.1 6379 #quorum 2/2

実行中:

  • Ubuntu 14.04
  • Redis 3.0.0

私はそこで何が起こっているのかよくわかりません、そして私は考えが足りません。

私はテストするPCの近くにいませんが、センチネルリンパ節が2つしか残っていないため、結びつきを断ち切る方法はありません。

Redisを強制終了する(そしてセンチネルを実行し続ける)と機能しますか?もしそうなら、それはあなたの問題です。

1
Jim G.

redisサーバーは、0.0.0.0ではなくマシンのIPをリッスンする必要があります。そうしないと、センチネルがマシンのIPの1つとして127.0.0.1を取り、それを伝播する可能性がありますが、これは明らかに間違っています。

0
Arie Skliarouk