ansible原理
簡(jiǎn)介
ansible是一款基于python開(kāi)發(fā)的自動(dòng)化運(yùn)維工具鸦致,適用于中小型應(yīng)用環(huán)境杉畜。可實(shí)現(xiàn)如下功能:
(1)自動(dòng)化部署APP瓤漏;
(2)自動(dòng)化管理配置項(xiàng);
(3)自動(dòng)化的持續(xù)交互颊埃;
(4)自動(dòng)化的(AWS)云服務(wù)管理蔬充;
從本質(zhì)上來(lái)講就是在一臺(tái)或多臺(tái)遠(yuǎn)程服務(wù)器上,執(zhí)行一系列的命令班利。
ansible命令執(zhí)行過(guò)程
(1) 加載自己的配置文件饥漫,默認(rèn)為/etc/ansible/ansible.cfg
(2) 加載自己對(duì)應(yīng)的模塊文件,如command
(3) 通過(guò)ansible將模塊或命令生成對(duì)應(yīng)的臨時(shí)py文件肥败,并將該文件傳輸至遠(yuǎn)程服務(wù)器的對(duì)應(yīng)執(zhí)行用戶$HOME/.ansible/tmp/ansible-tmp-數(shù)字/XXX.PY文件
(4)給文件+x執(zhí)行
(5)執(zhí)行并返回結(jié)果
(6)刪除臨時(shí)py文件趾浅,sleep 0退出
執(zhí)行狀態(tài):
(1)綠色:執(zhí)行成功并且不需要做改變的操作
(2)黃色:執(zhí)行成功并且對(duì)目標(biāo)主機(jī)做變更
(3)紅色:執(zhí)行失敗
1.用ansible在多臺(tái)機(jī)器上添加用戶
[root@centos7 ansible]ansible nginxsrvs -m user -a 'name=user1 comment="test user" uid=11211 home=/home/user1 group=root'
192.168.48.131 | CHANGED => {
"changed": true,
"comment": "test user",
"create_home": true,
"group": 0,
"home": "/home/user1",
"name": "user1",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 11211
}
192.168.48.132 | CHANGED => {
"changed": true,
"comment": "test user",
"create_home": true,
"group": 0,
"home": "/home/user1",
"name": "user1",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 11211
}
[root@centos7 ansible]ansible nginxsrvs -m shell -a 'id user1'
192.168.48.131 | CHANGED | rc=0 >>
uid=11211(user1) gid=0(root) groups=0(root)
192.168.48.132 | CHANGED | rc=0 >>
uid=11211(user1) gid=0(root) groups=0(root)
2.用ansible安裝nginx服務(wù)
1.安裝ansible并配置主機(jī)清單
[root@centos7 ~]yum install -y ansible
[root@centos7 ~]vim /etc/ansible/hosts
······
[nginxsrvs]
192.168.48.131
192.168.48.132
2.簡(jiǎn)單搭建roles
搭建roles目錄結(jié)構(gòu)
[root@centos7 ~]mkdir /etc/ansible/roles/nginx
[root@centos7 ~]cd !$
cd /etc/ansible/roles/nginx
[root@centos7 nginx]mkdir {files,templates,tasks,handlers,vars,meta}
[root@centos7 nginx]ls
filrs handlers meta tasks templates vars
[root@centos7 nginx]cd tasks
group配置
[root@centos7 tasks]vim group.yml
- name: create group
group: name=nginx gid=80
user配置
[root@centos7 tasks]vim user.yml
- name: cerate user
user: name=nginx uid=80 group=nginx system=yes shell=/sbin/nologin
yum安裝配置
[root@centos7 tasks]vim yum.yml
- name: install nginx
yum: name=nginx state=present
服務(wù)啟動(dòng)配置
[root@centos7 tasks]vim start.yml
- name: start service
service: name=nginx state=started
服務(wù)重啟配置
[root@centos7 tasks]vim ../handlers/main.yml
- name: restart service
service: name=nginx state=restarted
復(fù)制nginx原版配置文件到templates目錄并重命名作為模板
[root@centos7 tasks]cp /etc/nginx/nginx.conf ../templates/nginx.conf.j2
修改啟動(dòng)進(jìn)程數(shù)是cpu數(shù)量的兩倍
vim ../templates/nginx.conf.j2
work_processes {{ ansible_processor_vcpus * 2 }}
模板調(diào)用配置
[root@centos7 tasks]vim templ.yml
- name: copy conf
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart service
nginx 總配置用于調(diào)用之前所有配置
[root@centos7 tasks]vim main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: templ.yml
- include: start.yml
編寫nginx調(diào)用劇本
[root@centos7 tasks]cd /etc/ansible
[root@centos7 ansible]vim nginx_role.yml
- hosts: nginxsrvs
remote_user: root
roles:
- role: nginx
[root@centos7 ansible]tree roles/nginx
roles/nginx
├── filrs
├── handlers
│ └── main.yml
├── meta
├── tasks
│ ├── group.yml
│ ├── main.yml
│ ├── start.yml
│ ├── templ.yml
│ ├── user.yml
│ └── yum.yml
├── templates
│ └── nginx.conf.j2
└── vars
3.測(cè)試安裝
[root@centos7 ansible]ansible-playbook nginxsrvs nginx_role.yml
[root@centos7 ansible]ansible-playbook nginx_role.yml
PLAY [nginxsrvs] ********************************************************************************************
TASK [Gathering Facts] **************************************************************************************
ok: [192.168.48.132]
ok: [192.168.48.131]
TASK [nginx : create group] *********************************************************************************
changed: [192.168.48.131]
changed: [192.168.48.132]
TASK [nginx : cerate user] **********************************************************************************
changed: [192.168.48.131]
changed: [192.168.48.132]
TASK [nginx : install nginx] ********************************************************************************
changed: [192.168.48.131]
changed: [192.168.48.132]
TASK [nginx : copy conf] ************************************************************************************
changed: [192.168.48.131]
changed: [192.168.48.132]
TASK [nginx : start service] ********************************************************************************
changed: [192.168.48.131]
changed: [192.168.48.132]
RUNNING HANDLER [nginx : restart service] *******************************************************************
changed: [192.168.48.131]
changed: [192.168.48.132]
PLAY RECAP **************************************************************************************************
192.168.48.131 : ok=7 changed=6 unreachable=0 failed=0
192.168.48.132 : ok=7 changed=6 unreachable=0 failed=0
[root@centos7 ansible]ansible nginxsrvs -m shell -a 'ps aux|grep nginx'
192.168.48.132 | CHANGED | rc=0 >>
root 5146 0.0 0.1 122908 2104 ? Ss 20:42 0:00 nginx: master process /usr/sbin/nginx
nginx 5147 0.0 0.2 125376 3564 ? S 20:42 0:00 nginx: worker process
nginx 5148 0.0 0.2 125376 3564 ? S 20:42 0:00 nginx: worker process
root 5257 0.0 0.0 113128 1204 pts/1 S+ 20:46 0:00 /bin/sh -c ps aux|grep nginx
root 5259 0.0 0.0 113128 188 pts/1 R+ 20:46 0:00 /bin/sh -c ps aux|grep nginx
192.168.48.131 | CHANGED | rc=0 >>
root 8298 0.0 0.1 122928 2104 ? Ss 20:42 0:00 nginx: master process /usr/sbin/nginx
nginx 8299 0.0 0.2 125472 3560 ? S 20:42 0:00 nginx: worker process
nginx 8300 0.0 0.2 125472 3560 ? S 20:42 0:00 nginx: worker process
root 8424 0.0 0.0 113128 1204 pts/1 S+ 20:46 0:00 /bin/sh -c ps aux|grep nginx
root 8426 0.0 0.0 113128 188 pts/1 R+ 20:46 0:00 /bin/sh -c ps aux|grep nginx
[root@centos7 ansible]ansible nginxsrvs -m shell -a 'lscpu | grep ^CPU\(s\)'
192.168.48.131 | CHANGED | rc=0 >>
CPU(s): 1
192.168.48.132 | CHANGED | rc=0 >>
CPU(s): 1