HAProxy переключиться на резервное копирование на 500 ошибок и / или сервер не работает

8

Я устанавливаю 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

Но это не работает по двум причинам:

  1. Все запросы направляются на сервер node_back (B), даже если node1 (A) работает.
  2. Кажется, что никакие проверки http не выполнены против сервера A; или, что лучше, в системном журнале я не вижу никакой ошибки, связанной с отключением сервера A.

Если я уберу строку «option httpchk», а две строки чуть ниже; и я также удаляю «наблюдающий слой7» на сервере А; HAProxy работает путем маршрутизации всех запросов к узлу A. Но, очевидно, когда сервер A возвращает 500, HAProxy не переключается на B. Итак, я предполагаю, что проблема может заключаться в конфигурации опции httpchk.

Кармин Джангрегорио
источник
1
Это прекрасно выполнимо с nginx. На самом деле, я избегаю haproxy по балансировке веб-страниц, потому что nginx более гибок и прост, так как это веб-сервер. Но, поскольку первоначальный вопрос касался haproxy, я не считаю правильным давать ответ о nginx. Но если ты этого хочешь, я могу. В конце концов, прошел почти год, я думаю, вы все равно нашли решение.
Друки

Ответы:

0

Кстати, я нашел конфигурацию pre-nginx для моего haproxy, и я думаю, что вы должны попробовать:

frontend foo
    bind 192.168.0.1:9080
    option httpchk
    default_backend bar-web

backend bar-web
    mode http
    balance roundrobin
    server bar1 192.168.1.2:9080 check observe layer4 weight 50
    server bar2 192.168.1.3:9080 check observe layer4 weight 50
drookie
источник