У нас есть 2 активных хоста для балансировки нагрузки с помощью haproxy. Haproxy работает на обоих хостах. Из-за технического обслуживания нам необходимо остановить службы на узле 1. Во время периода обслуживания мы хотим, чтобы экземпляр haproxy перестал отправлять трафик на узел 1 и отправлял все запросы на узел 2.
Цель: Отсутствие простоев во время обслуживания сервера.
Текущее поведение: Когда служба отключается на узле 1. Трафик по-прежнему отправляется как на узел 1, так и на узел 2. Поскольку серверные службы не работают на узле 1, время ожидания запроса истекает, и тогда Haproxy перестает отправлять запросы узлу 1. После события первого сбоя весь трафик, если он отправляется на Хост 2 и обрабатывается нормально.
Есть ли способ избежать потери этой 1 транзакции (первого сбоя на Узле 1)? Я читал о включении и отключении внутренних серверов с использованием файла сокета, для которого требуется socat или netcat. Не тестировал, но ищу решение с конфигурацией haproxy для решения этой проблемы.
backend myBackend
balance leastconn
option httpchk HEAD /
default-server inter 5s fastinter 1s downinter 10s fall 2 rise 2
timeout server 20s
server s1 ActiveHost1:port check maxconn 10
server s2 ActiveHost2:port check maxconn 10
server s3 standByHost1:port check maxconn 10 backup
server s4 standByHost1:port check maxconn 10 backup
Вы также можете уменьшить время, в течение которого узел считается ВЫКЛЮЧЕННЫМ, указав параметр проверки службы. Согласно документации, например для службы HTTP:
Определите сервис для проверки
Определите, чего ожидать в результате
Определите, когда хост не работает - здесь проверяйте каждые 3 секунды. После 3 неудачных попыток хост считается ВЫКЛЮЧЕННЫМ. Когда 2 проверки имеют ожидаемый статус, хост считается UP
Определите своих хозяев
option httpchk GET /check
http-check expect status 200
default-server inter 3s fall 3 rise 2
server srv1 10.0.0.1:80 check
server srv2 10.0.0.2:80 check
Подойдет ли вам комментирование строки и перезагрузка haproxy?
sed -i \"/server s1/c\\ #server s1 ActiveHost1:port check maxconn 10\" /etc/haproxy/haproxy.cfg && sudo service haproxy reload