3つのノードにまたがってRedis/Sentinelセットアップをセットアップしようとしています。各ノードは、1つのredisインスタンスとセンチネルインスタンスを実行しています。ただし、マスターマシンがダウンすると、残りの歩哨は何もせずにそこに座ってから、各スレーブをそれ自体のスレーブに設定することを決定します。これはもちろん、可能な最悪の行動に近いものです。
セットアップの詳細は次のとおりです。
ノードは10.66.5.3
、10.66.5.4
、10.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
).5
は127.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
実行中:
私はそこで何が起こっているのかよくわかりません、そして私は考えが足りません。
私はテストするPCの近くにいませんが、センチネルリンパ節が2つしか残っていないため、結びつきを断ち切る方法はありません。
Redisを強制終了する(そしてセンチネルを実行し続ける)と機能しますか?もしそうなら、それはあなたの問題です。
redisサーバーは、0.0.0.0ではなくマシンのIPをリッスンする必要があります。そうしないと、センチネルがマシンのIPの1つとして127.0.0.1を取り、それを伝播する可能性がありますが、これは明らかに間違っています。