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

Переключение HAProxy на резервное копирование при 500 ошибках и / или сбое сервера

Я настраиваю 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. Похоже, что httpcheck не выполняется для сервера A; или лучше, в системном журнале я не вижу никаких ошибок относительно неработающего сервера A.

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

Из официальной документации: Активная пассивная балансировка нагрузки с HAProxy

defaults
  mode http
  option http-server-close
  timeout client 20s
  timeout server 20s
  timeout connect 4s

frontend ft_app
  bind 10.0.0.100:80 name app
  default_backend bk_app

backend bk_app
  server s1 10.0.0.1:80 check
  server s2 10.0.0.2:80 check backup

Кстати, я нашел конфигурацию 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