Ich habe vom Projekt Feedback erhalten, dass der Kunde bei der Bereitstellung des Produkts mit den von uns bereitgestellten Tools auf Schwierigkeiten gestoßen ist und beim Host-Hinzufügen auf Probleme gestoßen ist, die das Implementierungsteam daran gehindert haben, die Arbeit weiter voranzutreiben, und haben uns daher um Hilfe gebeten.
Umweltinformationen: kylin10
Architektur: Arm
Während des Systembereitstellungsprozesses haben wir Ansible-Skripte für Batch-Vorgänge auf Hosts verwendet. Kürzlich bin ich auf ein Problem gestoßen, bei dem der Ausführungsprozess hängengeblieben ist. Zunächst wurde vermutet, dass Ansible während der Ausführung blockiert wurde. Um dies zu überprüfen, habe ich einen Befehl zum Testen an das Feld gesendet.
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
Natürlich hat es mehr als 2 Minuten gedauert, einen einfachen Ansible-Befehl in der Umgebung auszuführen, bevor das Ergebnis zurückgegeben wurde. Die Ursache des Problems liegt hier und wir haben eine allgemeine Richtung.
Ansible ist während der tatsächlichen Ausführung immer noch auf eine SSH-Remote-Verbindung angewiesen. Es wird zunächst spekuliert, dass die Ausführungsrückgabegeschwindigkeit aufgrund der langsamen SSH-Verbindungsgeschwindigkeit langsam sein könnte.
Überprüfen Sie die SSH-Parameter und die /etc/ssh/sshd_config-Konfiguration
GSSAPIAuthentication no #关闭SERVER上的GSS认证
Unter Linux ist die umgekehrte DNS-Auflösung von SSH standardmäßig aktiviert. Dies nimmt viel Zeit in Anspruch und muss daher deaktiviert werden. In der Konfigurationsdatei ist UseDNS zwar mit „Ja“ kommentiert, der Standardschalter ist jedoch „Ja“
UseDNS=no #关闭SERVER上DNS反向解析
Es stellt sich heraus, dass die beiden SSH-Parameterkonfigurationen im Projekt mit den oben genannten übereinstimmen und der manuelle Test der SSH-Anmeldung beim Peer-Host sehr schnell ist
Ich habe keine Ahnung, daher kann ich nur den Linux-Befehl strace verwenden, um Systemaufrufe zu verfolgen
Beim Blick auf das Strace-Protokoll haben wir festgestellt, dass es eine große Anzahl ausgewählter Wartezeiten gibt, die bei der Ausführung eines bestimmten Vorgangs für eine lange Zeit blockiert werden sollten.
Debuggen mit Ansible
ansible all -i "192.168.2.84, -m shell -a 'date' --l become --become-method=sudo --become-user=root -u test -vvv
Fügen Sie -vvv nach dem Befehl hinzu, um den detaillierten Ausführungsprozess anzuzeigen
Aus den Debug-Informationen können wir den Fehler „mux_client_read_packet: Header lesen fehlgeschlagen: Broken Pipe“ erkennen. An der Stelle, an der das Skript ausgeführt wird, können wir sehen, dass Ansible mit Python zusammenhängt Ausführung?
Ich habe die Informationen online überprüft und festgestellt, dass es Kompatibilitätsprobleme zwischen Ansible und Python gibt.
Ich habe also die Python-Version überprüft. Ich kann sehen, dass die Standardversion von Python Python2 ist, aber es gibt auch Python3 auf dem System. Versuchen Sie, den Softlink zur Überprüfung auf Python3.7 zu ändern
Führen Sie den Ansible-Befehl erneut aus
Die Ausführungszeit beträgt 1,3 Sekunden. Es scheint, dass die Kompatibilität von Ansible- und Python-Versionen dieses Problem verursacht hat.
Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem der langsamen Ausführungsgeschwindigkeit von Ansible. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!