HAProxy cambia a copia de seguridad en 500 errores y / o servidor caído

8

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:

  1. Todas las solicitudes se enrutan al servidor node_back (B), incluso si el nodo1 (A) está activo.
  2. 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.

Carmine Giangregorio
fuente
1
Es perfectamente factible con nginx. De hecho, estoy evitando el haproxy en el equilibrio web, porque nginx es más flexible y simple, ya que es un servidor web. Pero, dado que la pregunta inicial era sobre haproxy, no me siento con el derecho de dar una respuesta sobre nginx. Pero si lo quieres, puedo. Después de todo, ha pasado casi un año, creo que ha encontrado una solución de todos modos.
drookie

Respuestas:

1

De la documentación oficial: equilibrio de carga pasiva activa con HAProxy

defaults
  mode http
  option http-server-close
  timeout client 20s
  timeout server 20s
  timeout connect 4s

frontend ft_app
  bind 10.0.0.100:80 name app
  default_backend bk_app

backend bk_app
  server s1 10.0.0.1:80 check
  server s2 10.0.0.2:80 check backup
usuario5994461
fuente
0

Por cierto, he encontrado la configuración previa a nginx para mi haproxy, y creo que deberías probarlo:

frontend foo
    bind 192.168.0.1:9080
    option httpchk
    default_backend bar-web

backend bar-web
    mode http
    balance roundrobin
    server bar1 192.168.1.2:9080 check observe layer4 weight 50
    server bar2 192.168.1.3:9080 check observe layer4 weight 50
drogadicto
fuente