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

Настройка Linux + HAProxy

В настоящее время я развертываю 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.