Я устанавливаю HAProxy перед только двумя внутренними серверами, с определенной конфигурацией: любой запрос должен идти к серверу A; но, если сервер A возвращает код ошибки 5xx, все запросы должны идти на резервный сервер B. Когда A возвращает «вверх», все запросы должны идти к A.
Я пытаюсь эту конфигурацию:
backend example_cluster
balance roundrobin
option httpclose
option forwardfor
option httpchk HEAD /ping.html HTTP/1.0\r\nHost:www.example.com
http-check disable-on-404
default-server error-limit 1 on-error mark-down
redirect scheme https if !{ ssl_fc }
server node1 1.2.3.4:80 check observe layer7
server node_back 5.6.7.8:443 backup ssl verify none
Но это не работает по двум причинам:
- Все запросы направляются на сервер node_back (B), даже если node1 (A) работает.
- Кажется, что никакие проверки http не выполнены против сервера A; или, что лучше, в системном журнале я не вижу никакой ошибки, связанной с отключением сервера A.
Если я уберу строку «option httpchk», а две строки чуть ниже; и я также удаляю «наблюдающий слой7» на сервере А; HAProxy работает путем маршрутизации всех запросов к узлу A. Но, очевидно, когда сервер A возвращает 500, HAProxy не переключается на B. Итак, я предполагаю, что проблема может заключаться в конфигурации опции httpchk.
proxy
load-balancing
reverse-proxy
haproxy
Кармин Джангрегорио
источник
источник
Ответы:
Из официальной документации: Активная пассивная балансировка нагрузки с HAProxy
источник
Кстати, я нашел конфигурацию pre-nginx для моего haproxy, и я думаю, что вы должны попробовать:
источник