Nous avons reçu des commentaires du projet selon lesquels le client a rencontré des difficultés lors du déploiement du produit à l'aide des outils que nous avons fournis et a rencontré des problèmes lors de l'étape d'ajout d'hôte, ce qui a empêché l'équipe de mise en œuvre de continuer à faire avancer le travail, ils nous ont donc demandé de l'aide.
Information environnementale : kylin10
Architecture : bras
Pendant le processus de déploiement du système, nous avons utilisé des scripts Ansible pour les opérations par lots sur les hôtes. Récemment, j'ai rencontré le problème du processus d'exécution bloqué. On soupçonne initialement qu'ansible est bloqué pendant l'exécution. Pour vérifier cela, j'ai envoyé une commande sur le terrain pour tester.
localhost$ date 2024年02月19日星期 17:30:41 CST localhost$ ansible all -i "192.168.2.84, -m shell -a 'date' --l become --become-method=sudo --become-user=root -u test 192.168.2.84 CHANGED rc=0 >> 2024年02月19日星期 17:33:34 CST
Effectivement, il a fallu plus de 2 minutes pour exécuter une simple commande ansible sur l'environnement avant de renvoyer le résultat. La cause du problème réside ici, et nous avons une direction générale.
Ansible s'appuie toujours sur la connexion à distance SSH lors de l'exécution réelle. Auparavant, nous avons rencontré une vitesse de connexion SSH lente. Il est initialement supposé que la vitesse de retour d'exécution peut être lente en raison de la vitesse de connexion SSH lente.
Vérifiez les paramètres ssh et vérifiez la configuration /etc/ssh/sshd_config
GSSAPIAuthentication no #关闭SERVER上的GSS认证
Sous Linux, la résolution DNS inversée de SSH est activée par défaut. Cela prend beaucoup de temps, elle doit donc être désactivée. Dans le fichier de configuration, bien que UseDNS yes soit commenté, le commutateur par défaut est yes
UseDNS=no #关闭SERVER上DNS反向解析
Il s'avère que les deux configurations de paramètres ssh sur le projet sont cohérentes avec ce qui précède, et le test manuel de la connexion ssh à l'hôte homologue est très rapide
Je n'en ai aucune idée, je ne peux donc utiliser que la commande Linux strace pour tracer les appels système
En regardant le journal des straces, nous avons constaté qu'il existe un grand nombre d'attentes de sélection, qui devraient être bloquées pendant une longue période lors de l'exécution d'une certaine opération.
Débogage avec ansible
ansible all -i "192.168.2.84, -m shell -a 'date' --l become --become-method=sudo --become-user=root -u test -vvv
Ajoutez -vvv après la commande pour voir le processus d'exécution détaillé
À partir des informations de débogage, vous pouvez voir l'erreur « mux_client_read_packet : read header failed : Broken pipe ». Lors de l'exécution du script, vous pouvez voir que les commandes liées à Python sont en cours d'exécution. ?
J'ai vérifié les informations en ligne et constaté qu'il existe des problèmes de compatibilité entre ansible et python.
Vérifiez donc la version de python, vous pouvez voir que la version par défaut de python est python2, mais il y a aussi python3 sur le système, essayez de modifier le lien logiciel vers python3.7 pour vérifier
Exécutez à nouveau la commande ansible
Le temps d'exécution est de 1,3s. Il semble que la compatibilité des versions ansible et python soit à l'origine de ce problème.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!