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

Переключение HAProxy только в случае отказа сервера

Допустим, у меня есть 2 сервера - SA и SB. Можно ли настроить HAProxy на такую ​​работу:

Все соединения идут в SA -> SA отключается -> HAProxy переключает все соединения на SB -> пока SB не выйдет из строя - никакие соединения не переходят в SA, даже если он снова включен -> SB отключается -> HAProxy переключается на SA .. .

Вкратце, я бы хотел, чтобы HAProxy переключался только тогда, когда текущий сервер выходит из строя. Может мне стоит использовать что-нибудь еще, кроме HAProxy?

Посмотрите этот конфиг:

listen my-server 0.0.0.0:80
    balance roundrobin
    server web01 10.10.10.1:80 check inter 10s fall 3 rise 99999999
    server web02 10.10.10.2:80 check backup

По умолчанию все запросы будут попадать в web01. web02 не будет использоваться. Если web01 перестает отвечать, через 30 секунд (3 проверки с интервалом в 10 секунд) сервер будет отключен. web02 будет переведен в онлайн, и все запросы попадут в него.

Если web01 восстановится, он будет возвращен в онлайн только после 99999999 проверок с интервалом в 10 секунд, что фактически никогда не происходит.

Если у вас всего два и ровно два сервера, возможно, имеет смысл использовать vip для службы, которой вы управляете через pacemaker / corosync, чтобы сделать ее высокодоступной.

Это возможно и с haproxy, отметив SB как сервер резервного копирования. Таким образом, он используется только тогда, когда SA недоступен:

backend mybackend
mode            http
balance         roundrobin
option          httpchk /test.html
server          server1.example.com server1.example.com:80 weight 1 check port 80 inter 5s rise 3 fall 2
server          server2.example.com server2.example.com:80 backup weight 1 check port 80 inter 5s rise 3 fall 2

Однако это не выполняет вторую часть того, что вы хотите: он снова начнет использовать SA, как только он вернется. Я не уверен, есть ли возможность заставить haproxy вести себя так, как вы хотите. Я по крайней мере никогда этим не пользовался.