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

Haproxy - остановить трафик к узлу на обслуживании

У нас есть 2 активных хоста для балансировки нагрузки с помощью haproxy. Haproxy работает на обоих хостах. Из-за технического обслуживания нам необходимо остановить службы на узле 1. Во время периода обслуживания мы хотим, чтобы экземпляр haproxy перестал отправлять трафик на узел 1 и отправлял все запросы на узел 2.

Цель: Отсутствие простоев во время обслуживания сервера.

Текущее поведение: Когда служба отключается на узле 1. Трафик по-прежнему отправляется как на узел 1, так и на узел 2. Поскольку серверные службы не работают на узле 1, время ожидания запроса истекает, и тогда Haproxy перестает отправлять запросы узлу 1. После события первого сбоя весь трафик, если он отправляется на Хост 2 и обрабатывается нормально.

Есть ли способ избежать потери этой 1 транзакции (первого сбоя на Узле 1)? Я читал о включении и отключении внутренних серверов с использованием файла сокета, для которого требуется socat или netcat. Не тестировал, но ищу решение с конфигурацией haproxy для решения этой проблемы.

Определение бэкэнда в конфигурации 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