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:
- Toutes les demandes sont acheminées vers le serveur node_back (B), même si node1 (A) est actif.
- 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.