Commutateur HAProxy pour sauvegarder sur 500 erreurs et / ou serveur en panne

8

Je mets en place un HAProxy devant seulement 2 serveurs backend, avec une configuration particulière: toute demande doit aller au serveur A; mais, si le serveur A renvoie un code d'erreur 5xx, toutes les demandes doivent être envoyées à un serveur de sauvegarde B. Lorsque A renvoie "up", toutes les demandes doivent aller à A.

J'essaie cette configuration:

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

Mais cela ne fonctionne pas pour deux raisons:

  1. Toutes les demandes sont acheminées vers le serveur node_back (B), même si node1 (A) est actif.
  2. Il semble qu'aucune vérification http ne soit effectuée sur le serveur A; ou mieux, dans syslog, je ne vois aucune erreur concernant le serveur A en panne.

Si je supprime la ligne "option httpchk" et les deux lignes juste en dessous; et je supprime également le "observer layer7" dans le serveur A; HAProxy fonctionne en acheminant toutes les demandes vers le nœud A. Mais, évidemment, lorsque le serveur A renvoie un 500, HAProxy ne bascule pas vers B. Donc, je suppose que le problème pourrait être dans la configuration de l'option httpchk.

Carmine Giangregorio
la source
1
C'est parfaitement faisable avec nginx. En fait, j'évite les haproxy sur l'équilibrage du Web, car nginx est plus flexible et simple, car il s'agit d'un serveur Web. Mais, puisque la question initiale portait sur l'haproxy, je ne me sens pas le droit de fournir une réponse sur nginx. Mais si tu le veux, je peux. Après tout, près d'un an s'est écoulé, je pense que vous avez quand même trouvé une solution.
drookie

Réponses:

1

De la documentation officielle: Active Passive Load Balancing With 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
user5994461
la source
0

Au fait, j'ai trouvé la configuration pré-nginx pour mon haproxy, et je pense que vous devriez essayer:

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
drookie
la source