自动化部署难驾驭?这篇文章分分钟拯救你的运维体系!

简介:

作者介绍

徐亮伟江湖人称标杆徐,曾负责大规模集群架构自动化运维工作。擅长自动化运维,并且在分布式、Python自动化、云计算虚拟化等领域有较深入研究。个人博客:http://www.xuliangwei.com。

 

一、自动化部署代码实践

 

早期手动部署代码 
  1. 纯手动scp上传代码。

  2. 纯手动登陆,git pull 或者svn update。

  3. 纯手动xftp上传代码。

  4. 开发发送压缩包,rz上传,解压部署代码。

 

缺点:

  1. 全程运维参与,占用大量时间。

  2. 如果节点多,上线速度慢。

  3. 人为失误多,目录管理混乱。

  4. 回滚不及时,或者难以回退。

 

设计自动部署代码 

流程设计,确定目标。

 

1、自动部署环境

 

1)开发环境

开发者本地有自己的环境,运维配置公共开发环境,大家可共用的服务。例如:开发数据库MySQL,redis,Memcached等。

2)测试环境

功能测试以及性能测试。

3)预生产环境

生产环境集群中的某一个节点,并且连接生产库。(不对外,不做破坏型操作。)

4)灰度环境

根据不同的区域进行划分分。(生产环境)

5)生产环境

对用户提供服务的环境。

 

预生产环境由来:

  1. 数据库不一致,测试环境和生产环境数据库是不一样的。

  2. 使用生产环境的联调接口;例如:支付接口。(电商业务)

 

2、自动部署规划

 

  • 已经有一个可以上线的代码在git仓库。

  • 我们现在要做10个集群节点的一键部署,秒级回滚。

  • 所有的web服务,都应该使用普通用户。(强烈建议)

  • 所有的web服务都不应该监听80端口,除了负载均衡。

  • 那我们如何设计一套生产自动化部署系统。

 

  1. 规划。

  2. 实现。 

  3. 总结和扩展。(PDCA方法论) 

  4. 生产环境应用。

 

实现思路:

 

1)代码放置位置

Git(首先)、Svn

 

2)获取最新代码

  • 获取最新分支

  • 获取版本号

  • 获取tag包

 

3)差异解决

  • 各个节点之间差异

  • 代码仓库和实际的差异。配置文件是否放在代码仓库中。(配置单独进行存放,config.example )短信接口,支付,等敏感信息不让所有开发知道

  • 统一的.集群有10个节点。(Job节点 crontab.xml 配置文件不一样)

 

4)项目名称如何设计

项目名称_环境名称_版本_分支_时间_某开发提交

测试: rainbow_test_v1.1.1_dev_2016-08-11_12:12_xuliangwei

生产:rainbow_pro_v1.1.1_master_2016-08-11_11:11_xuliangwei

 

5)如何更新

php,tomcat需要重启,重新软链接。

 

6)如何测试

  • 测试(关键的页面,API,后台等)

  • 测试一个预生产环境,通过则继续部署,如果失败,退出部署操作。

 

7)记录日志

  • 可以部署统计。

  • 成功多少次。

  • 失败多少次。

  • 回滚多少次。

 

8)多人同时执行脚本

防止多人操作导致重复上线失败。通过lock锁对文件进行控制。

 

9)串行,并行

机器少的情况串行感觉不出什么。如果机器过多则会很慢。

 

分组部署并行部署,以及分组测试。

 

测试一个预生产环境,通过则继续部署,如果失败,退出部署操作。

 

10)部署服务器双机

防止部署系统down机,部署机代码丢失,误操作。

 

11)如何执行。

  • shell执行

  • web界面点击(自定义或jenkins)

 

12)如何实现正常回退,以及紧急回退(回滚的必要性)

通过软链接的方式来实现代码秒级别回退。

 

3、自动部署难点

 

