Скажем, у меня есть web01
в моем списке внутренних серверов и web01
идет вниз. HAProxy через несколько секунд обнаружит, что сервер не работает (в зависимости от интервала проверки работоспособности и продолжительности тайм-аута), и выведет его из строя. Если приходит запрос перед это произошло, клиент получит 503 Service Unavailable
ошибка.
Что бы я лайк случиться - значит иметь HAProxy автоматически повторить попытку тот же запрос снова на другом сервере. Я понимаю, что запрос будет очень медленным, но в конечном итоге приведет к успеху, а не к ошибке.
Есть ли способ настроить HAProxy для повторной попытки HTTP-запроса на другом сервере вместо выхода из строя? В идеале я никогда не хочу, чтобы клиент получал сообщение об ошибке, если в кластере есть работающие серверы.
Вот мой haproxy.cfg:
global
maxconn 4096
debug
defaults
mode http
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend http-in
bind *:80
acl service1 path_reg ^/service1/
acl service2 path_reg ^/service2/
use_backend service1 if service1
use_backend service2 if service2
backend service1
server web01 127.0.0.1:85 check
server web02 127.0.0.1:86 check
reqrep ^([^\ :]*)\ /service1/(.*) \1\ /\2
backend service2
server web03 127.0.0.1:87 check
server web04 127.0.0.1:88 check
reqrep ^([^\ :]*)\ /service2/(.*) \1\ /\2
Вы хотите option redispatch
. Это приводит к тому, что запрос не может быть повторен на другом сервере.