Как заставить HAProxy ждать успешной проверки работоспособности, прежде чем вывести сервер из режима обслуживания

Я использую соединение через сокет HAProxy, чтобы перевести мой бэкэнд в режим обслуживания, прежде чем отключить веб-сервер для обслуживания с помощью этой команды:

echo "disable server cluster-01/app-01-4" | sudo socat stdio /tmp/haproxy.sock

Проблема заключается в том, что когда я снова отмечаю бэкэнд доступным с помощью команды enable socket, HAProxy не ожидает успешных проверок работоспособности перед отправкой запросов бэкенду. Таким образом, мы заканчиваем тем, что теряем некоторые запросы, прежде чем HAProxy обнаружит, что сервер все еще не работает, и отключит его.

Есть ли способ сказать HAProxy, что нужно дождаться, пока бэкэнд не будет исправен, прежде чем включить его? Или я должен сделать свои загрузочные скрипты достаточно умными, чтобы контролировать сам сервер, прежде чем сказать HaProxy, что нужно снова включить бэкэнд? Это было бы явно не идеально.

В настоящее время я делаю это:
echo "enable server cluster-01/app-01-4" | sudo socat stdio /tmp/haproxy.sock

Есть ли что-то похожее на это, что я могу использовать вместо этого?echo "enable server cluster-01/app-01-4 WAIT_FOR_SUCCESSFUL_HEALTH_CHECK" | sudo socat stdio /tmp/haproxy.sock

Изменить: я использую HAProxy версии 1.5x

3 ответа

Решение

С помощью set server proxy-name/server-name health down до ввода сервера в эксплуатацию с enable server ... Похоже, делать то, что вам нужно.

Сервер в конечном итоге будет выведен из строя в результате последующих проверок работоспособности, но это не поможет, если сервер был исправен, когда вы вынули его, но не исправен, когда вы вернули его обратно, поскольку HAProxy предполагает, что сервер будет быть в том же состоянии работоспособности, когда включен, что он был, когда он был отключен.

Вы можете перейти на haproxy 1.6.3 и использовать новую функцию проверки агента. Это также позволяет вам удалять хосты, когда вы выводите их из ротации.

На Loadbalancer.org мы делаем это немного сложным способом:-).

Перед тем, как перезапустить HAProxy, мы проверяем все текущие состояния и проверяем наличие серверов DOWN или MAINT.

Затем мы блокируем пакеты SYN (обрабатывает потерянный трафик при перезагрузке). Затем мы перезапускаем HAProxy.

Затем мы вручную устанавливаем для всех состояний значение DOWN или MAINT (в зависимости от того, какими они были 0,01 секунды назад..)

Затем мы снова включаем пакеты SYN...

Предоставляя нам требуемый результат плавного перезапуска без простоев или потерянных пакетов.

Если вы не можете быть обеспокоены ВСЕМ вышеизложенным, просто установите все в состояние ВНИЗ после перезагрузки.. сделайте это быстро и скрестите пальцы:-).

В v1.6 появился новый код перезапуска с полным состоянием, но я еще не исследовал его.

Другие вопросы по тегам