Beschleunigen Sie Ansible mit Mitogen

Beschleunigen Sie Ansible mit Mitogen!


Russische Version


Ansible ist heutzutage eines der beliebtesten Konfigurationsmanagementsysteme . Nach der Übernahme durch Red Hat im Jahr 2015 hat Ansible eine Anzahl von Tausenden von Mitwirkenden erreicht und ist möglicherweise zu einem der am häufigsten verwendeten Bereitstellungs- und Orchestrierungswerkzeuge geworden. Die Anwendungsfälle sind sehr beeindruckend.


Ansible funktioniert über SSH-Verbindungen zu Remote-Hosts. Es öffnet die SSH-Sitzung, meldet sich bei der Shell an, kopiert Python-Code über das Netzwerk und erstellt mit diesem Code eine temporäre Datei auf Remote-Hosts. Im nächsten Schritt wird die aktuelle Datei mit dem Python-Interpreter ausgeführt. All dieser Workflow ist ziemlich umfangreich und es gibt mehrere Möglichkeiten, ihn schneller und leichter zu machen.


Eine dieser Möglichkeiten ist die Verwendung von SSH-Pipelines, die eine SSH-Sitzung zum Kopieren von Python-Code mehrerer Aufgaben wiederverwenden und das Öffnen mehrerer Sitzungen verhindern, was viel Zeit spart. (Vergessen Sie nur nicht, die requiretty Einstellungen für sudo auf der Remote-Seite in /etc/sudoers zu deaktivieren.)


Der neue Weg, um Ansible zu beschleunigen, ist eine großartige Python-Bibliothek namens Mitogen . Wenn jemand wie ich nicht damit vertraut war, ermöglicht diese Bibliothek die schnelle Ausführung von Python-Code auf einem Remote-Host, und Ansible ist nur einer seiner Fälle. Mitogen verwendet UNIX-Pipes auf Remotecomputern, während "eingelegter" Python-Code übergeben wird, der mit zlib komprimiert wurde. Dies ermöglicht es, es schnell und ohne viel Verkehr auszuführen. Wenn Sie interessiert sind, können Sie Details darüber, wie es funktioniert, auf der Seite "Wie es funktioniert" lesen. Aber wir werden uns heute auf einen Teil von Ansible konzentrieren.


Mitogen kann unter bestimmten Umständen Ihren Ansible in wenigen Schritten beschleunigen und Ihre Bandbreite erheblich verringern. Lassen Sie uns die beliebtesten Anwendungsfälle überprüfen und herausfinden, ob dies für uns hilfreich ist.


Die beliebtesten Anwendungsfälle für die Ausführung von Ansible sind: Erstellen von Konfigurationsdateien auf einem Remote-Host, Paketinstallation, Herunterladen und Hochladen von Dateien von und zu einem Remote-Host. Vielleicht möchten Sie andere Anwendungsfälle überprüfen, bitte hinterlassen Sie Kommentare zu diesem Artikel.


Lass uns anfangen zu rollen!


Das Konfigurieren von Mitogen für Ansible ist ziemlich einfach:
Installieren Sie das Mitogen-Modul:


 pip install mitogen 

Dann entweder Umgebungsvariablen konfigurieren oder Konfigurationsoptionen in der Datei ansible.cfg festlegen, beide Optionen sind in Ordnung:
Nehmen wir an, /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy ist Ihr Pfad zur installierten Mitogen-Bibliothek.


 export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy export ANSIBLE_STRATEGY=mitogen_linear 

oder


 [defaults] strategy = mitogen_linear strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy 



Bereiten Sie Ansible in virtualenv mit und ohne aktiviertem Mitogen vor:


 virtualenv mitogen_ansible ./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen virtualenv pure_ansible ./pure_ansible/bin/pip install ansible==2.7.10 

Bitte beachten Sie, dass Mitogen 0.2.7 nicht mit Ansible 2.8 funktioniert (für Mai 2019)


Erstellen Sie Aliase:


 alias pure-ansible-playbook='$(pwd)/pure_ansible/bin/ansible-playbook' alias mitogen-ansible-playbook='ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy:$(pwd)/mitogen_ansible/lib/python3.7/site-packages/ansible_mitogen/plugins/strategy ANSIBLE_STRATEGY=mitogen_linear $(pwd)/mitogen_ansible/bin/ansible-playbook' 

Probieren wir nun das Playbook aus, mit dem Dateien auf Remote erstellt werden:


 --- - hosts: all gather_facts: false tasks: - name: Create files with copy content module copy: content: | test file {{ item }} dest: ~/file_{{item}} with_sequence: start=1 end={{ n }} 

Und führen Sie es mit und ohne Mitogen aus, während Sie 10 Dateien erstellen:


 time mitogen-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m2.603s user 0m1.152s sys 0m0.096s time pure-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m5.908s user 0m1.745s sys 0m0.643s 

Im Moment sehen wir eine Verbesserung in x2-fachen. Überprüfen wir es auf 20, 30, ..., 100 Dateien:


 time pure-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m51.775s user 0m8.039s sys 0m6.305s time mitogen-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m4.331s user 0m1.903s sys 0m0.197s 

Schließlich haben wir die Ausführungszeit um mehr als das Zehnfache verbessert!


Probieren wir nun verschiedene Szenarien aus und sehen, wie es sich verbessert:


  • Szenario zum Hochladen von Dateien vom lokalen Host auf die Fernbedienung (mit Kopiermodul):
    Dateien hochladen


  • Szenario zum Erstellen von Dateien auf dem Remote-Host mit Kopiermodul:
    Dateien erstellen


  • Szenario mit dem Abrufen von Dateien vom Remote-Host zum lokalen:
    Dateien abrufen



Versuchen wir das letzte Szenario auf einigen (3) Remote-Hosts, zum Beispiel das Szenario zum Hochladen von Dateien:
Hochladen von Dateien auf mehrere Hosts


Wie wir sehen können, spart uns das Mitogen in diesen Szenarien sowohl Zeit als auch Bandbreite. Aber wenn der Engpass nicht Ansible ist, sondern zum Beispiel E / A von Festplatte oder Netzwerk oder irgendwo anders, dann ist es natürlich schwer zu erwarten, dass Mitogen hilft.


Lassen Sie uns zum Beispiel die Paketinstallation mit yum / dnf und die Python-Modulinstallation mit pip ausführen.
Pakete wurden vorgespeichert, um Abhängigkeiten von Netzwerkfehlern zu vermeiden:


 --- - hosts: all gather_facts: false tasks: - name: Install packages become: true package: name: - samba - httpd - nano - ruby state: present - name: Install pip modules become: true pip: name: - pytest-split-tests - bottle - pep8 - flask state: present 

Mit Mitogen dauert es 12 Sekunden, mit reinem Ansible.


Auf der Seite Mitogen for Ansible sehen Sie zusätzliche Benchmarks und Messungen. Wie die Seite erklärt:


Mitogen kann ein Modul nach seiner Ausführung nicht verbessern, sondern nur sicherstellen, dass das Modul so schnell wie möglich ausgeführt wird

Aus diesem Grund ist es wichtig herauszufinden, wo sich Ihre Engpässe befinden, und wenn sie mit Ansible-Vorgängen zusammenhängen, hilft Mitogen Ihnen, diese zu lösen und Ihre Playbooks erheblich zu beschleunigen.

Source: https://habr.com/ru/post/de453446/


All Articles