Назад | Перейти на главную страницу

Отладка HAProxy

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