ansible通过playbook批量部署服务
一、对单机和组的执行playbook配置命令
1、对单台服务器执行playbook:
在单台服务器172.20.26.198上安装nginx,启动nginx。
vim nginx.yml #编写剧本
---
- hosts: 172.20.26.198
remote_user: root
tasks:
- name: auto install nginx
yum: name=nginx state=installed(默认状态为installed,可以忽略不写)
用-C测试剧本语法是否有问题:
ansible-playbook -C nginx.yaml
没有报错,语法没有问题,
172.20.26.198上目前没有安装nginx
在172.20.26.167上执行yml文件
ansible-playbook nginx.yml
在172.20.26.198服务器上通过yml剧本安装nginx成功。
我们也可以在yml剧本中添加启动nginx服务
vim nginx.yml
检查yml语法是否正确
ansible-playbook -C nginx.yml
Nginx 服务已启动
2、对nginx组执行playbook:对nginx组都安装nginx服务,并启动服务。
vim nginx.yml
在nginx主机组的服务器上检查nginx的安装和启动状态
3、对nginx组执行playbook:对nginx组安装nginx、redis服务,并启动服务。
---
- hosts: nginx
remote_user: root
tasks:
- name: auto install nginx and redis
yum: name=nginx,redis
- name: start nginx and redis
service: name={{ item }} state=started
with_items:
- nginx
- redis
在nginx主机组的服务器上检查nginx、redis安装和启动状态
4、变量(playbook定义变量):安装httpd、vsftpd服务
---
- hosts: nginx
remote_user: root
vars:
- app1: httpd
- app2: vsftpd
tasks:
- name: auto install {{ app1 }} and {{ app2 }}
yum: name={{ app1 }},{{ app2 }}
- name: start {{ app1 }} and {{ app2 }}
service: name={{ item }} state=started
with_items:
- "{{ app1 }}"
- "{{ app2 }}"
我们前面已安装过nginx,由于nginx 与httpd 都绑定80端口,所以这里可以先将nginx 服务stop掉
ansible-playbook nginx.yml
二、通过playbook批量源码部署nginx,并实现配置文件替换,启动服务
在/etc/ansible/主目录下创建templates目录,将之前的nginx.conf 文件拷贝到templates目录下/etc/ansible/templates/
通过ansible对远程服务器进行CPU数据采集,我们172.20.26.198服务器的CPU个数是1个,172.20.26.24服务器的CPU个数是4个,
ansible nginx -m setup | grep cpu
修改nginx.conf配置
将配置文件中的worker_processes 后面的1或者2或者auto 修改为ansible采集CPU的变量名“ansible_processor_vcpus”
将nginx-1.18.0.tar上传到/usr/src目录下
vim nginx.yml
---
- hosts: nginx
remote_user: root
tasks:
- name: copynginx package
copy: src=/usr/src/nginx-1.18.0.tar.gz dest=/usr/src/
tags: cppkg
- name: tar-nginx
shell: cd /usr/src/;tar -zxf nginx-1.18.0.tar.gz
- name: installpakger
yum: name=pcre-devel,zlib,zlib-devel,gcc,gcc-c++,openssl-devel state=installed
- name: configure
shell: cd /usr/src/nginx-1.18.0 && ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre
- name: make and make install
shell: cd /usr/src/nginx-1.18.0 && make && make install
- name: start nginx
shell: /usr/local/nginx/sbin/nginx
- name: modify nginx conf
template: src= /etc/ansible/templates/nginx.conf dest=/usr/local/nginx/conf/
tags: nginxconf
notify: reload nginx
handlers:
- name: reload nginx
shell: /usr/local/nginx/sbin/nginx -s reload
ansible-playbook -C nginx.yml 检查nginx.yml 语法情况
ansible-playbook nginx.yml #执行playbook命令
要确保远程服务器对所要安装的服务所使用的端口不被占用。
测试nginx.conf 文件是否被成功修改
ansible-playbook nginx.yml
vim /usr/local/nginx/conf/nginx.conf #查看远程服务器nginx配置文件进程数
查看远程服务器nginx 端口及进程服务
完成通过playbook批量源码部署nginx,并实现配置文件替换,启动服务。
也可以根据ansible采集远程服务器的hostname值来设置变量