在大公司推进自动化部署上线,是有许多的难点,根据个人公司的不同,来选择不同的方法来进行推进。

 

自动化推进难点:

  1. 能力(个人能力,团队能力)

  2. 责任(责任能否承担,敢于承担责任)

  3. 公司流程、人员、组织架构。

 

可通过如下方法推进:

  1. 目标化沟通。

  2. 责任划分

  3. ITIL

  4. 项目管理:PMBOOK

 

自动部署实践 

整个集群自动化部署流程设计如下:可根据如下思路,结合公司实际业务来编写shell脚本或者Python。 

 

  1. 获取最新代码

  2. 编译(可选)

  3. 配置文件(软连接或者拷贝)。

  4. 打包(tar,加速传输)

  5. 文件分发(Scp Rsync Salt)(不需要密码验证)

  6. 将目标服务器移除集群(注释配置文件)

  7. 解压

  8. 防止webroot站点目录

  9. scp差异文件(可能有一个节点配置文件不一样)

  10. 重启Web服务

  11. 测试

 

正常回退实践 
  1. 列出回滚版本 

  2. 目标服务器移除集群 

  3. 执行回滚 

  4. 重启并测试 

  5. 加入集群

 

紧急回退实践 
  1. 列出回滚版本(ls -l或find查出对应的历史版本)。 

  2. 执行回滚操作(删除软链接,重建软链接)。 

  3. 重启对应服务。

 

自动部署采坑 

自动化部署php环境或者java环境的过程中,那么你一定遇到了如下的问题。

 

  1. 如何应用到你的生产环境。

  2. 回退到“上一个”“正常”版本。

  3. 自动部署软连接的坑。

  1. PHP如果开启Opcache,需要重启PHP,或者清理opcache

  2. Java Tomcat是必须要重启,最好每次清理work,tmp缓存目录。

 

二、自动化系统构建实践

 

环境准备 

首先在执行脚本前,先做好初始化环境,最好是通过saltstack来完成。我这里没有那么多机器,就先用两台演示。

 

linux-node1 192.168.90.201

linux-node2 192.168.90.202

 

1、创建普通用户

useradd xuliangwei

passwd xuliangwei

 

2、配置密钥
 

\

 

3、创建相关目录

 

\

 

4、配置Nginx

 

\

 

5.配置好git环境

  • centos7部署gitlab 

  • 克隆项目

  • 最终效果如下:

\

 

剖析脚本 

查看脚本,具体配和第一部分来解读:

 

\

\

\

\

\

 

执行上线:

 

\

 

 查看当前版本

 

\

 

执行回滚操作

 

\

 

查看日志:

 

\

 

脚本其他功能 

当然此脚本功能不仅仅如此,可以通过git分支,git tag包等方式来上线,这些根据贵公司的具体业务来进行调整,也可以自己开发一个web界面来调用此脚本,这样就可以将上线工作交给开发,当然也可以使用开源jenkins来实现。

 

后期更新 

(如上脚本)+gitlab+jenkins+Sonar 构建自动化部署代码,并代码发布前质量管理。


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2016-08-23

