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