Dépannage des problèmes de serveur back-end d'équilibreur de charge
En savoir plus sur les problèmes de serveur back-end associés aux équilibreurs de charge.
Débogage d'une expiration de serveur back-end
Si le serveur back-end dépasse le temps imparti pour répondre à une demande, une erreur 504 est générée. Elle indique que le serveur back-end est arrêté 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
.
Les erreurs peuvent se produire pour les raisons suivantes :
- L'équilibreur de charge n'a pas pu établir de connexion avec le serveur back-end avant que le délai de connexion n'expire.
- L'équilibreur de charge a établi une connexion avec le serveur back-end, mais le back-end n'a pas répondu avant le délai d'inactivité n'expire.
- Les listes de sécurité ou les groupes d'interface réseau virtuelle du sous-réseau n'ont pas autorisé le trafic des back-ends vers l'équilibreur de charge.
- Le serveur back-end ou le serveur d'applications a échoué.
Pour résoudre les erreurs d'expiration du serveur back-end, procédez comme suit :
- Exécutez l'utilitaire
curl
pour tester directement le serveur back-end à partir d'un hôte du même réseau.curl -i http://backend_ip_address
Si le test met plus d'une seconde à répondre, un problème au niveau de l'application provoque une latence. Nous vous recommandons de vérifier les dépendances en amont pouvant entraîner une latence, notamment :- Stockage attaché à un réseau, tel qu'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 back-end. Consultez ses journaux d'accès pour déterminer si l'application est accessible et fonctionne correctement.
- Si l'équilibreur de charge et le serveur back-end se trouvent dans des sous-réseaux différents, vérifiez que les listes de sécurité contiennent des règles autorisant le trafic. S'il n'existe aucune règle, le trafic n'est donc pas autorisé.
- Entrez les commandes suivantes pour déterminer si des règles de pare-feu existent sur les serveurs back-end qui bloquent le trafic :
iptables -L
répertorie toutes les règles de pare-feu appliquées pariptables
.sudo firewall-cmd --list-all
répertorie 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 back-end est à l'origine de la latence.
Test des serveurs back-end TCP et HTTP
Cette rubrique explique comment dépanner une connexion d'é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 back-end 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. (Reportez-vous à Détails des journaux d'équilibreur de charge.)
En plus de l'utilisation de la journalisation Oracle Cloud Infrastructure, vous pouvez toutefois utiliser d'autres utilitaires répertoriés dans cette section pour résoudre le problème du trafic traité par l'équilibreur de charge et envoyé à un serveur back-end. Pour effectuer ces tests, nous vous recommandons de créer une instance dans le même réseau que l'équilibreur de charge et d'autoriser le trafic dans des groupes de sécurité réseau et des listes de sécurité identiques. Utilisez les outils suivants pour résoudre les problèmes :
- commande d'achatAvant d'employer les utilitaires plus avancés répertoriés ici, nous vous recommandons d'effectuer un test
ping
de base. Pour que ce test réussisse, vous devez autoriser les trafics ICMP entre l'instance de test et le serveur back-end.$ ping backend_ip_address
La réponse doit ressembler à ce qui 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 du type "64 bytes from...", la commande ping a réussi.
Si le système reçoit un message du type "Hôte de destination inaccessible", le système n'existe plus.
L'absence de message indique que le système existe, mais qu'il n'est pas autorisé. Vérifiez l'ensemble des pare-feu, des listes de sécurité et des groupes de sécurité réseau pour vous assurer que le protocole ICMP est autorisé.
- courbure
Exécutez l'utilitaire
curl
pour envoyer des demandes HTTP à un hôte, à un port ou à une URL spécifique.-
Dans l'exemple suivant, où
curl
est utilisée pour la connexion à un serveur back-end qui envoie une erreur403 Forbidden
, cette erreur est renvoyée :$ 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'intégrité échoue, renvoyant une erreur
403
, ce qui indique que les droits d'accès au fichier local du serveur back-end n'ont pas été configurés correctement pour la page Vérification de l'intégrité. - Dans l'exemple suivant, où
curl
est utilisée pour la connexion à un serveur back-end qui envoie une erreur404 Not Found
, cette erreur est renvoyée :$ 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 en renvoyant une erreur
404
, ce qui indique que la page Vérification de l'état n'existe pas à l'emplacement attendu. - Dans l'exemple suivant, un serveur back-end existe et un groupe de sécurité réseau, des listes de sécurités 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 back-end qui n'existe pas :
$ curl -I backend_ip_address curl: (7) Failed connect to backend_ip_address:port; No route to host
-
- Netcat
Netcat est un utilitaire de fonctions de réseau qui permet de lire à partir de connexions réseau et d'écrire sur ces connexions réseau via TCP ou UDP.
- Dans l'exemple suivant, l'utilitaire
netcat
est exécuté au niveau TCP pour vérifier que le serveur back-end 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, le
port
est ouvert pour les connexions. -
$ nc -vn backend_ip_address port Ncat: Connection timed out.
Dans l'exemple précédent, le
port
est fermé.
- Dans l'exemple suivant, l'utilitaire
- Modèle de données
Utilisez l'utilitaire
tcpdump
pour capturer l'ensemble du trafic vers un serveur back-end afin d'assurer quel trafic provient d'un équilibreur de charge et ce qui est renvoyé à cet équilibreur.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
Lors de la résolution des problèmes SSL entre l'instance d'équilibreur de charge et les serveurs back-end, nous vous recommandons d'utiliser l'utilitaire
openssl
. Cet utilitaire ouvre une connexion SSL vers un port et un nom d'hôte spécifiques, et imprime le certificat SSL et d'autres paramètres.Voici d'autres options de résolution des problèmes :
-showcerts
Cette option imprime tous les certificats de la chaîne de certificat présentée par le serveur back-end. 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 les serveurs à utiliser un mécanisme de cryptage spécifique, et permet d'exclure l'autorisation de cryptages spécifiques par le back-end.
- Netstat
Utilisez la commande
netstat -natp
pour vous assurer que l'application en cours d'exécution sur le serveur back-end est en fonctionnement. Pour les trafic TCP ou HTTP, l'application back-end, l'adresse IP et les ports doivent tous être en mode d'écoute. Si le port d'application sur le serveur backend n'est pas en mode d'écoute, le port TCP de l'application n'est pas en fonctionnement.Pour résoudre ce problème, assurez-vous que l'application est en fonctionnement en redémarrant l'application ou le serveur back-end.