Você deseja option redispatch
. Isso faz com que uma solicitação não seja repetida em outro servidor.
Digamos que eu tenha web01
na minha lista de servidores de back-end e web01
fique inativo. Levará alguns segundos para que o HAProxy perceba que o servidor está inativo (dependendo do intervalo de verificação de integridade e de quanto tempo o tempo limite está esgotado) e o removerá da rotação. Se uma solicitação chegar em antes que aconteceu, o cliente acabará recebendo um erro 503 Service Unavailable
.
O que eu gostaria que acontecesse é que o HAProxy automaticamente repita esse mesmo pedido novamente em outro servidor. Percebo que o pedido acabaria sendo muito lento, mas acabaria resultando em um sucesso, em vez de um erro.
Existe uma maneira de configurar o HAProxy para repetir a solicitação HTTP em outro servidor, em vez de cometer erros? Idealmente, eu nunca quero que um cliente receba um erro se houver algum servidor em funcionamento no cluster.
Aqui está o meu 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/(.*) \ /
backend service2
server web03 127.0.0.1:87 check
server web04 127.0.0.1:88 check
reqrep ^([^\ :]*)\ /service2/(.*) \ /
Tags load-balancing haproxy