Үлкен көлемді жабдықты тиімді басқару.

Үлкен көлемді ақпаратты өңдеу қажеттілігі бағдарламалық қамтылымды, серверілік және телекоммуникациялық жабдықтардың техникалық мүмкіндіктерін жетілдіруге әкелді. Замануаи ақпараттық жүйелер деректердің үлкен көлемін сақтауға және өңдеуге мүмкіндік береді және үлкен есептеу ресурстарын талап етеді.

Үлкен көлемді жабдықды тиімді басқару үшін конфигурацияларды әртүрлі басқару жүйелері бар. Ең кеңінен танымал және белгілі  Ansible, Chef, Puppet және SaltStack.

Біздің кәсіпорын «Мемлекеттік техникалық қызмет» (бұдан әрі – МТҚ) серверлік және желілік жабдықтардың үлкен мөлшерді пайдаланатын, олардың жұмыс істеу қабілеттілігі мен істен шығу тұрақтылығы үшін жоғары жүктемелік ақпараттық жүйелерді қолдап отырумен айналысады.

Бұл мақалада біз Ansible пайдалану тәжірибесін бөліскіміз келеді және мысалдарда кейбір тапсырмаларды қалай оңай және жылдам орындауға болатының көрсету.

Ansible орнату.

Бастау үшін CentOS 7 операциялық жүйесіне Ansible орнату мысалын қарастырайық. CentOS 6, 7 нұсқаларында орнату процесі бірдей. CentOS 8-де DNF пакеттер менеджері қолданылады, сондай-ақ YUM пакеттер менеджерін пайдалануға болады.

Ansible   EPEL-те репозиториясында бар және EPEL пакеті орнатылмаса, оны орнату қажет:

[root@ansible ~]# yum install epel.release
Кейін Ansible серверін орнатамыз:
 [root@ansible ~]# yum install ansible

Ansible іске асыру схемасы.

Ansible, SSH хаттамасы арқылы серверлерге қосылу арқылы жұмыс істейді және оларға Ansible Modules деп аталатын шағын бағдарламаларды ұсынады. Содан кейін Ansible аяқтағаннан кейін оларды орындайды және жояды. Бұл модульдер Python бағдарламалау тілінде жазылған қарапайым скриптер болғандықтан, ал Ansible агенттері жоқ болғандықтан, мақсатты хостарға тек SSH-қосылым және орнатылған Python қажет.

Ansible тек жеке тапсырмаларды орындауға ғана емес, сонымен қатар басқарылатын серверлерде орындалатын сценарийлерді (playbooks) жазуға да мүмкіндік береді. Ansible-те барлық сценарийлер YAML тілінде жазылады.

Бастапқы баптау және кейбір мысалдар.

/etc/ansible  жолында орналасқан «hosts» файлында Nginx веб-сервер орнатылатын  хостар тобы жазылады. Мақалада мысал ретінде 192.168.1.5 - ден 192.168.1.7 –ге дейін IP-мекенжайлары бар 3 сервер қолданылады:

[srv]
192.168.1.[5:7]   ansible_ssh_user=ansible    ansible_ssh_pass=password     ansible_sudo_pass=password

«hosts»  файлын түзеткеннен кейін srv серверлерінің қол жетімділігін тексеруге болады:

ansible -m ping srv

Рing модулін орындау нәтижесі:

192.168.1.5 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
192.168.1.6 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
192.168.1.7 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"

Күрделі тапсырмаларды орындау үшін playbook (плэйбук), яғни YAML тілінде орындау сценарийін жазу керек. Playbook  оларды жылдам орындау үшін белгілі бір директорияда мысалы /etc/ansible/playbooks сақтау ұсынылады. Жаңа бастап жүрген әкімшілер плейбуктерді жазу кезінде мұқият болуы керек. Плэйбук құпия сөзі үш символдан сызықша “---” басталуы тиіс және артық бос орын болмауы тиіс. Мысалы, плейбукті ортану бойынша Nginx іске қосу және конфигурациялар келесі көрініс бар:

---
- hosts: srv
  sudo: yes
  tasks:
  - name: install nginx
    yum:
       name: nginx
       state: latest

  - name: copy nginx.conf  to server
    copy:
     src: /etc/ansible/nginx.conf
     dest: /etc/nginx

- name: copy index.html to server
    copy:
     src: /etc/ansible/index.php
     dest: /var/www/html

- name: start nginx
    service:
     name: nginx
     state: started

Бұл плэйбукте srv (hosts файлынан) тобының серверінде төрт әрекеттің (tasks) – сценарийі орындалады – бұл Nginx орнату», конфигурацияланған «nginx.conf»  файлды және «index.php» серверге көшіру және Nginx іске қосу». Плейбукты орындау нәтижесі:

