実稼働サーバーでは、Windows で Redis (バージョン 2.8) を使用しています。次の「マスタースレーブ」構成があります。
- 別々のサーバーに 3 つのサービス (1 つのマスターと 2 つのスレーブ)
- 各サーバーに 3 つのセンチネル
大量の読み込みと大きなサイズのデータがなく、レプリケーションが必要に応じて機能するまで。しかし、私たちは毎日奇妙な行動をしています。Redis サービス ログには、次のように表示されます。
サーバーの IP:
---.--.--.1
---.--.--.2
---.--.--.3
[3576] 30 Nov 00:15:07.271 # Connection with slave ---.--.-.2:6379 lost.
[3576] 30 Nov 00:15:07.282 # Connection with slave ---.--.-.3:6379 lost.
[3576] 30 Nov 00:15:18.242 * SLAVE OF ---.--.-.3:6379 enabled (user request)
[3576] 30 Nov 00:15:18.245 # CONFIG REWRITE executed with success.
[3576] 30 Nov 00:15:18.801 * Connecting to MASTER ---.--.-.3:6379
[3576] 30 Nov 00:15:18.801 * MASTER <-> SLAVE sync started
[3576] 30 Nov 00:15:18.802 * Non blocking connect for SYNC fired the event.
[3576] 30 Nov 00:15:18.802 * Master replied to PING, replication can continue...
[3576] 30 Nov 00:15:18.803 * Partial resynchronization not possible (no cached master)
[3576] 30 Nov 00:15:18.805 * Full resync from master: 2010f343b5b051924fb4826f826979f9683a73a9:24474754143
[3576] 30 Nov 00:15:20.772 * MASTER <-> SLAVE sync: receiving 66333159 bytes from master
[3576] 30 Nov 00:15:21.648 * MASTER <-> SLAVE sync: Flushing old data
[3576] 30 Nov 00:15:22.085 * MASTER <-> SLAVE sync: Loading DB in memory
[3576] 30 Nov 00:15:23.005 * MASTER <-> SLAVE sync: Finished with success
他の2つのサーバーで同じログを記録しています。代わりに
[3576] 30 Nov 00:15:07.271 # Connection with slave ---.--.-.2:6379 lost.
記録された
[6176] 30 Nov 00:15:12.451 # Connection with master lost.**strong text**
次のセンチネル ログ:
[6988] 30 Nov 00:06:25.031 # -sdown slave ---.--.-.3:6379 ---.--.-.3 6379 @ master ---.--.-.1 6379
[6988] 30 Nov 00:06:25.031 # -sdown sentinel ---.--.-.3:10001 ---.--.-.3 10001 @ master ---.--.-.1 6379
これは、1 日の初めに 1 日に 1 回のみ発生しますが、特定の固定時間 (00:12:00 / 00:15:00 / 00:17:00 などに開始できます) では発生しません。redis-sentinel 構成に関しては、これ
port 10001
logfile "C:\\REDIS\\logs\\redis_sentinel.log"
sentinel monitor master ---.--.-.1 6379 2
sentinel down-after-milliseconds master 4000
sentinel failover-timeout master 30000
redis-servers 構成では、実際にはほとんどデフォルト構成を使用します (「maxheap」と「maxmemory」を変更しただけです)。
この場合、レプリケーション タイムアウト (デフォルトでは repl-timeout = 60 秒) とクライアント バッファー制限 ("client-output-buffer-limit") が不十分である可能性があることがわかりました。しかし、これは私たちのケースではありません。なぜなら、レプリケーションが非常に高速 (約 1 秒) で、データのサイズが小さくなるまでです。また、この問題の発生時にサーバー (ポート) への物理的な接続を確認しました -> 接続は常に良好です...
では、この通常の切断された接続について誰が考え、理由もなくフェイルオーバー プロセスを開始するのでしょうか??