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. entropy 压缩信息的熵更加高 实际上英文文本的熵大概只有4.7比特

    https://en.wikipedia.org/wiki/Entropy_(information_theory) https://zh.wikipedia.org/wiki/熵(信息论) 熵的概念 ...

  2. cvs 文件如何解析?

    QList<QStringList> RwCvs::readToList(const QString &path, const QString separator) { QList ...

  3. Wireshark网络分析工具(二)

    一.TCP三次握手过称 1. 第一次握手的数据包 客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接. 如下图: 2. 第二次握手的数据包 服务器发回确认包, 标志位为 SYN ...

  4. Ubuntu系统下完全卸载和安装Mysql

    删除 mysql sudo apt-get autoremove --purge mysql-server-5.0 sudo apt-get remove mysql-server sudo apt- ...

  5. 爬取豆瓣电影信息保存到Excel

    from bs4 import BeautifulSoup import requests import html.parser from openpyxl import Workbook,load_ ...

  6. [转载]MySQL concat函数的使用

    MySQL concat函数是MySQL数据库中众多的函数之一,下文将对MySQL concat函数的语法和使用进行说明,供您参考和学习. MySQL concat函数使用方法:CONCAT(str1 ...

  7. Simple Tips for Collection in Python

    I believe that the following Python code is really not hard to understand. But I think we should use ...

  8. python面向对象之 封装(Day25)

    封装: 隐藏对象的属性和实现细节,仅对外提供公共访问方式 好处:1.将变化隔离 2.便于使用 3.提高复用性 4.提高安全性 封装原则: 1.将不需要对外提供的内容隐藏起来 2.把属性都隐藏,提供公共 ...

  9. python常用模块——hashlib模块

    Python的hashlib提供了常见的摘要算法,如md5.sha1等 什么是摘要算法了?摘要算法又称哈希算法.散列算法. 它通过一个函数,把任意长度的数据转化魏一个长度固定的数据串(通常用十六进制的 ...

  10. node.js应用生成windows service的plugin——winser

    from:http://xiaomijsj.blog.163.com/blog/static/89685520135854036206/ 针对项目中windows server machine 不断重 ...