一个互联网产品由许多服务组成,而服务内包含多个模块,这些模块部署在成千上万的服务器上。由于互联网产品的特点,产品更新速度非常快,运维人员每天都要进行大量的模块维护操作。模块的运维操作涉及程序更新、配置修改、数据传输以及各种自定义的命令执行。在运维的早期,运维人员大多是通过手工操作或编写脚本的方式,将模块更新到生产环境中,我们称这个阶段为石器时代。
这个阶段的问题也比较明显,重复性的工作还需要人工介入,手工操作不可避免的会带来误操作,效率底下,甚至出现过模块上线操作排队的现象。
部署自动化方向主要解决的问题就是尽可能地将模块从发布到更新到生产环境这一过程中所有工作自动化,使部署工作更加安全和高效。一个模块部署工作的自动化,需要把这个模块的发布和更新方式固定下来;而所有模块部署工作的自动化则需要一个统一的规范和标准,基于这套规范和标准,我们可以搭建一个自动化平台来完成各项部署工作,运维人员不用再输入大量命令和编写复杂的脚本,只需在web上指指点点,即可完成成千上万台服务器的部署工作。部署自动化中关键的因素有如下几个:
1. 标准建立:是一套系统能够运维所有模块的基础,我们不可能为每个模块都开发一套自动化系统,那样成本就太高了,也不利于维护。统一标准有利降低开发和维护成本。
2. 模块信息的维护:模块的版本,部署路径,包含哪些文件,哪些是程序,哪些是配置,这些信息都部署时必须的信息,所以要统一维护起来。
3. 模块健康检查:模块部署生效后,要有某种方法来检查他的健康程度,这部分也可以抽象出一些通用的方法来实现,这样就可以代替人工的检查。
4. 全流程的应用:很多效率问题出在流程的每个环节之间连接的不紧密上,有的时候同样的事情要在不同角色间重复,如果把这些重复的劳动整合起来,各个环节连接紧密,就可以大大提高自动化程度。
运维人员通过平台,将规范、常规的操作固定化,减少重复的手工操作,避免误操作。通过模板化,根据模块信息智能化分析,实现快速发单,同时串并行控制,提升模块更新效率。我们称这个阶段为工业时代。
关联关系主要指模块之间通信,数据交互的关系。大量的模块更新、上/下线,生产环境中模块与模块之间,产品与产品之间的交互错综复杂。模块的各种变更会对上下游模块造成影响。没有统一的关联关系记录,更加复杂或者智能化的自动化操作是无法完成的,比如:
1. 当发生故障后,预案自动执行
2. 机器发生故障后,自动替换,搭建新的服务并与上下游通信
3. 多个模块在服务器上混合部署,根据机器的性能,模块的特性,动态的调整。
4. 根据当前的流量以及集群性能,动态的伸缩集群。
5. 模块需要根据IDC、网络等情况,均匀分布在不同交换机下,避免网络故障导致所有模块失效的情况。
实现上述目标,我们需要对所有信息进行管理,大概罗列下:
1. 机器信息:cpu、mem、io、磁盘空间、网卡流量、内核、基础组件等
2. 网络:交换机下机器分布情况,交换机性能,网络使用率等
3. IDC:机架位分布,电力等
4. 服务:产品与模块的关系(父子关系),模块与模块的关系(连接关系)
5. 模块内的bin、conf、data信息
6. 任务与任务的关系,任务与具体模块的关系
7. ……
对于上述信息完善记录的同时,我们还需要提供智能监控分析、调度器、分布式锁、任务管理器等基础组件,才可以真正意思上实现产品的自运维。我们称这个阶段为信息时代
转载于:https://blog.51cto.com/baidutech/748564