PLAY [srv] ***************************************************************

PLAY RECAP **************************************************************
192.168.1.5               : ok=5    changed=1 unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.1.6               : ok=5    changed=1 unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.1.7               : ok=5    changed=1 unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

«ok=5» нәтижесі серверлерде 5 әрекет сәтті орындалғанын хабарлайды және  «changed=1»  бір өзгеріс болғанын - Nginx іске қосылғанын хабарлайды.
Сондай-ақ, Ansible көмегімен nginx сервисі іске қосылғанын тексеруге және парақты қайтаруға болады:

«ok=5» нәтижесі серверлерде 5 әрекет сәтті орындалғанын хабарлайды және  «changed=1»  бір өзгеріс болғанын - Nginx іске қосылғанын хабарлайды.
Сондай-ақ, Ansible көмегімен nginx сервисі іске қосылғанын тексеруге және парақты қайтаруға болады:

[root@ansible ~]# ansible srv -m command -a "wget http://localhost"
Нәтижесінде біз жауап аламыз:
HTTP request sent, awaiting response... 200 OK

Nginx  конфигурациялық файлын архивтау үлгісін қарастырайық:

---
- name: archive nginx.conf
  hosts: localhost
  sudo: yes
  tasks:
   - name: archive nginx.conf
     archive:
       path: /etc/nginx/nginx.conf
       dest: /home/admin/backup/nginx.conf.tgz

Плэйбукты орындау нәтижесі:

PLAY [archive nginx.conf] ************************************************

PLAY RECAP ************************************************
192.168.35.95              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Бұл мысалда плэйбук «/etc/nginx/nginx.conf файлын қысқартумен «/home/admin/backup//nginx.conf.tgz. файлына» архивтайды.

Zabbix мониторинг жүйесінде серверлер тобының мониторингін баптау қажет болатын жағдайлар жиі туындайды, ол үшін көрсетілген серверлер тобында Zabbix агенттерін орнату қажет. Делік, агенттер әлдеқашан орнатылған. Енді агенттерде мониторинг серверінің дұрыс мекенжайын орнату керек. Мысал «zabbix-agentd.conf»  конфигурациялық файлында Ansible көмегімен 127.0.01 IP-мекенжайларын 192.168.1.100 ауыстыру келесідей болады:

---
- name: Change ip adress
  hosts: srv
  sudo: yes
  tasks:
  - name: change ip adress server
    lineinfile:
      path: /etc/zabbix/zabbix_agentd.conf
      regexp: 'Server=127.0.0.1'
      line: "Server=192.168.1.100
      backrefs: yes

Рlaybook орындау нәтижесі:

PLAY [Change ip adress] *********************************


PLAY RECAP ***************************************************
192.168.1.5              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.1.6              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.1.7             : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

«Ansible» серверінде ақпараттық қауіпсіздікті қамтамасыз ету

Ansible енгізу ақпараттық қауіпсіздік шараларын сақтауды талап етеді, себебі Ansible серверінде өнеркәсіптік серверлерге ssh-қол жетімділігі бар. Ansible серверіне рұқсат етілмеген қол жетімділік хакерлік шабуылға ұшырау қаупін тудырады. Ansible серверіне қол жетімділікті қорғау үшін кем дегенде базалық ақпараттық қауіпсіздік шараларын орындау қажет:

•    «Ansible» сервері бөгде адамдардың қол жеткізуінен қорғалған және шектелген желілік сегментте болуы тиіс.
•    Ansible серверінде есептік жазбалар тек әкімшілер болуы керек;
•    Жабдықтың операциялық жүйесінің желіаралық экраны, ондағы Ansible сервері дұрыс бапталуы тиіс. SSH хаттамасы бойынша қол жетімділік тек әкімшілердің жұмыс станцияларынан болуы тиіс. Мысалы Ansible серверіндегі желіаралық экранның конфигурациясы СentOS 7 және  8  ОЖ бар:

firewall-cmd –permanent --zone=dmz --add-rich-rule='rule family="ipv4" source address="ip-adress администратора" port port="22" protocol="tcp" accept'

•    SELinux  «Enforcing» режимінде болуы керек.
•    Оқиғаларға мониторинг жүргізу үшін қауіпсіздікті қамтамасыз ету орталығына syslog хаттамасы бойынша Ansible логтарын жіберуді баптау ұсынылады.

Қорытынды.

Соңғы жылдары ақпараттық жүйелерді енгізу және басқару процестерін автоматтандыру жағына беталыс жүруде. Ansible жабдықты көп мөлшерде тиімді басқару үшін қалай көрнекі мысал болып табылады.

Біз Ansible байланысты негізгі нәрселерді қарастырдық. Ansible құжаттамасымен мына мекенжай https://docs.ansible.com бойынша толығырақ танысуға болады.