Добры день.
ОС Debian 8.6
Есть выделенный
сервер 1 на котором крутится MySQL и Redis.
Есть выделенный
сервер 2 на котором крутится PHP и который в каждом скрипте подключается к MySQL и Redis, с помощью MySQLi и PHPRedis соответственно.
Время от времени PHP-скриптам не удается подключиться к Redis-серверу.
$Redis = new Redis();
if ( ! $Redis->connect('x.x.x.x'))
trigger_error('Cache connect error', E_USER_WARNING);
Одно время я думал, что проблема связана с расширением PHPRedis и писал разработчику, но оказалось никто кроме меня с подобными проблемами не сталкивался. Потому я решил смотреть в сторону конфигурации сервера.
Я должен сообщить, что правила iptables сервера 1 написаны по принципу "запрещено всё, что не разрешено". То есть, я закрываю все порты и отрываю только 3306 + 6379 для IP сервера 2.
Вот изменения, которые я внёс в базовую конфигурацию ОС
echo "net.netfilter.nf_conntrack_max = 1048576" >> /etc/sysctl.conf
echo "net.netfilter.nf_conntrack_tcp_timeout_established = 3600" >> /etc/sysctl.conf
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 65535" >> /etc/sysctl.conf
//добавить в /etc/rc.local до exit 0 строку
echo 262144 > /sys/module/nf_conntrack/parameters/hashsize
Изменения в redis.conf
tcp-backlog 32768
По умолчанию
net.core.somaxconn было 2к, а
tcp-backlog 511. Я поэтапно увеличивал эти значения в два раза и проблема с подключением на пару дней пропадала, но потом появлялась вновь.
Подскажите, как решить мою проблему?
Спасибо!