как предотвратить код состояния 502 как ответ haproxy как балансировщик нагрузки - PullRequest
0 голосов
/ 29 мая 2018

У меня есть 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 Ответ

0 голосов
/ 31 мая 2018

Вы только проверяете, работает ли 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 должен выполнять проверку.

...