3 ノードの redis クラスターで自動フェイルオーバー システムをセットアップしようとしています。これらのノードのそれぞれに redis-sentinel をインストールしました (この人のように: http://www.symantec.com/connect/blogs/configuring-redis-high-availability )。2 つまたは 3 つのノードがあれば、すべて問題ありません。問題は、ノードが 1 つしか残っておらず、それがスレーブである場合、自動的にマスターとして選出されないことです。クォーラムは 1 に設定されているため、最後のノードはマスターの odown を検出しますが、過半数がないためフェイルオーバーに投票できません。
この (驚くべき) 問題を克服するために、他のノードにマスターを要求する小さなスクリプトを作成しました。応答がない場合は、現在のノードをマスターとして設定します。このスクリプトは、通知スクリプトとして redis-sentinel.conf ファイル内で呼び出されます。しかし... redis-sentinel サービスが開始されるとすぐに、この設定は「消去」されます! /etc の構成ファイルを見ると、「sentinel notification-script」行が消えています (redis-sentinel はその構成ファイルを書き換えます)。しかし、私が書いた構成は利用できなくなりました。
1) 1) "name"
2) "mymaster"
3) "ip"
4) "x.x.x.x"
5) "port"
6) "6379"
7) "runid"
8) "somerunid"
9) "flags"
10) "master"
11) "pending-commands"
12) "0"
13) "last-ping-sent"
14) "0"
15) "last-ok-ping-reply"
16) "395"
17) "last-ping-reply"
18) "395"
19) "down-after-milliseconds"
20) "30000"
21) "info-refresh"
22) "674"
23) "role-reported"
24) "master"
25) "role-reported-time"
26) "171302"
27) "config-epoch"
28) "0"
29) "num-slaves"
30) "1"
31) "num-other-sentinels"
32) "1"
33) "quorum"
34) "1"
35) "failover-timeout"
36) "180000"
37) "parallel-syncs"
38) "1"
これは、sentinel-masters コマンドの結果です。唯一のことは、以前に「ダウンアフターミリ秒」を5000に、「フェイルオーバータイムアウト」を10000に設定したことです...
誰かが似たようなものに会ったかどうかわかりませんか?まあ、誰かが何が起こっているのかについて少し考えているなら、私はそれについてうれしいです;)