Centos7-Ansible-Nginx自动化部署

Ansible自动化批量部署nginx服务器

搭建环境:
主机 系统 网卡 IP
Ansible Centos7 64Bit Vmnet0桥接 192.168.152.158
Web1 Centos7 64Bit Vmnet0桥接 192.168.152.159
Web2 Centos7 64Bit Vmnet0桥接 192.168.152.160
注:清空并关闭以上环境所有主机的防火墙和selinux

关闭防火墙 systemctl stop firewalld.service
禁止防火墙开机自启 systemctl disable firewalld.service

关闭selinux sed -i 's/SELINUX=enforcing /SELINUX=disabled/g'
/etc/sysconfig/selinux

重启 reboot
注:重启后如果可以互相ping通,那么就开始搭建ansible服务器

1、Ansible-server安装
安装方式:
1)从Ansible项目的GitHub源码库提取出来安装,运行Ansible不需root 权限,也不依赖于其他软件,没有后台进程运行,不需要数据库支撑。
2)使用yum安装,需要有合适的yum源,对于RHEL、CentOS的官方yum源中没有 Ansible安装包,这就需要先安装支持第三方的yum仓库组件,最常用的有EPEL、 Remi、RPMForge等。可国内速度较快的高质量yum源网易 163(http://mirrors.163.com)、阿里源(https://opsx.alibaba.com/mirror
注:这里实验使用的是默认的centos7自带的源,并使用yum直接安装

2、使用yum安装ansible
yum –y install ansible

1)检查ansible版本: ansible –version

3、设置节点授权的ssh密钥
1)在Ansible服务端生成密钥,并且复制公钥到节点中。

2)使用ssh-copy-id命令来复制Ansible公钥到节点web1和web2
Web1

Web2

4、配置Ansible定义文件(将需要ansible自动化的节点IP添加到这里)
1)编辑ansible配置文件 vi /etc/ansible/hosts

5、测试在ansible服务端运行命令(在互相能ping通的情况下)
ansible -m ping 'web-servers'

6、执行shell命令
1)查看ansible节点运行时间(uptime)
ansible -m command -a "uptime" 'web-servers'

2)查看节点内核版本(uname -r)
ansible -m command -a "uname -r" 'web-servers'

注:以上操作部署已完成ansible服务搭建

7、两种批量部署nginx服务器方式
1)方式一: yum安装nginx,使用的是epel-release源
//创建Ansible YAML文件 vi nginx.yaml

注释:
第1行表示该文件是YAML文件,非必须
第2行定义该playbook针对的目标主机,all表示针对所有主机
第3行定义该playbook所有的tasks集合,比如下面我们定义的3个task
第4行定义一个task的名称,非必须,建议根据task实际任务命名
第5行定义一个状态的action,比如这里使用yum模块实现Nginx软件包的安装
第6行到第9行使用template模板去管理/etc/nginx/nginx.conf文件,owner group定义该文件的属主以及属组,使用validate参数指文件生成后使用nginx -t -c %s命令去做Nginx文件语法验证,notify是触发handler状态,如果同步后,文件 的MD5值有变化会触发ReStart Nginx Service这个handler
第10行到第12行是定义一个handler状态让Nginx服务重启,handler的名称是 ReStart Nginx Service
注:书写yaml文件时,注意左对齐,同级别应在同一列下,并且不能使用Tab键,可以使用空格(随便空格几个都行,但是同一级别必须对齐)

//检测YAML文件
ansible-playbook nginx.yaml --syntax-check nginx.yaml

//查看YAML文件任务列表 ansible-playbook nginx.yaml --list-task

//查看针对哪些主机做操作 ansible-playbook nginx.yaml --list-hosts

//给两个节点安装epel-release源
ansible web-servers -m shell -a 'yum -y install epel-release' -i /etc/ansible/hosts

//给两个节点安装nginx
ansible web-servers -m shell -a 'yum -y install nginx' -i /etc/ansible/hosts

//编辑本地nginx.conf.j2文件(因为本地没有安装nginx所以没有这个文件需要从节点拷贝到当前/root/下再修改,并以这个修改过的模板来下发给节点)

注:根据实际情况要求修改(我这里使用的默认)
//确认信息是否正确
ansible-playbook -i /etc/ansible/hosts nginx.yaml -f 2
(下图是nginx.conf.j2配置文件未修改,默认执行命令的状态)

//这是修改过nginx.conf.j2配置文件执行命令的状态(如下图)

//这样我们就完成了 3台机器的Nginx安装部署,下面需要对主机的Nginx服务进行核查,并且确认生成后nginx.conf中的worker_processes参数的值是否正确,执行命令:
ansible -i /etc/ansible/hosts all -m shell -a 'netstat -utpln |grep 80' -f 2

注:上图红色字体说明并没有自动重启nginx,原因是nginx.conf.j2这文件默认没有修改的情况不满足执行条件,所以如果想得到下图,随意修改点东西即可。

注:nginx自动化部署完成!
验证:浏览器访问两个节点IP
Web1:http://192.168.152.159

Web2:http://192.168.152.160

猜你喜欢

转载自blog.51cto.com/13043516/2119745