Kaip naudoti sudėtingas grojaraščius automatizuojant sudėtingas užduotis keliuose nuotoliniuose serveriuose - 2 dalis


Ankstesniame šios „Ansible“ serijos straipsnyje mes paaiškinome, kad „Ansible“ yra be agentų įrankis, leidžiantis greitai ir efektyviai valdyti kelias mašinas (dar žinomas kaip mazgai - taip pat atlikti jose diegimą) iš vienos sistemos.

Įdiegus programinę įrangą valdiklio mašinoje, sukūrus raktus prisijungimui be slaptažodžio ir nukopijavus juos į mazgus, atėjo laikas išmokti optimizuoti tokių nuotolinių sistemų valdymo procesą naudojant „Ansible“.

Šiame ir kitame straipsnyje naudosime šią bandymo aplinką. Visi kompiuteriai yra „CentOS 7“ dėžutės:

Controller machine (where Ansible is installed): 192.168.0.19
Node1: 192.168.0.29
Node2: 192.168.0.30

Be to, atkreipkite dėmesį, kad abu mazgai buvo pridėti vietinio failo/etc/ansible/hosts žiniatinklio serverių skyriuje:

Tai sakant, pradėkime nuo nagrinėjamos temos.

Pristatome „Ansible Playbooks“

Kaip aprašyta ankstesniame vadove, galite naudoti galimą įrankį komandoms vykdyti nuotoliniuose mazguose taip:

# ansible -a "/bin/hostnamectl --static" webservers

Ankstesniame pavyzdyje mes vykdėme hostnamectl --static ant node1 ir node2. Neilgai trukus supranta, kad šis užduočių vykdymo nuotoliniuose kompiuteriuose metodas puikiai tinka trumpoms komandoms, tačiau gali greitai tapti sudėtingas ar sudėtingesnėms užduotims, kurioms reikalingi tolesni gerai struktūrizuoti konfigūracijos parametrai ar sąveika su kitomis paslaugomis, gerai.

Pavyzdžiui, „WordPress“ nustatymas ir konfigūravimas keliuose pagrindiniuose kompiuteriuose - tai aptarsime kitame šios serijos straipsnyje). Čia atsiranda „Playbooks“.

Paprasčiau tariant, „Playbooks“ yra paprasto teksto failai, parašyti YAML formatu, ir juose yra sąrašas, kuriame yra elementai su viena ar keliomis raktų/reikšmių poromis (dar vadinamais „maišu“ arba „žodynu“).

Kiekvienos „Playbook“ viduje rasite vieną ar daugiau šeimininkų grupių (kiekviena iš šių grupių taip pat vadinama pjese), kur reikia atlikti norimas užduotis.

Oficialių dokumentų pavyzdys padės mums parodyti:

1. kompiuteriai: tai mašinų sąrašas (pagal/etc/ansible/hosts), kur bus atliekamos šios užduotys.

2. remote_user: nuotolinė paskyra, kuri bus naudojama užduotims atlikti.

3. kintamieji: kintamieji, naudojami nuotolinės (-ių) sistemos (-ų) veikimui modifikuoti.

4. užduotys vykdomos eilės tvarka po visas mašinas, kurios atitinka šeimininkus. Spektaklyje visi šeimininkai gaus tas pačias užduočių direktyvas.

Jei jums reikia atlikti kitokį susietų užduočių rinkinį konkrečiam kompiuteriui, sukurkite kitą žaidimą dabartinėje „Playbook“ knygoje (kitaip tariant, spektaklio tikslas yra susieti konkretų kompiuterių pasirinkimą su gerai apibrėžtomis užduotimis).

Tokiu atveju pradėkite naują žaidimą pridėdami „hosts“ direktyvą apačioje ir pradėdami iš naujo:

---
- hosts: webservers
  remote_user: root
  vars:
    variable1: value1
    variable2: value2
  remote_user: root
  tasks:
  - name: description for task1
    task1: parameter1=value_for_parameter1 parameter2=value_for_parameter2
  - name: description for task1
    task2: parameter1=value_for_parameter1 parameter2=value_for_parameter2
  handlers:
    - name: description for handler 1
      service: name=name_of_service state=service_status
- hosts: dbservers
  remote_user: root
  vars:
    variable1: value1
    variable2: value2
…

5. „Handlers“ yra veiksmai, kurie suaktyvinami kiekvieno žaidimo užduočių skyriaus pabaigoje ir dažniausiai naudojami norint iš naujo paleisti paslaugas arba paleisti iš naujo paleisti nuotolines sistemas.

# mkdir /etc/ansible/playbooks

Ir failą pavadinimu apache.yml ten su tokiu turiniu:

---
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum: pkg=httpd state=latest
  - name: replace default index.html file
    copy: src=/static_files/index.html dest=/var/www/html/ mode=0644
    notify:
    - restart apache
  - name: ensure apache is running (and enable it at boot)
    service: name=httpd state=started enabled=yes
  handlers:
    - name: restart apache
      service: name=httpd state=restarted

Antra, sukurkite katalogą/static_files:

# mkdir /static_files

kur saugosite pasirinktinį index.html failą:

<!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="utf-8"/>
 </script>
 </head>
 <body>
 <h1>Apache was started in this host via Ansible</h1><br>
<h2>Brought to you by linux-console.net</h2>
 </body>
 </html>

Beje, dabar atėjo laikas naudoti šią pjesę anksčiau minėtoms užduotims atlikti. Pažymėsite, kad „Ansible“ atliks kiekvieną užduotį pagal pagrindinį kompiuterį po vieną ir pateiks ataskaitą apie tokių užduočių būseną:

# ansible-playbook /etc/ansible/playbooks/apache.yml

Dabar pažiūrėkime, kas atsitiks, kai atidarysime naršyklę ir nukreipsime ją į 192.168.0.29 ir 192.168.0.30:

Eikime dar vienu žingsniu ir rankiniu būdu sustabdykite ir išjunkite „Apache“ 1 ir 2 mazguose:

# systemctl stop httpd
# systemctl disable httpd
# systemctl is-active httpd
# systemctl is-enabled httpd

Tada bėk dar kartą,

# ansible-playbook /etc/ansible/playbooks/apache.yml

Šį kartą užduotis praneša, kad „Apache“ žiniatinklio serveris buvo paleistas ir įgalintas kiekviename pagrindiniame kompiuteryje:

Apsvarstykite aukščiau pateiktą pavyzdį kaip „Ansible“ galios žvilgsnį. Nors tai yra gana lengvos užduotys, atliekamos nedaugelyje serverių, tai gali tapti labai varginančia ir daug laiko atimančia, jei tą patį reikia atlikti keliose (galbūt šimtuose) mašinų.

Santrauka

Šiame straipsnyje mes aprašėme, kaip vienu metu paleisti komandas ir vykdyti sudėtingas užduotis keliuose nuotoliniuose kompiuteriuose, naudojant „Ansible“. „GitHub“ saugykloje pateikiama daug pavyzdžių ir vadovų, kaip naudoti „Ansible“ norint pasiekti beveik bet kokią įsivaizduojamą užduotį.

Kai pradėsite mokytis automatizuoti nuotolinių „Linux“ kompiuterių užduotis naudodami „Ansible“, norėtume išgirsti jūsų mintis. Klausimai, komentarai ir pasiūlymai taip pat visada laukiami, todėl bet kuriuo metu nedvejodami susisiekite su mumis naudodamiesi žemiau esančia forma.