Accelerera Ansible med Mitogen

Ansible blev en av de mest populÀra Konfigurationshanteringssystem. Efter att blev uppköpt av Red Hat 2015 uppgick antalet deltagare i projektet till över tusen och Ansible blev antagligen det mest anvÀnda systemet för distribution och orchestration. Dess breda tillÀmpningar Àr verkligen imponerande.

Ansible arbetar genom SSH-anslutningar till fjÀrrvÀrdar. Den öppnar en SSH-session, loggar in, kopierar koden i Python över nÀtverket och skriver den i en separat temporÀr fil. Efter detta kör den filen pÄ den fjÀrrmaskinen. Hela denna sekvens av operationer Àr ganska lÄngsam och trÄkig, sÄ det finns olika sÀtt att optimera den.

Ett av dessa sÀtt Àr SSH-pipelines som tillÄter att anvÀnda en SSH-session för att köra instruktioner snarare Àn att öppna en ny session varje gÄng, vilket kan spara oss mycket tid. (Glöm bara inte att stÀnga av requiretty instÀllningen för sudo i din /etc/sudoers fil pÄ den fjÀrrmaskinen)

Ett nytt sĂ€tt att 'turba' Ansible Ă€r ett Python-bibliotek som heter Mitogen. Om nĂ„gon inte har hört talas om det – sĂ„ ska jag kort beskriva dess funktionalitet. Det möjliggör snabb körning av Python-kod pĂ„ en fjĂ€rrmaskin och Ansible Ă€r bara ett av exemplen pĂ„ dess anvĂ€ndning. Mitogen anvĂ€nder UNIX-pipe pĂ„ fjĂ€rrmaskinen och överför Python-kod som Ă€r komprimerad med zlib och serialiserad med hjĂ€lp av pickle. Detta gör att den körs snabbare och sparar trafik. Om du Ă€r intresserad av en mer detaljerad förklaring, Ă€r det bĂ€st att lĂ€sa om det pĂ„ sidan «Hur det fungerar». Men idag kommer vi att fokusera pĂ„ hur biblioteket fungerar med Ansible.

Mitogen kan under vissa omstÀndigheter öka hastigheten pÄ din Ansible-kod flera gÄnger och avsevÀrt minska trafikförbrukningen. LÄt oss kolla de mest populÀra exemplen pÄ anvÀndning och se hur mycket det hjÀlper oss.

Jag anvĂ€nder mest Ansible för: att skapa konfigurationsfiler pĂ„ fjĂ€rrmaskiner, installera paket, kopiera filer till fjĂ€rrmaskiner och tillbaka. Kanske har du andra exempel – skriv dem i kommentarerna.

LÄt oss köra!

Konfigurationen av Mitogen för Ansible Àr vÀldigt enkel:
Installerar Mitogen-biblioteket:

pip install mitogen

Nu finns det tvĂ„ lika sĂ€tt – antingen konfigurera alternativ i konfigurationsfilen ansible.cfg, eller stĂ€lla in nödvĂ€ndiga miljövariabler.

Anta att sökvÀgen till den installerade Mitogen kommer att /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. DÄ:

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

eller

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

Installera Ansible i virtualenv, med och utan Mitogen:

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

Observera att Mitogen 0.2.7 inte fungerar med Ansible 2.8 (maj 2019)

Skapa alias:

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

Nu prövar vi att köra playbook som skapar filer pÄ en fjÀrrmaskin:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Skapa filer med copy content-modulen
      copy:
        content: |
          testfil {{ item }}
        dest: ~/file_{{ item }}
      with_sequence: start=1 end={{ n }}

Och vi kör med Mitogen och utan för att skapa 10 filer:

time mitogen-ansible-playbook file_creation.yml -i hosts -e n=10 >&/dev/null

real    0m2.603s
user    0m1.152s
sys     0m0.096s

time pure-ansible-playbook file_creation.yml -i hosts -e n=10 >&/dev/null

real    0m5.908s
user    0m1.745s
sys     0m0.643s

Vi ser en förbĂ€ttring med 2 gĂ„nger. LĂ„t oss kontrollera för 20, 30, 
, 100 filer:

time pure-ansible-playbook file_creation.yml -i hosts -e n=100 >&/dev/null

real    0m51.775s
user    0m8.039s
sys     0m6.305s

time mitogen-ansible-playbook file_creation.yml -i hosts -e n=100 >&/dev/null

real    0m4.331s
user    0m1.903s
sys     0m0.197s

I slutÀndan har vi ökat hastigheten med mer Àn 10 gÄnger!
Nu prövar vi olika scenarier och ser hur mycket snabbare allt fungerar:

  • Scenario för att kopiera filer till en fjĂ€rrvĂ€rd frĂ„n lokal (med modulen copy):
    Accelerera Ansible med Mitogen

  • Scenario för att skapa filer pĂ„ fjĂ€rrvĂ€rden med copy modulen:
    Accelerera Ansible med Mitogen

  • Scenario med nedladdning av filer frĂ„n fjĂ€rrvĂ€rd till lokal:
    Accelerera Ansible med Mitogen

LÄt oss prova ett scenario med flera (3) fjÀrrmaskiner, till exempel ett scenario för att kopiera filer till en fjÀrrvÀrd:
Accelerera Ansible med Mitogen

Som vi ser sparar Mitogen bÄde tid och trafik i dessa scenarier. Men om "flaskhalsen" inte ligger i Ansible, utan exempelvis i I/O frÄn disken eller nÀtverket, eller nÄgon annanstans, Àr det svÄrt att förvÀnta sig att Mitogen hjÀlper oss.

LÄt oss pröva ett scenario för att installera paket med yum/dnf och Python-moduler med pip. Paketen har cachats för att inte bero pÄ nÀtverksproblem:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Installera paket
      become: true
      package:
        name:
          - samba
          - httpd
          - nano
          - ruby
        state: present

    - name: Installera pip-moduler
      become: true
      pip:
        name:
          - pytest-split-tests
          - bottle
          - pep8
          - flask
        state: present

Med Mitogen tog detta 12 sekunder, precis som utan.
PÄ sidan Mitogen för Ansible-sidan Du kan titta pÄ andra benchmarkingtester. Som anges pÄ sidan:

Mitogen kan inte snabba upp modulen nÀr den körs. Den kan bara göra körningen av denna modul sÄ snabb som möjligt.

DÀrför Àr det viktigt att hitta dina flaskhalsar i distributionen, och om de beror pÄ Ansible, kan Mitogen hjÀlpa dig att lösa dem och avsevÀrt öka hastigheten pÄ körningen av dina playbooks.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster