Chez AWS, nous aimerions utiliser des ELB pour équilibrer la charge des instances EC2 qui hébergent plusieurs applications. Idéalement, nous aimerions avoir un bilan de santé pour l'application.
Cependant, AWS Elastic Load Balancers ne vous autorise actuellement à envoyer une requête ping qu'à un seul emplacement pour un contrôle d'intégrité.
Quelle serait la meilleure façon de mettre en œuvre un contrôle d'intégrité avec ELB qui prend en compte l'état de plusieurs applications déployées sur chaque instance EC2?
amazon-web-services
amazon-elb
healthcheck
Andrei Fierbinteanu
la source
la source
Réponses:
Voici deux façons de résoudre ce problème;
La première option consiste à ajouter un autre contrôle d'intégrité sur l'hôte qui valide l'intégrité et renvoie HTTP 200s à l'ELB si la logique indique que vous souhaitez conserver l'hôte en ligne. La logique vous appartient, bien sûr. L'inconvénient ici serait que si l'application 2 était déployée avec succès sur certains hôtes, tous les hôtes seraient toujours «sains» et recevraient du trafic.
Une autre option consiste à utiliser un ELB supplémentaire pour chaque application. Vous pouvez pointer plusieurs ELB vers les mêmes instances EC2 dorsales et le coût est assez mineur pour le faire. De cette façon, vous pouvez vérifier l'état de santé par application et supprimer les hôtes présentant des problèmes au niveau de chaque application plutôt qu'une approche tout ou rien.
Edit: Veuillez noter qu'il s'agit d'une réponse plus ancienne et spécifique à ELB et non à ALB. ALB prend en charge nativement des cibles distinctes sur un hôte.
la source
L'utilisation d'un ELB par application est la voie à suivre ici.
Tout d'abord, vous pouvez en avoir besoin de toute façon si chaque application se trouve sur son propre domaine et que vous devez prendre en charge SSL. Actuellement, les ELB Amazon n'autorisent qu'un seul certificat SSL pour chaque domaine, ce qui nécessite des ELB distincts pour chaque domaine compatible SSL. (Les certifications SSL Wildcard étant une exception).
Le défi ici est que les contrôles de santé ELB ne peuvent pas actuellement être dirigés vers un domaine virtuel particulier hébergé sur une instance EC2. (Aucun en-tête "Host:" n'est envoyé). Les pings de santé ELB vont toujours au domaine par défaut, comme si vous aviez chargé l'adresse IP de l'instance EC2 dans votre navigateur. Un peu de colle est donc nécessaire pour recevoir les contrôles de santé sur le domaine par défaut, puis répondre avec l'état de santé d'une application particulière.
Voici un exemple de configuration de travail qui pourrait être ajouté à une
server
directive Nginx . Il serait installé sur chacune des instances EC2 à équilibrage de charge.Dans le paramètre "Health Check" de l'ELB pour "first-application.com", vous devez sélectionner "HTTP" et le port 80 et entrer un chemin comme:
/health-check/first-application.com
Avec la configuration Nginx ci-dessus exécutée sur l'hôte, la demande serait reçue sur le domaine par défaut et proxy la réponse de la configuration Nginx sur le même hôte pour https://first-application.com/api/v1/status
Avec cette approche, il n'y a pas de configuration par application dans Nginx. Tant que chaque application possède un nom de domaine unique, il vous suffit de vous assurer de configurer correctement un ELB pour chaque application.
la source
Le 11 août 2016, Amazon a introduit les équilibreurs de charge d'application . Ceux-ci vous permettent de spécifier plusieurs groupes cibles, chacun avec son propre type de vérification de l'état. C'est donc désormais possible avec un seul équilibreur de charge!
la source