目录
相关文章
|
19天前
|
机器学习/深度学习 运维 Prometheus
构建高效运维体系:从自动化部署到智能监控的全方位实践
在当今数字化时代,企业对运维效率和稳定性的要求越来越高。本文将探讨如何构建一个高效的运维体系,从自动化部署、持续集成与持续交付(CI/CD)、智能监控、故障管理以及数据驱动决策等方面进行深入分析和实践指导。通过这些方法,企业可以实现更快速、更可靠的软件发布和问题解决,提升整体运营效率。
|
1月前
|
运维 Ubuntu Devops
自动化运维工具的魅力:Ansible入门
【9月更文挑战第5天】在快速变化的IT世界里,自动化运维不再是可选项,而是必需品。Ansible,一款简单却强大的自动化工具,正成为众多DevOps工程师的首选。本文将带你了解Ansible的基本概念、安装步骤以及如何编写简单的Playbook,从而开启你的自动化之旅。
70 36
|
9天前
|
机器学习/深度学习 运维 Cloud Native
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化时代,运维作为信息技术的重要支柱,其效率与创新能力直接关系到企业信息系统的稳定性和业务连续性。本文将探讨如何通过技术手段,实现运维从传统手工操作向自动化、智能化的转变,进而构建一个高效、可靠的运维体系。我们将从自动化工具的应用开始,逐步深入到智能运维的实践,最终展望云原生架构下的运维未来趋势。
|
13天前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化时代,运维作为保障企业IT系统稳定运行的关键环节,正经历着前所未有的变革。本文将探讨如何通过实施自动化和引入智能化技术,构建一个更加高效、可靠的运维体系,以应对日益复杂的业务需求和技术挑战。
26 1
|
1月前
|
存储 弹性计算 运维
自动化监控和响应ECS系统事件
阿里云提供的ECS系统事件用于记录云资源信息,如实例启停、到期通知等。为实现自动化运维,如故障处理与动态调度,可使用云助手插件`ecs-tool-event`。该插件定时获取并转化ECS事件为日志存储,便于监控与响应,无需额外开发,适用于大规模集群管理。详情及示例可见链接文档。
|
23天前
|
机器学习/深度学习 运维 安全
构建高效运维体系:从自动化到智能化的演进之路
在数字化转型的浪潮中,运维管理作为信息技术基础设施的重要支柱,正经历着从传统手工操作向自动化、智能化的深刻变革。本文将探讨如何通过引入自动化工具和平台,实现运维流程的标准化与效率提升;进而利用大数据分析和人工智能技术,迈向预测性维护和智能决策支持的高级阶段。通过案例分析,揭示成功转型的关键因素,为运维专业人士提供一套可借鉴的升级路径。
|
21天前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进之旅
在当今数字化时代,运维作为信息技术领域的核心组成部分,其重要性日益凸显。随着企业业务的不断扩展和技术的日新月异,传统手工运维方式已难以满足现代IT架构的需求。因此,构建一个高效、智能的运维体系成为业界共识。本文将探讨如何通过自动化和智能化手段,实现运维效率的质的飞跃,并分享一些成功案例与实践经验。
|
26天前
|
机器学习/深度学习 运维 监控
构建高效运维体系:从自动化到智能化的演进
在当今信息技术飞速发展的时代,运维领域正经历着从传统手动操作向高度自动化和智能化转变。本文旨在探讨如何通过集成自动化工具、实施持续集成与持续部署(CI/CD)、采用容器化技术和探索AIOps实践,构建一个高效、可靠的运维体系。我们将分析这些技术如何相互配合,提升运维效率,降低系统故障率,并实现快速响应市场变化的能力。通过案例分析和最佳实践的分享,本文将为IT专业人员提供一套实用的指南,帮助他们在数字化转型的浪潮中,保持运维工作的前瞻性和竞争力。
|
27天前
|
机器学习/深度学习 数据采集 运维
智能化运维:打造高效、自动化的IT系统
在数字化转型的浪潮中,企业对于IT系统的依赖程度日益加深。如何确保系统的高效运行和快速响应,成为摆在每一个IT管理者面前的难题。本文将探讨智能化运维的概念、实施步骤及其带来的变革,旨在为读者提供一套构建自动化、智能化IT运维体系的思路和方法。
|
27天前
|
机器学习/深度学习 数据采集 人工智能
智能化运维的探索之旅:从自动化到人工智能
在数字化浪潮中,运维领域正经历一场革命。本文将带你领略从传统手动操作到自动化脚本,再到集成人工智能的智能运维平台的演变之路。我们将探讨如何通过技术创新提升效率、降低成本并增强系统的可靠性和安全性。文章不仅分享技术演进的故事,还提供了实现智能化运维的实践策略和未来趋势的展望。