J'utilise HAProxy 1.4.18 avec la configuration backend suivante
backend staging
option httpchk HEAD /check.txt HTTP/1.0
http-check disable-on-404
default-server error-limit 1 on-error mark-down
server staging01 x.x.x.x:80 check observe layer7
server staging02 x.x.x.x:80 check observe layer7
Les serveurs exécutent plusieurs applications sur apache / passager.
La combinaison de httpchk et disable-on-404 permet un arrêt gracieux et la suppression d'un serveur de la lb assez facilement tout en pouvant accéder directement (c'est-à-dire pour les tests).
J'essaie de configurer Observer afin de désactiver un serveur lorsqu'une application ne fonctionne pas. J'ai cassé la configuration de l'application sur staging02 donc il retourne toujours un 500. Il est correctement marqué DOWN après les 500 premiers mais ensuite marqué UP au prochain httpchk.
Voici le fichier journal:
Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 2 sessions active, 0 requeued, 0 remaining in queue.
Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 1 sessions active, 0 requeued, 0 remaining in queue.
Server staging/staging02 is UP, reason: Layer7 check passed, code: 200, info: "OK", check duration: 0ms. 2 active and 1 backup servers online. 0 sessions requeued, 0 total in queue.
Existe-t-il un moyen de combiner ces deux contrôles?
Réponses:
La distinction que je comprends maintenant que /check.txt ne retourne en fait une réponse 200 mais toutes les demandes à l'application d' un retour 500. HAProxy voit les 500s qui reviennent des requêtes mandatées et prend le serveur hors de la piscine mais lance sa propre check, reçoit un 200 et remet le serveur dans le pool.
La solution serait de faire l'une des actions suivantes:
/check.txt
./check.txt
en une application Ruby qui contient juste assez de logique pour choisir entre une réponse 200 et 500, le cas échéant.inter
valeur sur quelque chose de ridicule comme 3600. Cela devrait vous donner une heure pour faire vos tests ou (si le serveur tombe en panne seul) résoudre le problème et le ramener.inter
valeur sur quelque chose de plus petit comme 60, mais définissez larise
valeur sur quelque chose de plus élevé comme 60. Cela vous donnera également une heure avant que le serveur ne soit rajouté au pool. (Remarque, ces deux sont répertoriés en dernier car ce sont probablement de très mauvaises idées.)la source
/check.txt
et pointer le httpchk vers une application. Lecheck.txt
fichier était pratique pour supprimer rapidement et gracieusement un serveur de tous les HAProxy (3 d'entre eux dans la configuration HA, un seul actif). Il semble également quedisable server
cela ne persiste pas entre les rechargements.