1 votes

HAProxy - Contrôle de santé de plusieurs microservices pour un seul serveur

Nous avons 2 serveurs web que nous voulons équilibrer en charge. Chaque serveur possède une application web principale qui est utilisée par le public. Chaque serveur possède également un certain nombre de microservices dépendants qui sont utilisés en interne par l'application principale.

Nous voulons que l'équilibreur de charge exclue le serveur si l'un des microservices de ce serveur est détecté comme étant hors service.

http://server1/mainApp
http://server1/microservice1
http://server1/microservice2

http://server1/mainApp
http://server2/microservice1
http://server2/microservice2

Donc si http://server2/microservice2 descend alors nous voulons Serveur 1 pour desservir tout le trafic. Ou si http://server1/microservice1 descend, nous voulons serveur2 au trafic du serveur.

Ce type de logique est-il réalisable dans HAproxy ? ou existe-t-il une autre technologie qui puisse le faire pour nous ?

Merci !

2voto

Jojje Points 353

HAproxy n'a pas de fonctionnalité intégrée pour des contrôles de santé complexes comme celui-ci.

Cela dit, vous pouvez écrire une page rapide et sale sur les backends (ou sur le LB si c'est plus facile/meilleur), qui effectue des requêtes GET sur tous les microservices et renvoie un code d'état ou une chaîne de caractères donnée pour un résultat donné ; 200 et "OK" si tout va bien, 503 et "FAILED" sinon.

J'ai écrit une page .NET similaire pour vérifier si un service particulier est en cours d'exécution sur le système, parce que IIS retournait toujours 200 même si le service de secours n'était pas en cours d'exécution.

Comme vous n'avez que 3 microservices, cela devrait bien fonctionner, mais pas tellement si vous en avez 10 ou des centaines.

2voto

Yagel Points 131

Vous pouvez utiliser tcp-check . Dans une section du backend, ajoutez quelque chose comme ça :

option tcp-check
tcp-check connect
tcp-check send GET\ /\mainApp\/check HTTP/1.0\r\n
tcp-check send Host:\ haproxy.1wt.eu\r\n
tcp-check send \r\n
tcp-check expect rstring (2..|3..)
tcp-check connect
tcp-check send GET\ /\microservice1\/check HTTP/1.0\r\n
tcp-check send Host:\ haproxy.1wt.eu\r\n
tcp-check send \r\n
tcp-check expect rstring (2..|3..)

Voir : https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4.2-tcp-check%20connect

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X