Un contrôle d'état Network Load Balancer (NLB) vérifie que vos serveurs backend fonctionnent correctement. Un échec de contrôle d'état indique généralement un problème au niveau d'un serveur backend. Toutefois, des paramètres de contrôle d'état incorrects ou des configurations de serveur backend inadaptées peuvent également provoquer des échecs. Cette rubrique explique comment résoudre les problèmes liés aux échecs de contrôle d'état NLB.
Symptômes
Le statut Health Check Status d'un écouteur d'une instance NLB est défini sur Unhealthy.
Causes
Si un contrôle d'état échoue juste après sa configuration initiale, commencez par vérifier la configuration du contrôle d'état. L'échec peut être dû à l'une des raisons suivantes :
Paramètres de contrôle d'état incorrects
Problèmes liés au port de l'écouteur
Si un contrôle d'état échoue après avoir fonctionné correctement, commencez par vérifier les serveurs backend. L'échec peut être dû à l'une des raisons suivantes :
Problèmes liés aux logiciels de sécurité
Configuration de routage incorrecte
Charge élevée du serveur backend
Limite de connexions atteinte sur le serveur backend
Solutions
Les contrôles d'état échouent après la configuration initiale
Cause 1 : Paramètres de contrôle d'état incorrects
Connectez-vous à la console NLB.
Dans la barre de navigation supérieure, sélectionnez la région dans laquelle l'instance NLB est déployée.
Dans le volet de navigation de gauche, choisissez NLB > Server Groups.
Sur la page Server Groups, localisez le groupe de serveurs associé à l'instance NLB cible, puis cliquez sur Modify Health Check Settings.
Dans la boîte de dialogue Modify Health Check Settings, vérifiez que les paramètres de contrôle d'état sont corrects. Il est recommandé d'utiliser les paramètres par défaut.
Cause 2 : Problèmes liés au port de l'écouteur
1. Vérifiez le port de contrôle d'état.
Connectez-vous à la console NLB.
Dans la barre de navigation supérieure, sélectionnez la région dans laquelle l'instance NLB est déployée.
Dans le volet de navigation de gauche, choisissez NLB > Server Groups.
Sur la page Server Groups, recherchez le groupe de serveurs attaché à l'instance NLB cible, puis cliquez sur l'ID du groupe de serveurs.
Sur la page des détails du groupe de serveurs, cliquez sur l'onglet Backend Servers pour afficher et noter les ports des serveurs backend.
Sur la page des détails du groupe de serveurs, cliquez sur l'onglet Details. Dans la section Health Check, cliquez sur Modify Health Check Settings. Dans la boîte de dialogue Modify Health Check Settings, affichez et notez les paramètres de contrôle d'état.
Écouteur TCP
-
Connectez-vous au serveur backend et exécutez la commande suivante pour tester la connexion au port de contrôle d'état.
Pour savoir comment vous connecter à un serveur backend, consultez la rubrique Connexion à une instance ECS.
telnet [$IP] [$Port]Remarque[$IP]correspond à l'adresse IP privée du serveur backend.[$Port]correspond au port de sonde pour le contrôle d'état du groupe de serveurs. Par défaut, il s'agit du port du serveur backend. Si un port de contrôle d'état spécifique est configuré, ce port est utilisé à la place.
-
Vérifiez la sortie de la commande.
Une réponse similaire à « telnet: connect to address [$IP]: Connection refused » indique que la connexion a été refusée et que le port de contrôle d'état n'est pas sain.
Trying xxx.xxx.xxx.xxx... telnet: connect to address xxx.xxx.xxx.xxx: Connection refusedUne réponse similaire à « Connected to [$IP] » indique que le port de contrôle d'état écoute correctement.
Trying 1xxx... Connected to 1xxx.
Écouteur UDP
-
Connectez-vous au serveur backend et exécutez la commande suivante pour vérifier l'état du port de contrôle d'état.
Pour savoir comment vous connecter à un serveur backend, consultez la rubrique Connexion à une instance ECS.
netstat -anu | grep [$IP]:[$Port]Remarque[$IP]correspond à l'adresse IP privée du serveur backend.[$Port]correspond au port de sonde pour le contrôle d'état du groupe de serveurs. Par défaut, il s'agit du port du serveur backend. Si un port de contrôle d'état spécifique est configuré, ce port est utilisé à la place.
-
Vérifiez la sortie de la commande.
Si aucune entrée pour
[$IP]:[$Port]n'est renvoyée, le port de contrôle d'état n'est pas sain.[rxxxxx xjZ ~]# netstat -anu | grep 192.168 :53 [xxxxx pxjZ ~]#Si une entrée pour
[$IP]:[$Port]est renvoyée, le port de contrôle d'état écoute correctement.[rxxx ~]# netstat -anu | grep 192.168.xxx.xxx:53 udp 0 0 192.168.xxx.xxx:53 0.0.0.0:*
2. Vérifiez que l'application s'exécute sur le serveur backend et utilise le bon port de contrôle d'état. Cette section utilise un service Nginx comme exemple.
-
Connectez-vous au serveur backend dont l'état est unhealthy et exécutez la commande suivante pour vérifier l'état du service Nginx.
systemctl status nginx -
Une réponse similaire à la suivante indique que le service ne s'exécute pas.
● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: inactive (dead) -
Exécutez la commande suivante pour démarrer le service Nginx.
systemctl start nginx -
Exécutez à nouveau la commande suivante pour vérifier l'état du service Nginx.
systemctl status nginxUne réponse similaire à la suivante indique que le service est en cours d'exécution.
● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: active (running) since Mon xxx CST; 2h 20min ago -
Connectez-vous à la console Network Load Balancer (NLB) et effectuez les étapes suivantes.
Dans le volet de navigation de gauche, choisissez .
Sur la page Server Groups, localisez le groupe de serveurs cible et cliquez sur Modify Health Check Settings dans la colonne Actions.
Dans la boîte de dialogue Modify Health Check Settings, vérifiez le port de contrôle d'état
[$Port]. Confirmez que l'option Health Check est activée, que le protocole Health Check Protocol est TCP et que le port Health Check Port est 80.-
Vérifiez l'état du contrôle d'état. S'il est toujours unhealthy, exécutez la commande suivante pour vérifier le port d'écoute du service Nginx.
netstat -tanp |grep nginx
-
Si la sortie est similaire à la suivante, le port d'écoute ne correspond pas à la valeur
[$Port].tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 22855/nginx: master tcp6 0 0 :::81 :::* LISTEN 22855/nginx: masterModifiez le fichier
/etc/nginx/nginx.conf. Recherchez et modifiez la valeurlistenpour la définir sur[$Port], puis enregistrez et quittez.RemarqueSi vous ne pouvez pas modifier la valeur
listenen raison de votre cas d'utilisation, vous pouvez modifier le port de contrôle d'état pour le protocole correspondant. Pour plus d'informations, consultez la rubrique Écouteurs NLB.server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; } -
Exécutez la commande suivante pour redémarrer le service Nginx. Après un court instant, confirmez que le contrôle d'état est normal.
systemctl restart nginx
Les contrôles d'état échouent après avoir fonctionné correctement
Cause 1 : Problèmes liés aux logiciels de sécurité
L'instance NLB utilise un bloc CIDR VPC pour communiquer avec les serveurs backend. Les logiciels de sécurité installés sur vos serveurs backend, tels qu'iptables ou tout autre logiciel de politique de sécurité tiers, ne doivent pas bloquer le trafic provenant de ce bloc CIDR. Le blocage du trafic entraîne des échecs de contrôle d'état et empêche le bon fonctionnement de NLB. Cette section utilise iptables comme exemple pour vérifier les plages d'adresses IP privées bloquées.
-
Connectez-vous à la console Network Load Balancer (NLB) et affichez l'adresse IP locale que l'instance NLB utilise pour communiquer avec les serveurs backend.
Dans la liste des instances, localisez l'instance cible et affichez l'adresse IP dans la colonne Local IP, par exemple 192.168.20.75.
-
Connectez-vous à l'instance de serveur backend dont l'état est unhealthy et exécutez la commande suivante pour afficher toutes les règles de la table de filtrage.
iptables -nLUne réponse similaire à la suivante indique que le serveur backend refuse les requêtes provenant de l'adresse IP locale de l'instance NLB.
# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 192.168.20.75 0.0.0.0/0 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination -
Exécutez la commande suivante pour supprimer cette règle.
iptables -t filter -D INPUT -s 192.168.20.75 -j DROP # The IP address is for demonstration purposes only.RemarqueRemplacez l'adresse IP dans la commande par l'adresse IP privée utilisée par votre instance NLB.
-
Exécutez la commande suivante pour confirmer que les requêtes provenant de la plage d'adresses IP privées NLB ne sont plus bloquées.
iptables -nL Confirmez que le statut Health Check Status de l'écouteur NLB passe à Healthy.
Cause 2 : Configuration de routage incorrecte
Une route incorrecte sur le serveur backend pour le bloc CIDR VPC utilisé par l'instance NLB peut empêcher l'instance NLB de recevoir les sondes de contrôle d'état, ce qui provoque des échecs. Cette section utilise la commande Linux route comme exemple pour vérifier la configuration de routage.
Connectez-vous à la console Network Load Balancer (NLB) et affichez l'adresse IP locale que l'instance NLB utilise pour communiquer avec les serveurs backend.
-
Connectez-vous au serveur backend dont l'état est unhealthy et exécutez la commande suivante pour vérifier la configuration de routage actuelle.
route -nLa configuration de routage est incorrecte si une entrée de route existe où la destination est l'adresse IP locale de l'instance NLB, le masque de sous-réseau (Genmask) est 255.255.255.255 et la passerelle (Gateway) n'est pas la passerelle par défaut de l'interface réseau. La passerelle par défaut est l'adresse IP répertoriée dans la colonne Gateway lorsque la destination est 0.0.0.0.
Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 xxx 0.0.0.0 UG 0 0 0 eth0 xxx 0.0.0 255.255.0.0 U 1002 0 0 xxx 192.168.20.75 0.0.0.0 255.255.255.255 UH 0 0 0 * -
Exécutez la commande suivante pour supprimer la route incorrecte.
ip route del blackhole 192.168.20.75 # The IP address is for demonstration purposes only.RemarqueRemplacez l'adresse IP dans la commande par l'adresse IP privée utilisée par votre instance NLB.
Confirmez que le statut Health Check Status de l'écouteur NLB passe à Healthy.
Cause 3 : Charge élevée du serveur backend
Consultez la rubrique Dépannage et résolution des problèmes de charge élevée sur les instances Linux pour déterminer si une charge serveur élevée est à l'origine de l'échec.
Cause 4 : Limite de connexions atteinte sur le serveur backend
Lorsqu'un serveur backend (tel qu'un pod ACS) atteint sa limite de connexions TCP, il ne peut plus accepter de nouvelles connexions. Si NLB est configuré avec des contrôles d'état TCP, la sonde de contrôle d'état échoue car le backend ne peut pas accepter la nouvelle connexion, et NLB marque automatiquement le backend comme Unhealthy.
Un backend Unhealthy ne reçoit pas de nouvelles connexions. Les connexions persistantes existantes ne sont pas affectées et continuent de fonctionner normalement.
Ce comportement déclenche des alertes Unhealthy. Configurez des alertes de seuil de nombre de connexions dans Cloud Monitor pour recevoir un avertissement préalable avant d'atteindre la limite de connexions.
Lorsque le backend récupère et peut à nouveau accepter de nouvelles connexions, les contrôles d'état réussissent automatiquement et NLB marque à nouveau le backend comme Healthy, reprenant ainsi le transfert des nouvelles connexions.
NLB ne dispose pas de fonctionnalité intégrée pour limiter le transfert de connexions en fonction du nombre de connexions. L'utilisation des contrôles d'état à cette fin constitue un mécanisme indirect. Cette approche s'applique lorsque la limite de connexions d'un backend empêche le port d'accepter de nouvelles connexions.
Références
Vous pouvez également utiliser la fonctionnalité de diagnostic des instances NLB pour résoudre les problèmes d'échec de contrôle d'état NLB. Pour plus d'informations, consultez la rubrique Diagnostic des instances NLB.