Estou configurando um HAProxy na frente de apenas 2 servidores back-end, com uma configuração específica: qualquer solicitação deve ir para o servidor A; mas, se o servidor A retornar um código de erro 5xx, todas as solicitações deverão ir para um servidor de backup B. Quando A retornar "ativo", todas as solicitações deverão ir para A.
Estou tentando esta configuração:
backend example_cluster
balance roundrobin
option httpclose
option forwardfor
option httpchk HEAD /ping.html HTTP/1.0\r\nHost:www.example.com
http-check disable-on-404
default-server error-limit 1 on-error mark-down
redirect scheme https if !{ ssl_fc }
server node1 1.2.3.4:80 check observe layer7
server node_back 5.6.7.8:443 backup ssl verify none
Mas isso não funciona por dois motivos:
- Todas as solicitações são roteadas para o servidor node_back (B), mesmo se o node1 (A) estiver ativo.
- Parece que nenhum httpchecks é realizado no servidor A; ou melhor, no syslog não vejo nenhum erro em relação ao servidor A inativo.
Se eu remover a linha "opção httpchk" e as duas linhas logo abaixo; e removo também o "observe layer7" no servidor A; O HAProxy funciona roteando todas as solicitações para o nó A. Mas, obviamente, quando o servidor A retorna 500, o HAProxy não muda para B. Portanto, estou assumindo que o problema possa estar na opção httpchk configuration.