Я использую связь через сокет HAProxy, чтобы перевести серверную часть в режим обслуживания перед отключением веб-сервера для обслуживания с помощью этой команды:
echo "disable server cluster-01/app-01-4" | sudo socat stdio /tmp/haproxy.sock
Проблема в том, что когда я снова помечаю серверную часть доступной с помощью команды socket enable, 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
С помощью set server proxy-name/server-name health down
перед вводом сервера в эксплуатацию с enable server ...
кажется, делает то, что вам нужно.
Сервер в конечном итоге будет выведен из эксплуатации в результате последующих проверок работоспособности, но это не поможет, если сервер был исправен, когда вы его отключили, но не исправен, когда вы его снова вернете, поскольку HAProxy, похоже, предполагает, что сервер будет быть в том же состоянии работоспособности при включении, что и при выключении.
В Loadbalancer.org мы делаем это немного сложнее :-).
Перед перезапуском HAProxy мы проверяем все текущие состояния и проверяем все серверы, которые находятся в DOWN или MAINT.
Затем мы БЛОКИРУЕМ SYN-пакеты (обрабатывает потерянный трафик при перезагрузке). Затем мы перезапускаем HAProxy.
Затем мы вручную устанавливаем для всех состояний значение DOWN или MAINT (в зависимости от того, какими они были 0,01 секунды назад ..)
Затем мы снова включаем SYN-пакеты ...
Это дает нам требуемый результат - плавный перезапуск без простоев или потерянных пакетов.
Если вас не беспокоит ВСЕ вышеперечисленное, просто установите все в состояние DOWN после перезагрузки ... сделайте это быстро и скрестите пальцы :-).
v1.6 имеет новый код перезапуска с полным состоянием, но я еще не исследовал его.
Вы можете перейти на haproxy 1.6.3 и использовать новый агент-чек функциональность. Это также позволяет высасывать хосты, когда вы выводите их из ротации.