У меня проблемы с Redis.
У меня 3 сервера. Каждый сервер имеет 10 Redise, работающих на разных портах. Также на каждом сервере есть один экземпляр Sentinel.
Также есть 5 серверов приложений. На каждом сервере есть HaProxy, который проверяет из пула, какой из серверов Redis является главным, и перенаправляет на него трафик.
Таким образом, приложение всегда использует 127.0.0.1:port, независимо от того, какой сервер является мастером Redis.
У меня проблемы с ложными срабатываниями. Это мой журнал:
[37338] 29 Apr 07:51:36.813 # Connection with slave ip1:6388 lost.
[37338] 29 Apr 07:51:37.399 # Connection with slave ip3:6388 lost.
[7244] 29 Apr 07:51:38.809 * DB saved on disk
[7244] 29 Apr 07:51:38.814 * RDB: 35 MB of memory used by copy-on-write
[37338] 29 Apr 07:51:38.918 * Background saving terminated with success
[37338] 29 Apr 07:51:47.451 * SLAVE OF 192.168.234.ip1:6388 enabled (user request)
[37338] 29 Apr 07:51:47.457 # CONFIG REWRITE executed with success.
[37338] 29 Apr 07:51:47.541 * Connecting to MASTER ip1:6388
[37338] 29 Apr 07:51:47.541 * MASTER <-> SLAVE sync started
[37338] 29 Apr 07:51:47.541 * Non blocking connect for SYNC fired the event.
[37338] 29 Apr 07:51:47.541 * Master replied to PING, replication can continue...
[37338] 29 Apr 07:51:47.541 * Partial resynchronization not possible (no cached master)
[37338] 29 Apr 07:51:47.542 * Full resync from master: 0be90102031e58ef358f0ea48e58eeae869902d1:157705847
[37338] 29 Apr 07:51:51.730 * MASTER <-> SLAVE sync: receiving 85082188 bytes from master
[37338] 29 Apr 07:51:52.588 * MASTER <-> SLAVE sync: Flushing old data
[37338] 29 Apr 07:51:53.011 * MASTER <-> SLAVE sync: Loading DB in memory
[37338] 29 Apr 07:51:54.401 * MASTER <-> SLAVE sync: Finished with success
[37338] 29 Apr 07:52:39.072 * 10000 changes in 60 seconds. Saving...
[37338] 29 Apr 07:52:39.083 * Background saving started by pid 27656
Но ничего не произошло, что могло бы вызвать это.
У меня уже была проблема, когда таймаут Sentinel был низким (100 мс), поэтому я изменил его на 5 с. До сегодняшнего дня не было тайм-аутов.
Также 5 серверов являются резервными. Когда я выключаю половину из них, приложение начинает тормозить. Я не вижу проблем с процессором, памятью или диском.
Вчера у меня была проблема с тем, что сервер приложений терял трафик, когда половина из них была отключена. Сервер начинал бездействовать в течение нескольких секунд, а затем снова работал нормально. Nginx (передний сервер) использует proxypass для балансировки трафика на сервер приложений. Сомневался в диапазоне портов (netstat насчитал более 90к подключений). Кроме того, было более 30 тысяч подключений от 127.0.0.1:someport до 127.0.0.1:redisport за время ожидания. Приложение -> Haproxy Redis.
net.ipv4.ip_local_port_range = 10000 65535
Также я включил:
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
После этого больше не было потерь трафика, но приложение по-прежнему работает слишком медленно, и для этого нет очевидных причин (cpu, mem, hdd ... все в порядке).
Что я могу еще проверить?