Ansible 实战与配置(Ⅳ)

虽然我们把站点的配置全部配置到了每台server,但是这仅仅是安装,我们仍需要去管理配置,优化,一旦不符合当前要求我们需要重新再次去配置。如何使用ansible自动搞定呢?

管理nginx配置文件的playbook
mkdir  -p /etc/ansible/nginx_config/roles/{new,old}/{files,handlers,vars,tasks}

//其中new为更新时用到的,old为回滚时用到的。

files下面为nginx.conf和vhosts目录。

handlers为重启nginx服务的命令

假如有这么一种情况,配置难免会出现BUG,一旦遇到我们需要重新返回到上一次的配置,叫做“回滚” 关于回滚,需要在执行playbook之前先备份一下旧的配置,所以对于老配置文件的管理一定要严格,千万不能随便去修改线上机器的配置,并且要保证new/files下面的配置和线上的配置一致。

先把nginx.conf和vhosts目录放到files目录下面:

cd /usr/local/nginx/conf/

cp -r nginx.conf vhost  /etc/ansible/nginx_config/roles/new/files/
定义变量
vim /etc/ansible/nginx_config/roles/new/vars/main.yml 

nginx_basedir: /usr/local/nginx

//定义nginx的位置
定义重新加载nginx服务
vim /etc/ansible/nginx_config/roles/new/handlers/main.yml  

- name: restart nginx
  shell: /etc/init.d/nginx reload
核心任务
vim /etc/ansible/nginx_config/roles/new/tasks/main.yml 

- name: copy conf file
  copy: src={{ item.src }} dest={{ nginx_basedir }}/{{ item.dest }} backup=yes owner=root group=root mode=0644
  with_items:
    - { src: nginx.conf, dest: conf/nginx.conf }
    - { src: vhost, dest: conf/ }
  notify: restart nginx
  
//nginx_basedir 定义的变量;

//copy会循环两次:第一次把nginx.conf拷贝到指定的位置,再次把vhost拷贝到指定位置。

//notify: 调用handlers,名字是 restart nginx,去如上定义的handlers下面有个main.yml中去找相关配置。
定义总入口配置
vim /etc/ansible/nginx_config/update.yml

---
- hosts: testhost
  user: root
  roles:
  - new

在更新前一定要记得先备份,目的就是一旦出现错误,我们需要马上回滚!

rsync -av  /etc/ansible/nginx_config/roles/new/files/ /etc/ansible/nginx_config/roles/old/files/
执行:
ansible-playbook /etc/ansible/nginx_config/update.yml
回滚:

回滚操作就是把旧的配置覆盖,然后重新加载nginx服务。

每次改动nginx配置文件之前先备份到old里,对应目录为/etc/ansible/nginx_config/roles/old/files

[[email protected] files]# pwd
/etc/ansible/nginx_config/roles/new/files

[[email protected] files]# rsync -av ./ /etc/ansible/nginx_config/roles/old/files/
sending incremental file list
./
nginx.conf
vhost/
vhost/dd.conf
vhost/zhdy01.com.conf

sent 2189 bytes  received 76 bytes  4530.00 bytes/sec
total size is 1948  speedup is 0.86

[[email protected] files]# cd !$
cd /etc/ansible/nginx_config/roles/old/files/

[[email protected] files]# ls
nginx.conf  vhost
最后是定义总入口配置
vim /etc/ansible/nginx_config/rollback.yml 
---
- hosts: testhost
  user: root
  roles:
  - old

可能稍微有点乱,总结下:

第一步:备份

一定要先备份(真的吃过亏!)在更新配置前,我们是不是需要把现在的配置备份下,万一配置不对,线上的环境不就崩了? 备份就是如上 rsync。

第二步:更新

备份完毕后,我们才可以去改变(/etc/ansible/nginx_config/roles/new/files)当前的配置,然后去更新(ansible-playbook /etc/ansible/nginx_config/update.yml)。

第三步:回滚

如果成功你就用不着这一步(别去尝试!)如果配置有问题,我们需要赶紧回滚到上个阶段(ansible-playbook rollback.yml),然后再去检查新配置到底是什么问题。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开源项目

Git 项目推荐 | 基于 J2Cache 的多级缓存框架

基于j2cache的理念,重新设计开发的一套分布式缓存。支持2级并不限于2级的多级缓存系统。 github地址:atoms 配置文件: <?xml versio...

40870
来自专栏菩提树下的杨过

"org.jboss.netty.internal.LoggerConfigurator".DESCRIBED is already registered 的解决办法

今天在jboss 6.2 EAP上部署一个项目时,报以下错误: org.jboss.msc.service.DuplicateServiceException:...

305100
来自专栏无原型不设计

【Mockplus教程】分组

为了更好的管理和组织多个页面,可以选择将页面分组。 选择多个页面,然后使用右键点击后,在弹出的菜单中选择“将页面归类到新分组”。 完整演示如下: ?

30270
来自专栏散尽浮华

Ubuntu系统制作U盘启动项以及针对U盘挂载后显示"只读系统"的解决措施

1)Linux系统制作U盘启动项 在公司的一台ubuntu机器上插入U盘,然后将机器上的一个ubuntu的iso镜像做成U盘启动。制作方法如下: 首先执行命令

47320
来自专栏点点滴滴

frp内网穿透应用1-通过外网ip访问布置于内网的web服务

1、修改 服务器端frps.ini 文件,配置一个名为 web 的 http 反向代理,设置 http 访问端口为 8080,绑定自定义域名 www.yourd...

26510
来自专栏ytkah

finecms如何调用自定义内容

  我们建站的时间经常会有一些固定的元素,比如电话、地址等,这种相对比较简单的东西可以让编辑人员直接在后台就可以定义,那么finecms有没有这个功能呢?怎么定...

34040
来自专栏xingoo, 一个梦想做发明家的程序员

Kibana中doc与search策略的区别

在kibana中包含两种策略:doc和search。使用了两个循环队列来获取请求,并进行响应。 doc的代码如下: clientMethod: 'mget' ...

245100
来自专栏电光石火

CentOS 安装 Maven

 1、官网找到最新版的安装包: http://maven.apache.org/download.cgi 拷贝文件名为 *-bin.tar.gz 的链接地址 ...

24860
来自专栏深度学习之tensorflow实战篇

python生成exe,环境win10简单的小程序案例

1.直接pip安装:pip install pyinstaller ? 2.打包时,在命令行中切换到要打包的程序所在目录,直接输入下面的指令即可。 ...

41850
来自专栏深度学习之tensorflow实战篇

Hadoop查看所有JOB以及如何Kill指定用户的所有Job

如何kill掉制定用户的所有job,有没有现成的命令?我看了一下hadoop job命令的提示,没有这样的命令。 其实实现kill指定用户的job也非常简单,本...

32860

扫码关注云+社区

领取腾讯云代金券