作者简介
鲁逸丁 中国银行卡组织运维架构师
长期从事金融信息系统运维工作,专注于运维体系建设,对金融企业云计算运维具有深刻理解,银行卡组织云运维平台负责人。
前言
大家做运维普遍经历这样的过程:
首先我们会把操作做一个标准化,这个阶段是运维质量的提升的阶段。
在标准化实施完以后,由于数目的增加,或者是一些运维场景的增多,我们会逐步的进行一些工具化和自动化,这个阶段我们的运维的效率得到提升。
但是众多的工具以及自动化脚本,会让我们的管理过程中比较困难,随着人员的变动或者是一些工具维护过程中的差错,我们的自动化运维工具的受众群体不太稳定。
这个时候我们就需要一个平台将我们的运维工具以及运维过程中的一些经验进行沉淀,借助这个平台实现我们的智能化运维,于是我们从运维人员的需求和体验出发出发进行了一个运维平台产品化的构建。
银行卡组织云运维平台的概况
我给大家介绍一下我们IT体系建设的情况,差不多十年前我们以ITIL为基础构建了流程平台,变更、事件、问题、服务等流程通过这个平台进行流转。
在五年前我们从开放平台转化为云运维平台,在这个过程中,我也建立了IaaS虚拟化资源平台,同时我们也跟业界一样构建了CMDB,用于同意管理运维数据。
但是在运转下来以后,我们发现还有很多需求需要实现,主要三个方面:
软硬件节点数目不断增加,日常运维迫切需要一个适应各种运维场景的高效自动化平台,减少重复劳动。
需求是将运维人员的经验需要在一个平台沉淀,形成一个智能化场景库,将运维服务或能力的复用,从而提高整体运维质量和运维效率。
第三个需求是在传统的流程化运维的基础上,注入智能化场景,将运维工作从依靠人工判断、流程决策,逐步转为依靠机器智能分析判断。
所以基于这三方面需要,我们建设了一个云计算环境下面向规模化运维的平台。
云运维平台主要解决的是以下几个痛点:
- 互联网业务在我所在的公司开展特别快,还会有一些营销活动,这样就需要运维有一个快速的响应。
- 我们的硬件数目有了一个几何级的增长。
- 最近几年频繁的使用一些开源架构新兴技术,对运维技术增加了要求。
- 运维工具散乱,缺乏同同一管理。
- 我们运维数据没有一个同一的的展示
- 第六个是我们的人力增长目前比较缓慢,我们在审计过程中会有一些人工安全性方面的问题。
出于这些方面考虑,我们运维平台的愿景,是运维的质量以及可运维设备的数量不因我们的运维人员的数量或者是技能的变化改变,从而实现我们的运维的数量和质量都达到一个可控的。
银行卡组织的云运维平台是个怎样的产品
接下来给大家介绍一下我们运维平台这个产品,主要四个方面:
第一是资源统一调度,我们可以将资源整合,我们通过资源平台提供的API包括,包括Openstack、数据库管理平台、容器管理平台、分布式存储管理平台、网络管理平台、安全管理平台,将我们所常用的运维操作,都整合在我们这个运维平台中,将我们的运维流程尽量的简化,实现自助化运维。
第二,我们希望借助我们运维平台尽量实现自动化管理,减少我们手工操作,实现自动的数据收集、自动应用安装、自动配置和更新、自动数据分析、自动扩展、自动备份恢复、自动鼓掌处理等。
第三是多维为可视化,让各个角色有一个在平台上都有一个独立的视角,以角色重定义运维。如网络管理视图,系统管理视图、监控视图、报表视图等。统一报表系统,统一全局数据并提供可自定义多维报表。
最后一个就是实现高性能,我们希望我们这个运维平台可以满足万级节点的并发收集、执行。
云运维平台建设场景
这个是我们运维平台的场景规划图,下面是我们一个核心的调动模块。包括执行、采集以及和其他流程的对接,中间是我们这个运维平台主要要做的事情,我们把这个叫做运维OS,图表管理实现自动化拓扑和自定义报表,全生命周期管理是实现应用系统从上线到下线通过我们这个平台实现一个自动化的实施。
运行环境管理和运维工具给实际的运维人员提供一个比较便利的一个操作环境,包括备份比对,作业编排以及参数管理等,容量管理我们是希望通过我们这个平台将监控的数据进行一个汇总,实现对容量的管控。
高可用管理对我们各个应用系统,各个层面的组件的可用性进行一个统一的管理,可用性监控,自动化可用性演练。
重点场景一:生命周期管理
第一个是生命周期管理,我们周围在以前的一个部署过程中,通常是这样的,开发人员写一个是需求文档通过内部流程给运维接口人,他会协调各资源管理员分配资源,形成部署方案,最后将这个部署方案通过人工构建变更的方式实施。
这里面有两个问题,一是传递过程中可能偏差,第是周期比较长,我们希望借助我们的云运维平台实现参数级别的电子化传递,以及自动化的部署。也就是用户在我们平台上面选择需要的组件,以及资源需求,由我们的管理员分配、确认实际的部署资源。
最后由平台进行一个自动化的部署,并在部署过程中自动进行各项规范标准的实施。
重要场景二:运行环境管理
第二个场景是我们的运行环境管理,包括资源类的CPU、内存、IP、端口、访问关系等,以及我们运维人员关注的,定时任务、备份策略、自启动项目等。我们通过云运维平台对运行环境进行管理,替代原有excel表格,并进行自动化设置。
重要场景三:持续部署管理
第三个场景是持续部署管理,传统部署方式我们会遇到一些问题,包括:应用版本通过版本服务器多次人工传递,各应用的配置、维护脚本没有统一标准;通过表格人工维护各环境的参数差异,不同环境人工修改参数;应用的安装过程视变更人员经验,异常告警没有统一标准,回退方式不统一等。
为此,我们做了一个持续发布的标准,而且将这些标准借助这个平台可以实施,包括:统一版本传递路线,版本标准化;构建生产、测试、研发环境配置差异库,平台根据所在环境自动生存对应参数;标准化应用部署过程,多节点安装顺序*编排,按照编排顺序进行安装;标准异常告警;故障时按照编排顺序逆向回退。
重要场景四:运行环境维护
第四个场景是是常用运维工具集成,包括我们常用的应用重启、健康检查、隔离、恢复工具,服务器的一些物理测试,以及自动装机后自动接入OpenStack或者是其它资源管理平台的自动对接,网络设备的健康检查,还有一些定期的安全检查,我们把这些工具集成在我们的云运维平台上。
重要场景五:画像场景
第五个场景是我们应用为维度的应用画像,通常我们一个应用可能有很多的元素,大家想知道这些元素会比较困难,例如这个应用的架构是什么样的,可能只有在一些应用的开发设计人员,或者是一些骨干的心中才能知道,也不一定特别的准确。
应用的参数可能有很多要到服务器查。应用版本、参数变迁、维护记录需要翻变更,应用各个层面的容量情况需要找各专业室查。应用的情况普遍说不清,要废很大的力气才知道是什么样。
我们在云运维平台里面,借助我们之前提到的各种产品管理工具,容量管理和高可用管理,我们放在一个视图的画像里面,根据变迁维护历史以及应用的容量、高可用信息,还可以计算出这个应用他的运维方面的成熟度。
云运维平台技术方案
在硬件资产层面我们通过一些snmp等工具获取状态及操作,虚拟资源层面我们目前借助openstack及其它管理平台提供的接口进行管理,操作系统之上我们通过自主开发的核心调度系统对linux及应用进行管理。
我们整个平台是使用权的一个部署,除了下面的缓存和MySQL其他所有的组件都是全容器的部署,前端使用apache、haproxy、keepalived;后端使用jboss、rabbitmq、ansible、zookeeper;数据存储采用mysql、redis、ceph等;另外我们还有一个安全服务模块,检查是否会有一些高危操作。
业务流技术
上图是我们具体的一个业务流程,左边是我们这个云运维平台的界面,一个运维请求会被封装为一个消息会放到消息队列里面,schedule模块接收到消息后按照调度算法,自动分配给ansible节点,ansible节点通过ssh到服务器上执行,并将执行结果异步返回给消息队列。
schedule的调度算法与Ansible分布式架构
schedule的调度算法,是我们考虑到我们生产环境有很多的分区,我们会根据他的IP自动生成一个所属区域的tag,schedule在发现这些消息以后,他会针对你tag以及目标机器数据进行拆分,我们把这个详细拆分几个消息,ansible去订阅处理自己的消息。
我们在ansible上进行一个改造,所有任务均有唯一的id,处理完成后返回消息,从而实现多任务的并发异步执行。
数据可视化
我们在数据可视化方面,我们通过采集器采集信息,通过同步器同步其它平台信息,存储在核心数据库,通过阈值库产生进行对比告警,通过分析函数库进行性能分析,并产生一些我们运维需要的报表进行可视化管理。
银行卡组织云运维平台成果展示
我们平台的建设结果,我们这个平台上面已经完全建设的一些部分,另外有一些功能我们在开发,这个是我们在实际中已经上线的平台,大概有几千太的虚拟服务器,我们首先看到这个信息中心里面有一个机房,我们看到一些机柜,并且配置好每一个机柜里面对应的哪些服务器。
这个交换机/F5-物理服务器-虚拟服务器自动拓扑的页面,是我们根据snmp抓取交换机、F5信息,通过anbible抓取物理机的信息,通过openstack抓取虚拟机的信息,根据上述消息自动生成拓扑。
数据同步可以自定义定时抓数据。
这是一个实际的备份管理的功能,我们可以用我们的这个平台选取相应的服务器,通过平台自助定时、即时备份。
自助化启动项管理。
自助化定时任务管理。