Estoy configurando un HAProxy frente a solo 2 servidores de back-end, con una configuración particular: cualquier solicitud debe ir al servidor A; pero, si el servidor A devuelve un código de error 5xx, todas las solicitudes deben ir a un servidor de respaldo B. Cuando A devuelve "arriba", todas las solicitudes deben ir a A.
Estoy intentando esta configuración:
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
Pero no funciona por dos razones:
- Todas las solicitudes se enrutan al servidor node_back (B), incluso si el nodo1 (A) está activo.
- Parece que no se realizan verificaciones http en el servidor A; o mejor, en syslog no veo ningún error con respecto al servidor A inactivo.
Si elimino la línea "opción httpchk", y las dos líneas justo debajo de eso; y elimino también el "observe la capa 7" en el servidor A; HAProxy funciona enrutando todas las solicitudes al nodo A. Pero, obviamente, cuando el servidor A devuelve un 500, HAProxy no cambia a B. Por lo tanto, supongo que el problema podría estar en la configuración de la opción httpchk.
fuente
Respuestas:
De la documentación oficial: equilibrio de carga pasiva activa con HAProxy
fuente
Por cierto, he encontrado la configuración previa a nginx para mi haproxy, y creo que deberías probarlo:
fuente