背景

目前,我所在公司负责运维的1套应用子系统,由于历史原因,部署发版均需要人工协助。
每个月的版本日,开发人员提交说明文档给部署,部署人员根据文档,修改配置,最后将修好的配置文件同步到生产主机。

子系统逻辑结构

该子系统由不同的应用集群构成,一个集群下有3-5台ECS云主机(系统资源容量由访问量和并发情况决定),每个集群异地机房部署,
假设该子系统下有5个应用集群,每个集群均有1套配置文件存放在部署平台集中管理。
为方便区分,部署平台给每套集群的配置目录设置了不同的英文名称(如subsystem_A_zone_sz_cluster/subsystem_A_zone_sz_cluster_aa…)

配置管理现状

由于该子系统设计和架构方面的特点,无法通过CI/CD常规流水线工具,实现配置文件自动化部署。
涉及应用功能更新,修改配置的场景,需要开发或运维写一个部署说明文档,提交给部署人员。
部署人员接到需求后,按照部署文档,操作配置文件,最后使用部署平台管理工具,将修改后的配置文件同步至生产主机。

问题提出

部署人员在修改配置文件时,偶尔会出现误操作的场景。
配置文件均使用xml格式编写,少一个闭合标签、少一段文件类型配置,均有可能导致生产服务异常,引发生产事故。
由于该系统在资金领域重要性,必须保证所有修改均如预期(按照部署操作文档一比一修改)。

解决方案

现在假设部署人员误操作的场景无法避免,那么,有必要实现一个部署检视流程,将部署人员同步后的应用主机最新配置,和历史配置(比如昨天修改前)做对比。
可以使用Web页面,分屏显示修改前后的配置文件,使用特定前端JS库,找出差异并做重点标记,一目了然。
该功能载体是组内自行开发的运维工具平台,前端web页面严格控制人员权限,后端使用Flask,结合celery等工具框架,组成一个功能完整、权限分明、易扩展和维护的小型系统。

工具平台功能和组件说明

  • 工具平台应具备接收文件上传的服务(如sftp服务)。

  • 工具平台具备一个完善的、采用http协议实现的API接口服务。

    • 定位小型应用平台,所以这里采用Flask框架,轻量级,python语言模块丰富,扩展性强。
  • 工具平台应具备多种数据,满足不同数据格式的存储需求。

    • mysql, 存放关系型数据。

    • mongodb,存放json等非关系数据。

    • redis, 实现消息队列、中间件通信等多种功能。

  • 工具平台应具备大容量文件存储功能。

    • 部署平台每天定时任务,推送配置文件大约有2G,日积月累,势必占用大量磁盘空间。

运维工具平台原理

  • 运维工具平台-文件对比功能原理
  • 部署平台每天执行定时任务,将该子系统所有配置,同步至工具平台,工具平台挂载NAS卷,按日期妥善存储。

  • 版本发布后,部署人员登陆主机,执行类似commit命令,将应用目录打包,提交至工具平台。

  • 工具平台提供web页面,用于展示提交的文件信息。

  • 工具平台提供完善的后台异步任务功能,可以将部署人员提交(来自生产主机)目录,和历史备份做全量对比(既对比目录文件数量、文件名称,又对比文件内容)。

  • 工具平台提供web接口,创建后台对比任务。

  • 工具平台展示任务对比结果,文本文件分屏展示差异细节。

以上,一个具备文件和目录对比功能的工具平台,立项完成。