Настройка Linux + HAProxy
В настоящее время я запускаю HAProxy на Centos 6, который будет отправлять запросы на некоторые серверы Apache HTTPD, и у меня возникают проблемы с производительностью. Я провел последние пару дней, гугляя и все еще не могу, по-видимому, постоянно проходить соединения со скоростью 10 кбит / с при тестировании (хотя иногда я получаю 30 кбит / с).
Я закрепил IRQ очередей TX/RX для внутренней и внешней NICS для разделения ядер ЦП и убедился, что HAProxy закреплен за собственным ядром.
Я также сделал следующие изменения в sysctl.conf:
# Max open file descriptors
fs.file-max = 331287
# TCP Tuning
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65023
net.ipv4.tcp_max_syn_backlog = 10240
net.ipv4.tcp_max_tw_buckets = 400000
net.ipv4.tcp_max_orphans = 60000
net.ipv4.tcp_synack_retries = 3
net.core.somaxconn = 40000
net.ipv4.tcp_rmem = 4096 8192 16384
net.ipv4.tcp_wmem = 4096 8192 16384
net.ipv4.tcp_mem = 65536 98304 131072
net.core.netdev_max_backlog = 40000
net.ipv4.tcp_tw_reuse = 1
Если я использую AB для прямого доступа к веб-серверу, я легко получаю 30k/s соединений. Если я остановлю веб-серверы и использую AB, чтобы нажать HAProxy, тогда я получу соединения со скоростью 30 кбит / с, но, очевидно, это бесполезно.
Я также отключил iptables на данный момент, так как я прочитал, что nf_conntrack может все замедлять, без изменений. Я также отключил службу irqbalance.
Тот факт, что я могу поразить каждое отдельное устройство со скоростью 30 к / с, заставляет меня поверить, что с настройками серверов все в порядке и что это должна быть какая-то конфигурация HAProxy?
Вот конфиг, который я построил из чтения статей по настройке и т. Д. http://pastebin.com/zsCyAtgU
Сервер представляет собой двойной процессор Xeon E5-2620 (6 ядер) с 32 ГБ оперативной памяти. Работает Centos 6.2 x64. Частный и общедоступный интерфейсы находятся на отдельных NICS.
У кого-нибудь есть идеи? Благодарю.
1 ответ
Вы пытались использовать более надежный инструмент тестирования, чем AB? Вы могли бы обнаружить, что это AB, сам бьющий по потолку, а не HAProxy. Подумайте об использовании Apache jMeter или подходящего приложения для нагрузочного тестирования.
Keepalive на Apache, вероятно, маскирует / искажает результаты AB, давая вам несоответствие, которое вы видите,
Вы должны опубликовать содержимое netstat
во время нагрузочного теста, чтобы мы могли установить используемые состояния соединения и соответствующим образом настроить параметры, основываясь на этом.
Тем не менее, вы сможете немного повысить производительность, добавив следующие параметры в раздел настроек по умолчанию:
option tcp-smart-accept
option tcp-smart-connect
Здесь действительно хорошая дискуссия, которая отражает некоторые из ваших проблем, http://www.mail-archive.com/haproxy@formilux.org/msg07156.html
Это слишком сложно для удаленной диагностики. Но если Apache способен достичь этих уровней reqs/s, вряд ли это будет уровень ядра или настройка стека TCP/IP. Таким образом, ваш фокус был бы лучше обслужен, глядя на вашу конфигурацию HAProxy.