ansible的两篇博客,本来是打算合二为一的,发现只用一篇写,嗯,好鬼长。。。。 一向秉承简单为美的我于是忍痛割爱,一分为二了

ansible实现升级发布、回滚功能

1、应用场景

在实际生产环境中,每天都会更改很多次配置文件,要批量地重启服务 , how ???

机器少可以手动改,再reload一下

机器多达数百台  ——》 使用自动化工具,效率高呗
 
2、思路
配置文件放到一个固定的地方,每次更改时(直接在当前机器上更改),改完后批量发布到其他机器上,再reload
 
 
一、做一个配置文件的playbook
(i)准备工作
1、cd /etc/ansible;  mkdir nginx_config   ——》 这样就有 nginx_install 和 nginx_config 目录了
2、cd nginx_config;  mkdir roles
3、cd roles
mkdir old new
说明:
new:发布/升级
old:回滚
做回滚操作是因为: 重启或者reload的时候,服务没有起来,或者没有达到预想的结果
 
 
(ii)完成发布/升级功能
1、cd new/

mkdir vars files tasks handlers
说明:handlers是用来重启服务的
 
2、复制nginx的主配置文件和虚拟主机配置文件
(1)cp /usr/local/nginx/conf/nginx.conf  files/
(2)cp -r  /usr/local/nginx/conf/vhosts   files/
 
3、定义变量 ——》 basedir
vim vars/main.yml
 
4、定义handlers  ——》 重新加载nginx服务
vim handlers/main.yml

5、定义核心任务

vim tasks/main.yml

6、定义总的入口文件 ——》 主机,用户,roles

(1)cd/etc/ansible/nginx_config
(2)vim update.yml

 7、模拟测试
(1)修改配置文件 ——》 注释是因为直接运行是非法的
vim roles/new/files/vhosts/1.conf

(2)生效条件:主配置文件打开

include vhosts/*.conf;

(3)执行 ——》 已准备好升级发布

ansible-playbook update.yml  ——》 在 nginx_conf 下执行该命令

(4)测试1 ——》 纯启动

web3:
(a)cat /usr/local/nginx/conf/vhosts/1.conf
(b)ps aux |grep nginx

(5)测试2 ——》 测restart

 web1:
(a)vim roles/new/files/vhosts/1.conf

(b)ansible-playbook update.yml

(c)web3: cat /usr/local/nginx/conf/vhosts/1.conf

#######################################

(iii)完成回滚功能

web1 做备份

1、cd /etc/ansible/nginx_config/roles

2、rsync -av  new/  old/

3、rsync -av  new/files/   old/files/

目的:更改 new/files 文件前,先拷贝到 old/files

回滚的时候,就是把 old/files/ 里面的配置再发布一次

旧的还原过来,再重新加载或重启服务

4、进入 nginx_config 目录下

(1)cp update.yml backup.yml

(2)vim backup.yml

5、测试

(1)编辑 roles/new/files/vhosts/1.conf

再加多一行

(2)发布

ansible-playbook update.yml

说明:修改完后nginx重启了

但发现线上服务没有生效,或者出现异常

需要把之前old/files下的配置文件覆盖一下,实现回滚

(3)做回滚前,先验明下(刚刚发布时做的)

(4)回滚来了

ansible-playbook backup.yml

(5)web3现在看只有未发布前的2行,而不是3行了

cat /usr/local/nginx/conf/vhosts/1.conf

最新文章

  1. 一些sql语句的常用总结(重要)
  2. WebSocket学习
  3. 跟着老男孩一步步学习Shell高级编程实战
  4. 从一开始,说出事java匿名内部类
  5. 一个挺好用的任务提示小软件 Rainlendar2
  6. sqlalchemy执行sql语句
  7. 深入理解 ES6中的 Reflect
  8. 修正mui的上拉加载和下拉刷新的一次未完成就执行下一次的请求
  9. Android开发——adb连接夜神模拟器
  10. Web项目Shiro总结及源码(十六)
  11. Android SO动态调试之IDA
  12. React Native 初步
  13. IDHTTP的基本用法
  14. 1、pyspider安装
  15. 微服务之springCloud-docker-feign(四)
  16. Mysql_Learning_Notes_系统结构_1_数据类型
  17. solr介绍一:Analyzer(分析器)、Tokenizer(分词器)
  18. Nodejs统计每秒记录日志数
  19. 集合框架源码学习之HashMap(JDK1.8)
  20. 【洛谷P3469】[POI2008]BLO-Blockade

热门文章

  1. 自定义表单验证--jquery validator addMethod的使用
  2. Linux运维-zabbix_agent最新版的yum安装
  3. HDU1950-Bridging signals-最长上升子序列
  4. SQLServer: 用 ApexSQLLog 恢复 SQL Server 数据
  5. 001infor record 计划时间取值增强-20150622
  6. 4.4 使用STM32控制MC20进行GPS帧数据解析
  7. php mysqli扩展库之预处理操作
  8. IM协议
  9. mysql 触发器 存储过程 java调用
  10. iOS_XML与JSON解析