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

ansible实现发布、回滚功能的更多相关文章

  1. DataPipeline的增量数据支持回滚功能

    DataPipeline的增量数据支持回滚功能 第一步:数据任务有增量数据时,回滚按钮激活,允许用户使用该功能进行数据回滚. 第二步:点击回滚按钮,允许用户选择回滚时间或者回滚位置进行数据回滚.选择按 ...

  2. Jenkins+Ansible+Gitlab自动发布/回滚Spring项目

    一.实现方法流程图 流程图如下:代码托管在本地GitLab上(为了复现整套流水线,我直接使用了GitHub,懒得再搭建GitLab),开发完成后提交代码到代码仓库,[自动]触发Jenkins进行持续集 ...

  3. php数据访问:pdo用法、事物回滚功能和放sql注入功能

    PDO:    一.含义:        数据访问抽象层    二.作用        通过PDO能够访问其它的数据库    三. 用法:        1.造对象            ① $pdo ...

  4. 数据库运维平台~inception回滚功能

    一 简介:inception的另一个激动人心的功能,很强大.二 功能简介: inception会针对已经执行sql语句进行1 记录 2 生成回滚语句三 备份:   1 启用远程备份机制(强烈建议一台单 ...

  5. Jenkins发布回滚方案

    Jenkins回滚可以通过每次发布从主干打tag,然后发布的时候发tag,比如tag, v1, v2,v3 如果我发布了v3,想要回滚回v2,直接在Jenkins中选择v2的tag地址重新构建就可以回 ...

  6. jenkinsfile or pipline 实现微服务自动发布回滚流程

    1 #!/usr/bin/env groovy Jenkinsfile node { //服务名称 def service_name = "**" //包名 def service ...

  7. Jenkins 搭建企业实战案例 (发布与回滚)

    让我们的代码部署变得easy,不再难,Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins非常易于安装和配置,简单易用 ...

  8. 【Java EE 学习 19】【使用过滤器实现全站压缩】【使用ThreadLocal模式解决跨DAO事务回滚问题】

    一.使用过滤器实现全站压缩 1.目标:对网站的所有JSP页面进行页面压缩,减少用户流量的使用.但是对图片和视频不进行压缩,因为图片和视频的压缩率很小,而且处理所需要的服务器资源很大. 2.实现原理: ...

  9. Oracle并行事务回滚相关参数及视图

    /******相关参数****/fast_start_parallel_rollback1.取值有3种:false,low,high2.各值含义:false  ---禁用并行回滚功能          ...

随机推荐

  1. velocity 遍历EventHandler Iterator

    EventHandlerUtil 类的 iterateOverEventHandlers方法 for (Iterator i = handlerIterator; i.hasNext();){ Eve ...

  2. Python中 sys.argv[]的用法实操

    使用sys.argv[]首先要调用模块sys import sys 通俗说,这个东西就是取代了input的功能,input是用pycharm上,而argv[]是用在命令行上 也就是window 上的小 ...

  3. MySql 自适应哈希索引

    一.介绍 哈希(hash)是一种非常快的查找方法,一般情况下查找的时间复杂度为O(1).常用于连接(join)操作,如Oracle中的哈希连接(hash join). InnoDB存储引擎会监控对表上 ...

  4. Python排列组合

    product 笛卡尔积 (有放回抽样排列) permutations 排列 (不放回抽样排列) combinations 组合,没有重复 (不放回抽样组合) combinations_with_re ...

  5. spring boot 2.0添加对fastjson的支持

    首先引入fastjson的maven依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId&g ...

  6. 201703 ABAP面试题002

    转自: ABAP 面试问题及答案(一):数据库更新及更改 SAP Standard (转) 问题一:锁对象(Lock Object)和 FM(Function Module)激活锁定对象时,产生的 F ...

  7. Python替换文件内容

    #!/usr/bin/env python import fileinput for line in fileinput.input('fansik',inplace=1): line = line. ...

  8. loadrunder脚本篇——执行操作系统命令

    思路: 用loadrunner system()函数 函数原型: int system( const char *string ); 示例一:在指定目录下创建指定文件 Action() { char ...

  9. iOS NSSet 学习 “无序数组” & 去重 案例

    “NSSet,NSMutableSet,和NSCountedSet类声明编程接口对象的无序集合(散列存储:在内存中的存储位置不连续). 而NSArray,NSDictionary类声明编程接口对象的有 ...

  10. ssh登陆virtualbox虚拟机