Birnäçe uzakdaky serwerlerde çylşyrymly meseleleri awtomatlaşdyrmak üçin “Ansible Playbook” -lary nädip ulanmaly - 2-nji bölüm


Bu “Ansible” seriýasynyň öňki makalasynda “Ansible” -iň bir ulgamdan birnäçe enjamy (düwünler diýlip hem atlandyrylýar - we olara hem ýerleşdirmegi) çalt we netijeli dolandyrmaga mümkinçilik berýän agentden has az guraldygyny düşündirdik.

Programma üpjünçiligini gözegçilik enjamyna guranyňyzdan, parolsyz giriş açarlaryny döredip, düwünlere göçüreniňizden soň, Ansible ulanyp, şeýle uzak ulgamlary dolandyrmagyň işini nädip optimallaşdyrmalydygyny öwrenmegiň wagty geldi.

Bu makalanyň dowamynda we indiki makalada aşakdaky synag gurşawyny ulanarys. Hoster eýeleriniň hemmesi CentOS 7 gutusy:

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

Mundan başga-da, iki düwüniň ýerli/etc/ansible/host faýlynyň web serwer bölüminde goşulandygyny ýadyňyzdan çykarmaň:

Saidagny, elimizdäki mowzukdan başlalyň.

Jogaply oýun kitaplary bilen tanyşdyrmak

Öňki gollanmada düşündirilişi ýaly, uzakdaky düwünlerde buýruklary işletmek üçin jogap beriji kömekçi ulanyp bilersiňiz:

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

Aboveokardaky mysalda, node1 we node2-de hostnamectl --static işledik. Uzakdaky kompýuterlerde işlemegiň bu usulynyň gysga buýruklar üçin oňat işleýändigini, ýöne has gowy düzülen konfigurasiýa parametrlerini ýa-da beýleki hyzmatlar bilen özara täsirleşmegi talap edýän has çylşyrymly meseleler üçin çalt agyr ýa-da bulaşyk bolup biljekdigine düşünmek üçin köp wagt gerek däl.

Mysal üçin, WordPress-i birnäçe hostda gurmak we düzmek - bu seriýanyň indiki makalasynda ýazarys). “Playbooks” şu ýere çykýar.

Plyönekeý söz bilen aýdylanda, “Playbooks” YAML formatda ýazylan ýönekeý tekst faýllary bolup, bir ýa-da birnäçe açar/baha jübüti (\ hash ýa-da\sözlük diýlip hem bilinýän) sanawy öz içine alýar.

Her “Playbook” -yň içinde islenýän meseleleriň ýerine ýetirilmeli bir ýa-da birnäçe öý eýesini taparsyňyz (bu toparlaryň hersine oýun diýilýär).

Resmi resminamalardan bir mysal, görkezmäge kömek eder:

1. öý eýeleri: bu aşakdaky meseleleriň ýerine ýetiriljek maşynlarynyň sanawy (/ etc/ansible/hostlara görä).

2. remote_user: meseleleri ýerine ýetirmek üçin ulanyljak uzakdaky hasap.

3. üýtgeýjiler: uzakdaky ulgamlaryň (ulgamlaryň) özüni alyp barşyny üýtgetmek üçin ulanylýan üýtgeýjiler.

4. meseleler öý eýelerine gabat gelýän ähli maşynlara garşy yzygiderli ýerine ýetirilýär. Bir oýnuň içinde ähli öý eýeleri birmeňzeş mesele görkezmelerini alarlar.

Belli bir öý eýesi üçin başga birgiden baglanyşykly meseleleri ýerine ýetirmeli bolsaňyz, häzirki “Playbook” -da başga bir oýun dörediň (başgaça aýdylanda, oýnamagyň maksady, kesgitlenen wezipelere öý eýeleriniň belli bir görnüşini kartalaşdyrmakdyr).

Şeýle ýagdaýda, aşaky ýer eýelerine görkezme goşup, täzeden başlaň:

---
- 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. işleýjiler, her oýundaky meseleler bölüminiň soňunda ýüze çykýan we köplenç hyzmatlary täzeden başlamak ýa-da uzakdaky ulgamlarda täzeden açmak üçin ulanylýan hereketlerdir.

# mkdir /etc/ansible/playbooks

Içinde aşakdaky mazmunly apache.yml atly faýl bar:

---
- 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

Ikinjiden,/static_files bukjasyny dörediň:

# mkdir /static_files

ýöriteleşdirilen index.html faýly nirede saklarsyňyz:

<!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>

Saidagny, indi bu oýnawaç kitabyny ozal agzalan meseleleri ýerine ýetirmek üçin ulanmagyň wagty geldi. “Ansible” -iň her bir meseläni öý eýesi tarapyndan ýeke-ýekeden geçirjekdigini we şeýle meseleleriň ýagdaýy barada hasabat berjekdigini bellärsiňiz:

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

Indi brauzeri açanymyzda we 192.168.0.29 we 192.168.0.30 görkezenimizde näme bolýandygyny göreliň:

Geliň, bir ädim öňe gideliň we node1 we node2-de Apache-i el bilen duruzyň we öçüreliň:

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

Soň ýene ylga,

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

Bu gezek mesele, Apache web serweriniň başlandygyny we her hostda işledilendigini habar berýär:

Aboveokardaky mysaly Ansible-iň güýjüne göz aýlamak hökmünde görmegiňizi haýyş edýäris. Az sanly serwerde ýerine ýetirilende bu gaty aňsat meseleler bolsa-da, birnäçe (belki-de ýüzlerçe) enjamda edil şonuň ýaly etmeli bolsaňyz, gaty ýadaw we wagt talap edip biler.

Gysgaça mazmun

Bu makalada “Ansible” -i ulanyp, buýruklary nädip işletmelidigini we birnäçe uzakdaky öý eýelerinde çylşyrymly meseleleri ýerine ýetirmelidigini düşündirdik. GitHub ammary, islendik göz öňüne getirip boljak meselä ýetmek üçin Ansible-i nädip ulanmalydygy barada köp mysallar we gollanmalar berýär.

“Ansible” -i ulanyp, uzakdaky Linux hostlarynda meseleleri awtomatlaşdyrmagy öwrenip başlanyňyzda, pikirleriňizi diňlemek isleýäris. Soraglar, teswirler we teklipler hem elmydama kabul edilýär, şonuň üçin islän wagtyňyz aşakdaky formdan peýdalanyp bilersiňiz.