Как предотвратить код состояния 502 как ответ haproxy как балансировщик нагрузки

У меня 3 сервера:

server (A)= a nginx(port 80) as reverse proxy to kestler (5000 port)
server (B)= a nginx(port 80) as reverse proxy to kestler (5000 port)
server (C)= a HAProxy as load balancer for port 80 of server (A) and (B)
and server A & B are quite similar.

все работает очень хорошо, и haproxy перенаправляет запросы на сервер (A) и (B), но если kestrel на одном из серверов (например, A) будет убит, nginx ответит 502 ошибка шлюза и haproxy не обнаружит эту проблему и все еще перенаправит запросы на это, и это ошибка! в это время он должен перенаправлять запросы на сервер (B).

global
    log 127.0.0.1 local2 info
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

defaults
    log global
    mode http
    option httplog
    option dontlognull
    option redispatch
    retries 3
    timeout connect 5s
    timeout client 50s
    timeout server 50s
    stats enable
    stats hide-version
    stats auth admin:admin
    stats refresh 10s
    stats uri /stat?stats

frontend http_front
    bind *:80
    mode http
    option httpclose
    option forwardfor
    reqadd X-Forwarded-Proto:\ http
    default_backend http_back

backend http_back
    balance roundrobin
    mode http
    cookie SERVERID insert indirect nocache
    server ServerA 192.168.1.2:80 check cookie ServerA
    server ServerB 192.168.1.3:80 check cookie ServerB

Как я могу решить эту проблему? Спасибо большое.

1 ответ

Решение

Вы только проверяете, работает ли nginx, а не достаточно ли работоспособно приложение.

в backend, добавлять option httpchk,

option httpchk GET /some/path HTTP/1.1\r\nHost:\ example.com

замещать some path с путем, который докажет, можно ли использовать приложение на этом сервере, если оно вернется 200 OK (или любой ответ 2xx или 3xx), и замените example.com с HTTP Host заголовок, который ожидает приложение.

option httpchk

По умолчанию проверка работоспособности сервера заключается только в попытке установить TCP-соединение. когда option httpchk указан, полный HTTP-запрос отправляется после установления TCP-соединения, и ответы 2xx и 3xx считаются действительными, в то время как все остальные указывают на сбой сервера, включая отсутствие какого-либо ответа.

Это пометит сервер как нездоровый, если приложение не работает, поэтому HAProxy прекратит отправку трафика на него. Вы хотите настроить интервал проверки для каждого сервера, используя inter а также downinter а также fastinter Параметры на каждом сервере позволяют указать, как часто HAProxy должен выполнять проверку.

Другие вопросы по тегам