Intelligente Lösungen
in neuer Dimension

Ansible: Mitogen

Ansible läuft richtig langsam. Wir untersuchen Wege, die Ausführung zu beschleunigen und landen letzten Endes bei Mitogen.

Ausgangslage

Wir prüfen die Ausführungszeit für den Ansible-Lauf von “dprepo”. Durchgeführt wird dieser mittels time ansible-playbook site.yml -l ppnproxy --check --diff:

Methode T1 T2 T3 T4 T5
Standard-Ansible 73s 72s 71s 71s 71s |

Aktivieren von Pipelining

Pipelining aktivieren wie via “ansible.cfg”:

1
2
3
4
5
6
7
8
9
index 72a6545..21be01f 100644
--- a/ansible.cfg
+++ b/ansible.cfg
@@ -1,2 +1,5 @@
 [defaults]
 inventory       = inventory.yml
+
+[ssh_connection]
+pipelining      = yes

Ausführungzeiten:

Methode T1 T2 T3 T4 T5
Standard-Ansible 73s 72s 71s 71s 71s |
Pipelining 30s 30s 31s 28s 28s |

Persistent Connections

Aktivieren von “persistent_connection” via “ansible.cfg” bringt keinerlei zusätzlichen Vorteil:

1
2
3
4
5
6
7
8
9
10
11
diff --git a/ansible.cfg b/ansible.cfg
index 21be01f..d78a041 100644
--- a/ansible.cfg
+++ b/ansible.cfg
@@ -3,3 +3,6 @@ inventory       = inventory.yml

 [ssh_connection]
 pipelining      = yes
+
+[persistent_connection]
+command_timeout = 10

Hier die Ausführungszeiten:

Methode T1 T2 T3 T4 T5
Standard-Ansible 73s 72s 71s 71s 71s |
Pipelining 30s 30s 31s 28s 28s |
Persistent Connection 31s 29s 28s 28s 28s |

Wir bauen das wieder zurück!

ControlMaster und ControlPersist

Manchmal findet man den Tipp, die SSH-Argumente … zu setzen:

1
2
3
4
5
6
7
8
9
diff --git a/ansible.cfg b/ansible.cfg
index 21be01f..4501e9f 100644
--- a/ansible.cfg
+++ b/ansible.cfg
@@ -3,3 +3,4 @@ inventory       = inventory.yml

 [ssh_connection]
 pipelining      = yes
+ssh_args = -o ControlMaster=auto -o ControlPersist=60s

Bei uns hilft das nicht:

Methode T1 T2 T3 T4 T5
Standard-Ansible 73s 72s 71s 71s 71s |
Pipelining 30s 30s 31s 28s 28s |
Persistent Connection 31s 29s 28s 28s 28s |
ControlMaster und ControlPersist 29s 29s 28s 29s 28s |

Wir bauen das wieder zurück!

Mitogen

Mitogen spielen wir so ein:

  • Master runterladen von Github
  • Master auspacken –> mitogen-master

Danach: ansible.cfg anpassen:

1
2
3
4
5
6
7
8
9
iff --git a/ansible.cfg b/ansible.cfg
index 21be01f..ba4c93c 100644
--- a/ansible.cfg
+++ b/ansible.cfg
@@ -1,5 +1,7 @@
 [defaults]
 inventory       = inventory.yml
+#strategy_plugins = mitogen-master/ansible_mitogen/plugins/strategy
+#strategy = mitogen_linear

Ausführungszeiten:

Methode T1 T2 T3 T4 T5
Standard-Ansible 73s 72s 71s 71s 71s |
Pipelining 30s 30s 31s 28s 28s |
Persistent Connection 31s 29s 28s 28s 28s |
ControlMaster und ControlPersist 29s 29s 28s 29s 28s |
Mitogen (master-20200606) 18s 18s 18s 19s 18s |

Probleme

mitogen-0.2.9 funktioniert nicht mit Ubuntu-20.04 – /usr/bin/python: No such file or directory

Die aktuell veröffentlichte Version 0.2.9 von Mitogen funktioniert nicht mit Ubuntu-20.04. Es erscheint diese Fehlermeldung:

1
2
3
4
5
6
fatal: [ppnproxy]: UNREACHABLE!
  => {
      "changed": false,
      "msg": "EOF on stream; last 100 lines received:\nbash: /usr/bin/python: No such file or directory",
      "unreachable": true
    }

Abhilfe: Mitogen-Master verwenden! Eine neue Version von Mitogen mit der für Ubuntu-20.04 notwendigen Korrektur ist erst mit dem Erscheinen von Ansible-2.10 geplant!

Änderungen

  • 2020-06-06: Erste Version