讲师简介
胡俊雅:携程资深技术支持工程师
个人简介:携程技术保障中心资深技术支持工程师,负责公司 SaltStack、StackStorm 等运维平台管理,运维自动化工具开发。
给大家分享的主题是基于 StackStorm 的携程运维自动化平台。
今年5月,勒索病毒爆发,席卷全球,影响了政府部门、医疗机构、公共交通、学校、企业等等,给全世界带来了巨大损失。
如果有投资眼光的人,遇到这个事情,考虑的可能是购买比特币。而作为运维工程师,考虑的只是如何防止病毒影响自己公司的业务。相信很多运维同行,都参与到了应对勒索病毒的战役中。
关于这个病毒,虽然传播广,看起来威力巨大,但是也有很多应对措施。比如关闭445端口防止病毒传播,或者内网建立开关域名防止病毒运行。当然,这些只是 workaround 的方案,根本的,还是要及时更新服务器的安全补丁。
如果只有几台、几十台服务器,补丁更新很简单,登陆上去点下安装或者敲一条命令就可以搞定,当你有成千上万台服务器的时候靠人工是不可能的,如果一下子发一条命令下去到所有服务器也不合适,可能对业务造成巨大影响。
那么该如何自动给上万台服务器打补丁呢?
我们先看一下,一台服务器上怎么操作打补丁。
上图是个比较简单的操作流程。首先,检查服务器是否已经安装了补丁,如果已经安装流程就结束。如果还没有安装,先将服务器拉出集群脱离生产,然后安装补丁,重启服务器让补丁生效。
在拉入集群之前,可能还需要给应用点火,比如让应用建缓存,让应用恢复到正常状态再接入生产流量。这其中还有一些复杂问题,比如一个集群拉出部分服务器后,剩余服务器可能扛不住,要考虑集群可用性。
这样一个给一台服务器打补丁的过程,如果要实现自动化,就要完成两方面的任务:
一方面是实现图中整个工作流的运转;
另一方面,不可能一台台登陆服务器操作,所以要实现远程操作,也就是图中的黄色部分。
实现了一台服务器自动打补丁后,再从1扩展到1000、10000,给成千上万台服务器打补丁,要做的一件事就是灰度、灰度、灰度,重要的事情说三遍。
不管你操作多么熟练,技术多么高超,对自己开发的工具多么自信,在做生产大批量运维操作的时候,都要谨慎再谨慎,而分批灰度是做到谨慎的很好的方法,可以大大减小对生产的影响,提高网站可用性。
综合上述对实现上万台服务器自动打补丁的需求,我们搭建了一套自动化运维平台,包括三个模块:
1、使用 SaltStack 实现远程控制;
2、使用 StackStorm 实现操作流程;
3、我们自己开发的工具 JOBS 实现分批灰度。
而这样一套系统,不只是可以完成打补丁这样一个功能,基本可以覆盖各种日常运维操作自动化需求,所以拿出来和大家分享。
下面将从这三方面进行具体介绍。