bigton
@bigton
Web-программист

Как оптимально настроить сервер для безотказной работы Redis?

Добры день.

ОС 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. Я поэтапно увеличивал эти значения в два раза и проблема с подключением на пару дней пропадала, но потом появлялась вновь.

Подскажите, как решить мою проблему?

Спасибо!
  • Вопрос задан
  • 753 просмотра
Пригласить эксперта
Ответы на вопрос 1
@neol
У вас со стороны клиента висит тьма тьмущая соединений.

Для начала я бы добавил
iptables -I INPUT -p icmp -j ACCEPT

Вероятно это уже решит вашу проблему.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы