Үлкен көлемді жабдықты тиімді басқару.
Үлкен көлемді ақпаратты өңдеу қажеттілігі бағдарламалық қамтылымды, серверілік және телекоммуникациялық жабдықтардың техникалық мүмкіндіктерін жетілдіруге әкелді. Замануаи ақпараттық жүйелер деректердің үлкен көлемін сақтауға және өңдеуге мүмкіндік береді және үлкен есептеу ресурстарын талап етеді.
Үлкен көлемді жабдықды тиімді басқару үшін конфигурацияларды әртүрлі басқару жүйелері бар. Ең кеңінен танымал және белгілі 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 бойынша толығырақ танысуға болады.