Haproxy: соединения Keepalive не сбалансированы равномерно

у нас есть небольшая странная проблема, с которой мы сталкиваемся уже несколько месяцев:

Нагрузка на наш кластер (http, длительные соединения keepalive с большим количеством очень коротких (‹100 мс) запросов) распределяется очень неравномерно. Все серверы настроены одинаково, но некоторые соединения, которые пропускают тысячи запросов в секунду, просто отправляются только на один сервер. Мы пробовали обе стратегии балансировки нагрузки, но это не помогло. Похоже, это строго связано с поддержкой активности.

Неправильный сервер имеет следующие настройки:

option tcpka
option http-pretend-keepalive

Создан ли option http-server-close для решения этой проблемы? Если я правильно понял, он закроет и снова откроет множество соединений, что означает нагрузку на системы? Разве нет способа сохранить соединения открытыми, но в любом случае равномерно распределить трафик? Я пытался включить эту опцию, но она убивает все наши серверы под нагрузкой.


person Tobias    schedule 13.11.2013    source источник


Ответы (2)


В настоящее время HAProxy поддерживает только HTTP-соединения keep-alive с клиентом, но не с сервером. Если вы хотите иметь возможность проверять (и балансировать) каждый HTTP-запрос, в настоящее время вы можете использовать один из следующих вариантов.

# enable keepalive to the client
option http-server-close

# or

# disable keepalive completely
option httpclose

option http-pretend-keepalive не меняет фактического поведения HAProxy в отношении обработки соединения. Вместо этого он предназначен в качестве обходного пути для серверов, которые не работают должным образом, когда видят соединение без поддержки активности (которое генерируется HAProxy с внутренним сервером).

Поддержка проверки активности по отношению к внутреннему серверу запланирована в финальном выпуске HAProxy 1.5. Но фактический объем этого может по-прежнему варьироваться, и окончательная дата выпуска будет когда-то в будущем ...

person Holger Just    schedule 06.12.2013
comment
а он не включен в текущую бету? - person Tobias; 13.12.2013
comment
Еще нет, нет. Но, как я уже сказал, Вилли взял на себя эту функцию. - person Holger Just; 13.12.2013
comment
Обратите внимание, что с тех пор, как это было написано, был выпущен HAProxy 1.5. Он поддерживает keepalive-соединения на всем пути от внешнего интерфейса до серверного интерфейса. Однако он не поддерживает пул соединений, то есть отправку запросов от нескольких внешних соединений через одно внутреннее соединение. Однако когда-нибудь это может стать частью 1.6. - person Holger Just; 04.12.2014

К вашему сведению, он присутствует в последней версии 1.5-dev20 (но возьмите с собой исправления, поскольку он поставляется с несколькими регрессами).

person Willy Tarreau    schedule 16.12.2013