基于阿里云的金融运维自动化探索之旅(附PPT&工具)

齐骞 2018-02-12 19:13:23

本文根据DBAplus社群〖2018年1月27日青岛运维与架构技术沙龙〗现场演讲内容整理而成,点击文末【链接】还能下载PPT哦~

 

讲师介绍
 
我是来自希望金融的运维工程师齐骞,今天给大家带来我们在运维自动化上的一些探索和实践。

 

我们是一个面向三农的互联网金融平台,目前所有服务均布署在阿里云,使用了ECS、RDS、SLB等服务。2017年总交易额超过了70亿,业务的特点决定了我们必须采用高效、稳定、安全的运维手段,同时因为工作量大,这也使得运维团队需要采用一些自动化的手段。

 

分享大纲:

1、运维进化史

2、提升工作效率的一些尝试

3、一点微小的成果

 

一、运维进化史

 

希望金融于2015年3月18日上线,最初我们的架构如下图:

 

 

我们在跳板机上放置了一些脚本,利用这些脚本来升级,但这样效率其实很低,每个部分从升级到验证再到生产大约需要一个小时,升级过程中网站还不能对外服务。而且对于前端负载均衡的权重,我们一开始是在阿里云控制台页面上调整的,整个过程重复性的劳动非常多,也容易调错权重。在这个架构的基础上,我们就研究阿里云的API,写了一个脚本,直接通过脚本来控制各节点的权重。

 

在当时我们的业务还不多、升级也不频繁的情况下,这样还是很方便的,但随着业务的发展,这种做法就非常不合适了。

 

所以,随着业务的发展和对架构的调整,我们也开始寻找更高效的解决方案。

 

 

我们对系统的架构做了一些改动,在前端和后端之间加了一个 DNS,用来修改指向的后端,然后把原来的脚本迁移到了Rundeck上,这样我们只需要在页面上点点鼠标就可以完成代码的分发、对SLB的操作,还有对DNS的操作。

 

这里提一下,我们用了NamedManager,它实际上是提供了一个基于SOAP的接口,但那个实现存在一些 bug,不是很好用,我们采取的是直接修改数据库中的相关内容。然后在原有的SLB的基础上,我们又增加了一个用于灰度测试的SLB,开发人员在进行验证的时候就有了专门的入口。

 

这时我们就可以实现不停机地平滑发布了。但仍然存在一个问题,有些服务并不是放在后端的,而且升级过程中也不容易控制各个服务启停,于是我们对架构做了进一步的调整。

 

 

这个是我们现在的一个架构,我们使用了 API 网关,在原有的Rundeck基础上,又增加了Ansible用来处理一些更复杂的情况(相关的情况后面会展开讲)。相比于用 DNS,API网关可以精确地控制服务的启停,这样我们的升级和维护就更方便了,顺带也解决了后端高可用的问题。

 

从开始到现在,我们的效率从升级一套系统需要花费1个小时,还要加上停机的代价,发展到了可以在2小时内升级5套系统或者服务,而且基本不需要停机。

 

运维自动化和系统架构是一个互相依赖互相促进的关系,在系统架构变动之后,运维自动化相关的一些工具需要及时跟进;同时,好的自动化设计也有利于架构的稳定安全及可用性。

 

二、提升工作效率的一些尝试

 

1、Ansible应用

 

先说一下我们对Ansible的应用。除去升级,毕竟是金融方面的服务,对系统安全的要求是很高的,而我们服务器非常多,如果人工检查一遍,大概就什么工作都不用干了,而且还容易遗漏一些检查项。

 

于是我们就利用Ansible运行一个巡检脚本,如果某台机器出现一些不正常的情况(比如说新增了一个监听端口,部分重要文件被修改了)就会发出报警。再就是我们新增服务器时,有一些系统参数和组件要根据需要初始化,这个也是通过Ansible来完成的,同时也可以完成一个基本运行环境的准备,比如 Nginx、Tomcat、Node.js等。

 

系统某个组件出了问题怎么办?我们利用Ansible对系统进行批量处理,比如批量升级系统组件、打补丁等操作。

 

现在我们对一些新的服务也采用了Rundeck调用Ansible升级,降低了编写脚本后的调试难度。

 

2、定制常用服务组件

 

除去Ansible的应用,为了提高环境准备的效率,我们对常用的服务组件进行了定制。比如我们对自己所使用的OpenResty(Nginx)就加入了一些实用的第三方插件,还有Tomcat为方便进行性能监控加入了JMX模块。

 

3、定制操作系统

 

仅仅定制服务组件,仍然不够。我们对操作系统也进行了定制,加入了 Zabbix和Splunk Forwarder,内置了Ansible的SSH证书,然后制作成镜像。这样我们就可以非常方便地扩展系统的规模,从初始化一台服务器需要1个小时到现在可以在5分钟内同时完成多台服务器的布署,在紧急扩容时非常好用。

 

4、企业微信应用

 

以上这些尝试对提升运维工作效率来说,其实还可以做地更好一些,我们就打起了企业微信的主意。除去常见的告警信息,我们还做了一些信息查询和数据报表方面的小应用以及一个“一站式”运维平台。

 

 

这里介绍一下我们的手机运维平台——悟空。

 

 

我们将一些常用到的操作放在悟空里,这样就算电脑不在身边,遇到一些问题我们随手就可以处理。这个工具也是利用了Ansible对服务器进行操作。

 

三、一点微小的成果

 

我们在工作过程中也做出了一些非常实用的小工具,这里开源出来方便大家使用。

 

1、3个开源组件

 

  • Splunk微信告警脚本,在做一些告警方面的操作时,可以直接用来对接企业微信。

  • 针对 Namedmanager 添加记录的 Python 脚本,前面我说过 Namedmanager 的 API 实现有一些 bug,这个我们利用了其它方法。具体的实现,大家可以研究一下代码。

  • 通过Zabbix来监控阿里云 RDS 的一套脚本和模板,这样就可以集中分析系统性能,免去登录阿里云控制台来看相关的性能信息了。

 

以上工具可以访问https://github.com/XWJR-Ops获得,也欢迎提出更好的建议。

 

2、日志备份工具ModuleAB

 

最后介绍一下由我们运维团队自主研发的基于阿里云OSS和OAS的备份工具——ModuleAB。

 

 

ModuleAB分为两个部分:

  • 用于管理的Server和分布在各服务器上的Agent,Agent通过Inotify监控指定目录下文件的变化。当某个文件完成写入后,Agent自动进行压缩并上传OSS备份,同时向Server提交备份记录;

  • 而Server可以设定一些策略将OSS中比较老的文件转入OAS进行长期存储。在需要时还可以将OAS中的文件重新提取到OSS中以备恢复。

 

 

目前这套系统还处于公测阶段,很多功能需要优化和完善,望大家多多指教。

 

ModuleAB项目主页

https://github.com/ModuleAB/ModuleAB

 

四、结语

 

为了提升工作效率,我们团队从最初的找现成的工具,到对工具进行改造,再到自己开发一些工具,整个过程的体会是:运维其实不是一个很容易出彩的工作,同时也是非常辛苦、非常累的,但仍有很多人不知道运维是干什么的。

 

但对运维人员而言,运维也不仅仅是切切实实的每一次升级、每一次故障排除,其实它可以是一套成体系化的方法论、一种解决问题的思路。如果能从提升工作效率作为一个切入点,不仅能减轻不少自己工作的负担,还也能学到很多有价值的东西,也会活得更有成就感。

 

点这里下载干货PPT

活动预告