Все,
У меня проблема с тем, что HAProxy не восстанавливается после перезапуска внутреннего сервера. Я использую прокси-сервер не для балансировки нагрузки, а для направления разных URL-адресов на разные серверы (веб-службы и веб-службы), чтобы избежать проблем с несколькими доменами. Прокси-сервер работает нормально до тех пор, пока первая проверка не завершится неудачно, но затем HAProxy никогда не возобновит пересылку на него после резервного копирования. Прокси-сервер работает внутри контейнера докеров (https://registry.hub.docker.com/u/dockerfile/haproxy/dockerfile/), и он должен работать под управлением HAProxy 1.5.3.
haproxy.cfg
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
user haproxy
group haproxy
defaults
mode http
log global
option dontlognull
option httpclose
option httplog
option forwardfor
option persist
option redispatch
option http-server-close
contimeout 5000
clitimeout 50000
srvtimeout 50000
maxconn 60000
retries 3
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
stats enable
stats uri /haproxy-stats
frontend http-in
bind *:80
default_backend server1
acl url_server1 path_beg -i /server1
acl url_server2 path_beg -i /services/server2
use_backend server1 if url_server1
use_backend server2 if url_server2
backend server1
balance roundrobin
option httpchk GET /server1/content/
server server1 server1:8080 check inter 10s rise 1 fall 5
backend server2
balance roundrobin
option httpchk GET /services
server server2 server2:8181 check inter 5s rise 1
В журналах HAProxy я вижу следующие сообщения об ошибках:
[WARNING] 040/210248 (1) : Server server1/server1 is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 0ms. 0 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
[ALERT] 040/210248 (1) : backend 'server1' has no server available!
В браузере вижу:
503 Service Unavailable
No server is available to handle this request.
После перезапуска сервера я никогда не вижу сообщения журнала, указывающего, что HAProxy определил, что он вернулся, и я все еще получаю ошибку 503 в браузере, хотя я могу нажать server1: 8080 и увидеть, что сайт восстановлен.
Я столкнулся с той же проблемой, и я понимаю, что HaProxy считает, что весь бэкэнд не работает, если все серверы в бэкэнде не работают. И как только серверная часть помечена как неработающая, она больше не возвращается (это не задокументировано, я пришел к такому выводу на основе своего опыта).
Поскольку у вас только один сервер, очень вероятно, что ваш сервер будет помечен как неработающий во время перезапуска. Это было бы правильным поведением балансировщика нагрузки, если бы у вас было несколько серверов.
Мое решение заключалось в увеличении интервала между проверками и параметрами падения:
Например:
server foo 1.2.3.4:80 check inter 5000 fall 5 rise 1
У нас было похожее поведение. Через месяц или около того сервер будет отмечен как неработающий и больше не будет работать.
По умолчанию HAProxy преобразует любые имена хостов в IP-адреса при запуске. Если сервер меняет IP-адрес, HAProxy не разрешает DNS снова до перезапуска. Специально для нас мы AWS и указываем на ALB / ELB. Через месяц ALB / ELB изменит свой IP (скорее всего, какое-то обслуживание). В этот момент IP плохой и будет продолжать отказывать.
Решением для нас было добавить резолвер в HAProxy.cfg:
resolvers myresolver
nameserver dns1 10.110.0.2:53
resolve_retries 30
timeout retry 1s
hold valid 30s
server myserver <server_name>:443 maxconn 32 check ssl verify none resolvers myresolver
Я столкнулся с той же проблемой. При балансировке нагрузки RabbitMQ, когда один экземпляр RabbitMQ закрыт, он помечается как DOWN, но после запуска закрытого экземпляра он не помечается как активный. Выполнение начальной настройки по Педро Почта, Я сделал некоторые дополнения.
option httpchk
или option tcp-check
для включения проверки работоспособности.port
проверка работоспособности использует. (Даже если порт совпадает с портом службы)server rabbitmq-1 rabbitmq-1:5672 check port 5672 inter 5s rise 2 fall 3
Я наткнулся на ту же проблему, и я думаю, что это сделано намеренно. HAProxy имеет свойство fall
несет ответственность за это поведение:
fall <count>
The "fall" parameter states that a server will be considered as dead after
<count> consecutive unsuccessful health checks. This value defaults to 3 if
unspecified. See also the "check", "inter" and "rise" parameters.
Понятия не имею, как вернуть мертвый экземпляр. Я пробовал даже интерактивная консоль, упомянутая в этом вопросе