前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ansible 实战与配置(Ⅳ)

Ansible 实战与配置(Ⅳ)

作者头像
老七Linux
发布2018-05-31 10:11:41
5290
发布2018-05-31 10:11:41
举报

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

管理nginx配置文件的playbook
代码语言:javascript
复制
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目录下面:

代码语言:javascript
复制
cd /usr/local/nginx/conf/

cp -r nginx.conf vhost  /etc/ansible/nginx_config/roles/new/files/
定义变量
代码语言:javascript
复制
vim /etc/ansible/nginx_config/roles/new/vars/main.yml 

nginx_basedir: /usr/local/nginx

//定义nginx的位置
定义重新加载nginx服务
代码语言:javascript
复制
vim /etc/ansible/nginx_config/roles/new/handlers/main.yml  

- name: restart nginx
  shell: /etc/init.d/nginx reload
核心任务
代码语言:javascript
复制
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中去找相关配置。
定义总入口配置
代码语言:javascript
复制
vim /etc/ansible/nginx_config/update.yml

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

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

代码语言:javascript
复制
rsync -av  /etc/ansible/nginx_config/roles/new/files/ /etc/ansible/nginx_config/roles/old/files/
执行:
代码语言:javascript
复制
ansible-playbook /etc/ansible/nginx_config/update.yml
mark
mark
回滚:

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

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

代码语言:javascript
复制
[[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
最后是定义总入口配置
代码语言:javascript
复制
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),然后再去检查新配置到底是什么问题。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016/11/10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 管理nginx配置文件的playbook
  • 定义变量
  • 定义重新加载nginx服务
  • 核心任务
  • 定义总入口配置
  • 执行:
  • 回滚:
  • 最后是定义总入口配置
  • 第一步:备份
  • 第二步:更新
  • 第三步:回滚
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档