Dépannage des problèmes de serveur dorsal d'équilibreur de charge
Découvrez les problèmes de serveur dorsal associés aux équilibreurs de charge.
Débogage d'une temporisation de serveur dorsal
Lorsque le serveur dorsal dépasse le temps imparti pour répondre à une demande, une erreur 504 est générée, indiquant que le serveur dorsal est en panne ou ne répond pas à la demande transmise par l'équilibreur de charge. L'application client reçoit le code de réponse suivant : HTTP/1.1 504 Gateway Timeout
.
Des erreurs peuvent survenir pour les raisons suivantes :
- L'équilibreur de charge n'a pas pu établir de connexion au serveur dorsal avant l'expiration de la temporisation de connexion.
- L'équilibreur de charge a établi une connexion au serveur dorsal mais celui-ci n'a pas répondu avant la fin du temps d'arrêt.
- Les listes de sécurité ou les groupes de sécurité de réseau du sous-réseau ou de la carte VNIC n'ont pas permis le trafic des serveurs dorsaux vers l'équilibreur de charge.
- Le serveur dorsal ou le serveur d'applications a échoué.
Pour dépanner les erreurs de temporisation du serveur dorsal, procédez de la façon suivante :
- Utilisez l'utilitaire
curl
pour tester directement le serveur dorsal à partir d'un hôte du même réseau.curl -i http://backend_ip_address
Si le temps de réponse a ce test est supérieur à une seconde, un problème d'application provoque une latence. Nous vous recommandons de vérifier les dépendances en amont qui pourraient être à l'origine de cette latence, notamment :- Stockage attaché au réseau tel que iSCSI ou NFS
- Latence de base de données
- API hors site
- Niveau d'application
- Vérifiez l'application en y accédant directement à partir du serveur dorsal. Consultez les journaux d'accès de l'application pour déterminer si celle-ci est accessible et fonctionne correctement.
- Si l'équilibreur de charge et le serveur dorsal se trouvent dans des sous-réseaux différents, vérifiez si les listes de sécurité contiennent des règles autorisant le trafic. S'il n'existe aucune règle, le trafic n'est pas autorisé.
- Entrez les commandes suivantes pour déterminer si des règles de pare-feu qui bloquent le trafic existent sur les serveurs dorsaux :
La commande
iptables -L
liste toutes les règles de pare-feu appliquées pariptables
La commande
sudo firewall-cmd --list-all
liste toutes les règles de pare-feu appliquées parfirewalld
- Activez la journalisation sur l'équilibreur de charge pour déterminer si l'équilibreur de charge ou le serveur dorsal est à l'origine de la latence.
Test des serveurs dorsaux TCP et HTTP
Cette rubrique décrit comment dépanner une connexion à l'équilibreur de charge. La topologie utilisée dans cette procédure comporte un équilibreur de charge public dans un sous-réseau public. Les serveurs dorsaux se trouvent dans le même sous-réseau.
Nous vous recommandons d'utiliser le service Oracle Cloud Infrastructure Logging pour résoudre les problèmes. (Voir Informations détaillées sur les journaux de l'équilibreur de charge.)
Toutefois, en plus de l'utilisation de la journalisation d'Oracle Cloud Infrastructure, vous pouvez utiliser d'autres utilitaires listés dans cette section pour dépanner le trafic traité par l'équilibreur de charge et envoyé à un serveur dorsal. Pour effectuer ces tests, nous vous recommandons de créer une instance dans le même réseau que votre équilibreur de charge et d'autoriser le trafic dans les mêmes groupes de sécurité de réseau et listes de sécurité. Utilisez les outils suivants pour effectuer le dépannage :
- pingAvant d'utiliser les utilitaires plus avancés listés ici, nous vous recommandons d'effectuer un test
ping
de base. Pour que ce test réussisse, vous devez autoriser le trafic ICMP entre l'instance de test et le serveur dorsal.$ ping backend_ip_address
La réponse doit se présenter comme suit :PING 192.0.2.2 (192.0.2.2) 56(84) bytes of data. 64 bytes from 192.0.2.2: icmp_seq=1 ttl=64 time=0.028 ms 64 bytes from 192.0.2.2: icmp_seq=2 ttl=64 time=0.044 ms
Si vous recevez un message contenant "64 octets de...", le test ping a réussi.
La réception d'un message contenant "Hôte de destination inaccessible" indique que le système n'existe pas.
La réception d'aucun message indique que le système existe mais que le protocole ICMP n'est pas autorisé. Vérifiez l'ensemble des pare-feu, listes de sécurité et groupes de sécurité de réseau pour vous assurer qu'ICMP est autorisé.
- curl
Utilisez l'utilitaire
curl
pour envoyer des demandes HTTP à un hôte, un port ou une URL spécifique.-
L'exemple suivant illustre l'utilisation de
curl
pour la connexion à un serveur dorsal qui envoie une erreur403 Forbidden
:$ curl -I http://backend_ip_address/health HTTP/1.1 403 Forbidden Date: Tue, 17 Mar 2021 17:47:10 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 3539 Connection: keep-alive Last-Modified: Tue, 10 Mar 2021 20:33:28 GMT ETag: "dd3-5b3c6975e7600" Accept-Ranges: bytes
Dans l'exemple précédent, la vérification de l'état échoue et retourne une erreur
403
, indiquant que les autorisations de fichier local ne sont pas configurées correctement sur le serveur dorsal pour la page Vérification de l'état. - L'exemple suivant illustre l'utilisation de
curl
pour la connexion à un serveur dorsal qui envoie une erreur404 Not Found
:$ curl -I http://backend_ip_address/health HTTP/1.1 404 Not Found Date: Tue, 17 Mar 2021 17:47:10 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 3539 Connection: keep-alive Last-Modified: Tue, 10 Mar 2021 20:33:28 GMT ETag: "dd3-5b3c6975e7600" Accept-Ranges: bytes
Dans l'exemple précédent, la vérification de l'état échoue et retourne une erreur
404
, indiquant que la page Vérification de l'état n'existe pas à l'emplacement attendu. - Dans l'exemple suivant, un serveur dorsal existe et un groupe de sécurité de réseau, les listes de sécurité ou un pare-feu local bloquent le trafic :
$ curl -I backend_ip_address curl: (7) Failed connect to backend_ip_address:port; Connection refused
- L'exemple suivant montre un serveur dorsal qui n'existe pas :
$ curl -I backend_ip_address curl: (7) Failed connect to backend_ip_address:port; No route to host
-
- Catégorie nette
Netcat est un utilitaire de réseau permettant la lecture et l'écriture de connexions réseau à l'aide de TCP ou UDP.
- L'exemple suivant illustre l'utilisation de l'utilitaire
netcat
au niveau TCP pour garantir que le serveur dorsal de destination peut recevoir une connexion :$ nc -vz backend_ip_address port Ncat: Connected to backend_ip_address:port.
Dans l'exemple précédent,
port
est ouvert pour les connexions. -
$ nc -vn backend_ip_address port Ncat: Connection timed out.
Dans l'exemple précédent,
port
est fermé.
- L'exemple suivant illustre l'utilisation de l'utilitaire
- Tcpdump
Utilisez l'utilitaire
tcpdump
pour saisir tout le trafic vers un serveur dorsal afin d'identifier quel trafic provient d'un équilibreur de charge et ce qui est retourné à l'équilibreur de charge.sudo tcpdump -i any -A port port src load_balancer_ip_address 11:25:54.799014 IP 192.0.2.224.39224 > 192.0.2.224.80: Flags [P.], seq 1458768667:1458770008, ack 2440130792, win 704, options [nop,nop,TS val 461552632 ecr 208900561], length 1341: HTTP: POST /health HTTP/1.1
- OpenSSL
Pour résoudre les problèmes SSL entre l'instance d'équilibreur de charge et les serveurs dorsaux, il est recommandé d'utiliser l'utilitaire
openssl
. Cet utilitaire ouvre une connexion SSL à un nom d'hôte et à un port spécifiques, et affiche le certificat SSL et d'autres paramètres.Les autres options de dépannage des problèmes sont les suivantes :
-showcerts
Cette option affiche tous les certificats de la chaîne de certificats présentée par le serveur dorsal. Utilisez cette option pour identifier les problèmes, tels qu'un certificat d'autorité de certification intermédiaire manquant.
-cipher cipher_name
Cette option force le client et le serveur à utiliser une suite de chiffrement spécifique et aide à déterminer si le serveur dorsal autorise des chiffrements spécifiques.
- Netstat
Utilisez la commande
netstat -natp
pour vous assurer que l'application s'exécutant sur le serveur dorsal est en cours d'exécution. Pour le trafic TCP ou HTTP, l'application dorsale, l'adresse IP et le port doivent tous être en mode écoute. Si le port de l'application sur le serveur dorsal n'est pas en mode écoute, le port TCP de l'application n'est pas actif.Pour résoudre ce problème, assurez-vous que l'application est en cours d'exécution en redémarrant l'application ou le serveur dorsal.