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.