Я тестировал / тестировал кластер серверов локально довольно долго без проблем. Я недавно настроил свой серверный кластер для живого теста, я заметил проблемы и считаю, что HAProxy в моем кластере может столкнуться с некоторыми проблемами.
Сначала я расскажу немного о структуре кластера, возможно, есть проблема с тем, как я их настроил, может быть, мне понадобится несколько прокси.
У меня есть два кластера серверов, которые балансирует HAProxy. Мы назовем их SC1 и SC2. Главный кластер - это SC1, все, что находится на порту 80 для HAProxy, будет отправлено на SC1. SC1 обработает запрос и отправит другой запрос SC2 через прокси-сервер на порт 8080. Я не думаю, что это будет проблемой, но я замечаю в своих журналах на моем сервере часто говорят, что SC1 не может подключиться к SC2, я считаю, что это потому что мой HAProxy перегружен.
Причина, по которой я думаю, что HAProxy перегружен, заключается в том, что, когда я смотрю на свою страницу статистики, для ответа часто требуется> 1 секунда. По этой причине я решил взглянуть на логи HAProxy. Я заметил аномалию в журналах, которая, как мне кажется, может быть связана с моими проблемами. Каждую минуту или около того (иногда больше, иногда меньше) я получаю следующее сообщение:
Oct 8 15:58:52 haproxy rsyslogd-2177: imuxsock begins to drop messages from pid 3922 due to rate-limiting
Oct 8 15:58:52 haproxy kernel: [66958.500434] net_ratelimit: 2997 callbacks suppressed
Oct 8 15:58:52 haproxy kernel: [66958.500436] nf_conntrack: table full, dropping packet
Мне было интересно, каковы были последствия этого. Будет ли это просто вызывать отбрасывание пакетов или это может также вызывать задержки? Как я могу исправить эту проблему? Я работаю на сервере Ubuntu 12.04LTS.
Вот мои модификации sysctl:
fs.file-max = 1000000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
Вот мой файл конфигурации:
global
log /dev/log local0 info
log /dev/log local0 notice
maxconn 50000
user u1
group g1
#debug
defaults
log global
mode http
option httplog
option dontlognull
option forwardfor
retries 3
option redispatch
option http-server-close
maxconn 50000
contimeout 10000
clitimeout 50000
srvtimeout 50000
balance roundrobin
listen sc1 255.255.255.1:80
maxconn 20000
server sc1-1 10.101.13.68:80 maxconn 10000
server sc1-2 10.101.13.66:80 maxconn 10000
listen sc1-1_Update 255.255.255.1:8181
maxconn 20000
server sc1-1 10.101.13.66:80 maxconn 20000
listen sc1-2_Update 255.255.255.1:8282
maxconn 20000
server sc1-2 10.101.13.68:80 maxconn 20000
listen sc2 255.255.255.1:8080
maxconn 30000
server sc2-1 10.101.13.74:80 maxconn 10000
server sc2-2 10.101.13.78:80 maxconn 10000
server sc2-3 10.101.13.82:80 maxconn 10000
listen sc2-1_Update 255.255.255.1:8383
maxconn 30000
server sc2-2 10.101.13.78:80 maxconn 15000
server sc2-3 10.101.13.82:80 maxconn 15000
listen sc2-2_Update 255.255.255.1:8484
maxconn 30000
server sc2-1 10.101.13.74:80 maxconn 15000
server sc2-3 10.101.13.82:80 maxconn 15000
listen sc2-3_Update 255.255.255.1:8585
maxconn 30000
server sc2-1 10.101.13.74:80 maxconn 15000
server sc2-2 10.101.13.78:80 maxconn 15000
listen stats :8888
mode http
stats enable
stats hide-version
stats uri /
stats auth user:pass
Sc1 и sc2 - основные кластеры. Все остальные, которые я использую, когда мне нужно обновить свои серверы (перенаправить порт 80 на 8181 на haproxy, например, для обновления сервера sc1-1).
Любая помощь в этом вопросе будет принята с благодарностью.
Спасибо
Похоже, ваша таблица отслеживания подключений заполняется. Удаление правил iptables, использующих отслеживание соединений, решило бы проблему.
Если это не вариант и у вас есть оперативная память, вы можете увеличить размер таблицы:
cat /proc/sys/net/netfilter/nf_conntrack_max
echo 131072 > /proc/sys/net/netfilter/nf_conntrack_max
Вероятно, вам также следует увеличить размер хеша:
cat /sys/module/nf_conntrack/parameters/hashsize
echo 32768 > /sys/module/nf_conntrack/parameters/hashsize
Эти цифры просто вдвое превышают настройки по умолчанию на моем рабочем столе, я не уверен, что именно вам понадобится. Вы также захотите добавить это в sysctl.conf.
Я бы очень осторожно использовал net.ipv4.tcp_tw_recycle
это может вызвать серьезные проблемы с NAT.