Допустим, у меня есть 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 вести себя так, как вы хотите. Я по крайней мере никогда этим не пользовался.