Contrôles de santé HAProxy: utiliser httpchk et observer?


10

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?


Juste pour être certain que HAProxy est définitivement le problème, pourriez-vous trouver les trois lignes de journal correspondantes de votre serveur Apache backend et les ajouter à votre question?
Ladadadada

L'un des serveurs Apache est délibérément mal configuré de sorte que toutes les applications sur celui-ci renvoient un code d'erreur 500. Cependant, le fichier /check.txt fonctionne toujours sauf si je supprime le fichier. Je veux que le serveur apache soit désactivé s'il retourne une erreur de 500 même si le fichier check.txt est toujours là.
ouranos

Réponses:


4

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:

  1. Configurez Apache, plutôt que l'application, de sorte que chaque demande renvoie une réponse 500, même le fichier statique /check.txt.
  2. Transformez-vous /check.txten une application Ruby qui contient juste assez de logique pour choisir entre une réponse 200 et 500, le cas échéant.
  3. Définissez la intervaleur 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.
  4. Définissez la intervaleur sur quelque chose de plus petit comme 60, mais définissez la risevaleur 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.)

Oui, c'est ce qui se passe. Je pense que je vais devoir me débarrasser de /check.txtet pointer le httpchk vers une application. Le check.txtfichier é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 que disable servercela ne persiste pas entre les rechargements.
ouranos
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.