В настоящее время я развертываю HAProxy на Centos 6, который будет отправлять запросы на некоторые серверы Apache HTTPD, и у меня возникают проблемы с производительностью. Я провел последние пару дней в гугле и все еще не могу постоянно пропускать соединения 10k / sec при тестировании (хотя иногда я получаю 30k / sec).
Я закрепил 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 для прямого доступа к веб-серверу, я легко получаю соединения со скоростью 30 к / с. Если я остановлю веб-серверы и использую AB для нажатия HAProxy, я получу соединения со скоростью 30 к / с, но, очевидно, это бесполезно.
Я также отключил iptables, так как прочитал, что nf_conntrack может все замедлить, без изменений. Еще я отключил службу irqbalance.
Тот факт, что я могу поразить каждое отдельное устройство со скоростью 30 к / с, заставляет меня поверить, что настройка серверов в порядке и что это должна быть какая-то конфигурация HAProxy?
Вот конфигурация, которую я построил, читая статьи по настройке и т. Д. http://pastebin.com/zsCyAtgU
Сервер представляет собой двойной процессор Xeon E5-2620 (6 ядер) с 32 ГБ оперативной памяти. Запуск Centos 6.2 x64. Частный и общедоступный интерфейсы находятся на разных сетевых адаптерах.
У кого-нибудь есть идеи? Спасибо.
Вы пробовали использовать более надежный инструмент для тестирования, чем AB? Вы вполне можете обнаружить, что в потолок попадает сам AB, а не HAProxy. Рассмотрите возможность использования Apache jMeter или подходящего приложения для тестирования нагрузки с отслеживанием состояния.
Сообщения поддержки активности на Apache, вероятно, маскируют / искажают результаты AB, что приводит к несоответствию, которое вы видите,
Вы должны опубликовать содержимое netstat
во время нагрузочного теста, чтобы мы могли установить используемые состояния подключения и соответствующим образом настроить параметры на основе этого.
Тем не менее, вы сможете немного повысить производительность, добавив следующие пункты в раздел настроек по умолчанию:
option tcp-smart-accept
option tcp-smart-connect
Здесь есть действительно хорошее обсуждение, которое отражает некоторые из ваших опасений, http://www.mail-archive.com/haproxy@formilux.org/msg07156.html
Это слишком сложно диагностировать удаленно. Но если Apache способен выполнять эти уровни запросов / с, это вряд ли будет настройкой уровня ядра или стека TCP / IP. Так что лучше сосредоточиться на вашей конфигурации HAProxy.