ansible 发部署nginx以及更新、回滚

ansible 和 saltstack 一样都是基于 Python 开发的,是比 puppet 和 saltstack 更轻量级的运维自动化工具。

一:安装ansible 

开启俩台centos

Master 192.168.0.6

Slave 192.168.0.8

二:编辑vim /etc/hosts

三:安装 ansible

[root@master /]# yum install -y epel-release

[root@master /]# yum install -y ansible

四:ssh 密钥配置  直接回车 不设置密钥密码

这样会在root目录下生产.ssh目录  会生成两个文件 id_rsa 和  id_rsa.pub 。

ansible 发部署nginx以及更新、回滚_第1张图片

2)把公钥(id_rsa.pub)内容放到本机和远程客户机的 /root/.ssh/authorized_keys 里面
本机

1f41713e013ef0e9cd3f6c59f02efd36.png-wh_

[root@master .ssh]# cat /root/.ssh/authorized_key >> /root/.ssh/authorized_key 

5c3412faff9eae7f26460b5a6e5d8ae7.png-wh_

五 ansiblc配置

[root@master .ssh]# vim /etc/ansible/hosts

测试执行远程命令  "-m" 指定模块名,"-a" 指定相应命令,这样就可以批量执行命令

9b1b0ba787a5043999a37a5603891872.png-wh_

1远程执行shcll脚本

2把脚本分到远程主机

ansible 发部署nginx以及更新、回滚_第2张图片

批量执行脚本


在远程主机上查看

ansible 发部署nginx以及更新、回滚_第3张图片

拷贝文件

91c4c81741da9b451fae46661564ebec.png-wh_

6拷贝目录

9248628476204c3b95506127483a8b82.png-wh_

远程主机查看

f94a30f68281ab8148f5ceb2e7166112.png-wh_

77c158ccd731129b43abc5ace8ee23fa.png-wh_

一:首先我们需要在安装了 ansible 的机器上编译安装好nginx

49e817bbdc759269fc6e1a1fe6814b97.png-wh_

二:安装依赖包

825a7f3b76aeffe8dfe2e6b0143fb162.png-wh_

三配置编译参数 结束后在 make && make install  编译

90660ebe070e9c0f507a276ca631cf0c.png-wh_

四:编写启动脚本

ansible 发部署nginx以及更新、回滚_第4张图片

ansible 发部署nginx以及更新、回滚_第5张图片

21591002018cd446ea30bb371aa36e62.png-wh_

保存退出修改启动脚本权限

# chmod 755 /etc/init.d/nginx

五:更改配置文件

[root@localhost nginx-1.4.4]# > /usr/local/nginx/conf/nginx.conf    清空原有的配置

[root@localhost nginx-1.4.4]# vim /usr/local/nginx/conf/nginx.conf

ansible 发部署nginx以及更新、回滚_第6张图片

保存退出后检查版本是否正常

865588fa377ea8cdb52024d9f1fb4c96.png-wh_

启动nginx服务

7b341c2b2048dd54108801de7e495ce3.png-wh_

Keepalived安装

优势:主要用来提供故障切换和健康检查,节点高可用,及时隔离并替换新的服务器

[root@master /]# yum -y install gcc gcc+ gcc-c++

[root@slave nginx-1.4.4]# yum install popt-devel openssl openssl-devel libssl-dev libnl-devel popt-devel -y

安装keepalived 然后编译

[root@master keepalived-1.2.13]# ./configure && make && make install 

ansible 发部署nginx以及更新、回滚_第7张图片

ansible 发部署nginx以及更新、回滚_第8张图片

飘逸地址已经成功  下面配置backup端 提高高可用性

ansible 发部署nginx以及更新、回滚_第9张图片

master端keepalived暂停飘逸IP地址自动切换 修复完成 自动切换回来 实现高可用

ansible 发部署nginx以及更新、回滚_第10张图片

roles目录下有三个角色,common为一些准备操作,delete为删除nginx的操作,install为安装nginx的操作。每个角色下面又有几个目录,handlers下面是当发生改变时要执行的操作,通常用在配置文件发生改变,重启服务。

2:打包nginx拷贝文件

[root@master local]# tar czvf nginx.tar.gz nginx

3:定义common的sasks

[root@master local]# cd /etc/ansible/nginx_install/roles/

[root@master roles]# vim common/tasks/main.yml  

ansible 发部署nginx以及更新、回滚_第11张图片

4:定义install的vars

99b4b3c4978fa3a6e4d69f2e24a285a7.png-wh_

这里的 nginx_user 要与 nginx.conf 配置文件中定义的用户一致

5:定义install的tasks

拷贝文件到远程机器/tmp/目录下,然后解压。其中的 copy: src 相对于 install/files/ 目录下,template: src 相对于 install/templates/ 目录下。

ansible 发部署nginx以及更新、回滚_第12张图片

对远程机器建立用户,启动服务,删除压缩包等操作。不过我们还可以定义nginx_web_dir目录,存放虚拟主机文件

1c22cb510106785c21fcd031cb87d99c.png-wh_

创建的是调用 copy.yml 和 install.yml 的文件。

6:定义总入口文件

[root@master roles]# cd /etc/ansible/nginx_install/

ansible 发部署nginx以及更新、回滚_第13张图片

7:执行下发

先修改下 hosts 文件,因为之前实验把本机也添加到了 [testhost] 组里面去了,这里只保留一个远程机:

[root@master nginx_install]# ansible-playbook install.yml 

87dcc8d3b944d3975e776685b82e8ea0.png-wh_

8:在远程机上测试结果

31b3360af4c4390ec432e130e380f8b5.png-wh_

 更新nginx

生产环境中大多时候是需要管理配置文件的,安装软件包只是在初始化环境的时候用一下。

1 新建及拷贝文件

[root@master ansible]# mkdir -p nginx_config/roles

[root@master ansible]# cd nginx_config/roles/

[root@master roles]# mkdir -p new/{vars,files,tasks,handlers}

[root@master roles]# cp /usr/local/nginx/conf/nginx.conf new/files

[root@master roles]# cp -r /usr/local/nginx/conf/vhosts new/files

其中 new 为更新时用到的,后面会新建old 为回滚时用到的,new/files 下面为 nginx.conf文件 和 vhosts 目录,handlers 为重启 nginx 服务所需目录。

2 定义变量

3a197b7da67f159ab64209d17ac3d6e4.png-wh_

3 定义重新加载

定义tasks核心任务

aa7bae6551a4e5fd595350b9baa280bc.png-wh_

定义总入口配置

698eb7f4ae3bd9648dee58341a15892d.png-wh_

测试更新 新建一个虚拟主机配置文件

e7e546702240a70ec5f845ae41c50bfc.png-wh_

发布更新

[root@master nginx_config]# ansible-playbook update.yml

远程主机查看同步成功

a48670444efc4cf563a348c6665c84c9.png-wh_

四 回滚nginx

关于回滚,需要在执行 playbook 之前先备份一下旧的配置千万不能随便去修改线上机器的配置,并且要保证 new/files 目录下面的配置和线上的配置一致。

备份

[root@master nginx_config]# mkdir roles/old

[root@master nginx_config]# rsync -av roles/new/roles/old

这里用rsync而不用cp,是因为rsync会直接覆盖相同的文件。

定义回滚入口

f304f9006344c82a4de009fcdaee06ed.png-wh_

更新 修改虚拟主机文件

下发更新 远程主机是否更新成功

1f1d13dde0a65af3133175fbea602b00.png-wh_