陈旭辉,刘 洋,张 鸿,高 鹏,许竹霞
(甘肃省气象信息与技术装备保障中心,甘肃 兰州 730020)
集群技术[1-3]是大型互联网业务、人工智能、大数 据等领域广泛使用的技术,可以提高应用系统的可靠性等性能。大型数据中心运行的一个业务系统一般由多个集群组成,每个集群都有自己的管理系统,互不兼容,运维人员在维护中不得不在多个集群、主机之间来回切换,这种方式效率低、容易出错。ansible、puppet、saltstack[4-6]等运维工具可以对集群多台主机实施批量操作,但管理功能简单、缺乏监控功能。在HPC 领域[7-9],使用的Torque、slurm、LSF、LICO等管理软件主要用于并行计算集群,不适合一般的集群。Veritas InfoScale Availability 是一个通用的集群应用管理软件[10],但是该软件存在以下问题:①应用监控不能真实反映主机在集群中的状态;②无法管理单点启动、资源池等特殊的集群;③不支持分层管理;④采用代理模式,使用不便。AIOps(Artificial Intelligence for IT Operations)将人工智能与运维结合,通过机器学习方法提升运维效率[11-12],但技术门槛高,只在大型互联网企业应用。针对上述问题,文中提出一种通用的无代理集群应用管理模型,该模型可以集中管理集群环境下的各种应用。
根据大型集群环境应用管理的需求,提出无代理分级管理模型,模型在功能方面具备监控和控制双重功能,在通用性方面支持管理所有的集群应用。
应用管理采用无代理模式,被管理计算机不用安装管理软件,所有管理命令由管理节点通过SSH在被管理节点上远程执行。
模型将集群分为应用集群、管理集群、超级管理集群3 种。应用集群指应用系统建立的集群,用于运行特定的集群应用;应用管理集群由多个应用集群组成;超级管理集群由管理集群中的管理节点组成。3 种集群的关系图如图1 所示。
图1 3种集群关系图
模型采用两级管理模式,超级应用管理系统是最高级的管理系统,负责管理超级管理集群中的应用管理系统。应用管理系统运行在应用管理集群上,负责管理辖区内所有的集群应用。
管理模型定义了系统监控、应用监控、应用控制、远程运维4 个管理功能。
1)系统监控:对主机CPU、内存、磁盘空间、磁盘IONODE 空间等使用情况监控,可以设置监控告警阈值,共享存储可以指定由一台主机监控。
2)应用监控:对主机、应用、应用组运行是否正常进行实时监测。
3)应用控制:集群环境下的应用控制操作主要包含启动、停止、强制停止、重启、主备切换、守护、监控、负载均衡等。
4)远程运维:具有远程查看进程、远程执行命令、应用备份、应用克隆等功能。
管理对象为应用、应用组、应用系统3 种。应用是应用集群中实现某一功能的一个或一组程序;多个应用按顺序组成应用组;多个应用组按顺序组成应用系统。
通用性要求模型支持各种集群应用的状态监控和维护。在监控方面,模型支持主备应用集群、并行应用集群、资源池应用集群、互斥集群4 种集群。在启动、停止等维护方面,支持多节点并行启动、均衡方式启动、单节点启动、互斥启动4 种集群启动方式。应用集群的分类标准如下:
主备应用集群指一个应用只能在集群中一台主机上运行,其他主机作为冷备。并行应用集群指应用在集群中所有主机上运行。资源池应用集群指应用在集群中任意几个主机上运行,且运行应用的主机数量小于集群节点数量。当两个集群以互斥方式运行时为互斥集群。
多节点并行启动指应用在集群中所有主机上同时启动。均衡方式启动指应用在集群中部分主机上同时启动,启动主机按CPU 负载自动选取。单节点启动指应用在集群中的一个主机上启动。互斥启动指一个集群启动前,必须停止另一个集群。
输入是用户在执行管理命令时使用的参数,模型的输入参数有3个,第一个为命令,第二个为管理对象,第三为主机,格式为:<action><any|应用系统|应用组|应用><any|-H host>,其中第二个和第三个参数可以为多个,可以用any 表示全部应用或全部主机。
应用监控输出按应用分组显示,对异常的组或主机以红色显示。输出格式有短格式、长格式、监控格式3 种。短格式显示应用状态和每个主机的状态;长格式在每一行信息前增加“系统.应用组.应用”;监控格式只显示异常的信息。输出格式根据第一个参数自动判断。
利用提出的管理模型,采用bash 脚本语言设计了一套应用管理软件,设计原则及架构如下。
1)无依赖:采用bash shell 脚本语言开发,不依赖任何第三方模块或中间件,可以直接在Linux 机器上运行。
2)无代理:采用无代理模式,软件只需部署在一台管理机器上,被管理机器上不需安装任何软件。
3)低开销:监控行为要尽量减少对被监控机器的干扰,降低给被管理机器带来的额外开销。
软件采用分级管理模式,由超级应用管理软件和应用管理软件两部分组成。超级应用管理软件管理多个应用管理软件。应用管理软件由应用控制、应用监控、系统监控、维护工具、日志收集、结果展示等模块组成。系统架构如图2 所示。
图2 应用管理软件架构
2.3.1 应用状态评估技术
该软件对主机及应用状态评估采用运行模式、进程、进程数量3 个维度结合的评估方法,相比于文献[13-15]中使用的方法,能够更加全面、准确地反映每台主机、每个应用在整个集群中的状态。
2.3.1.1 监控项
监控项是用来监控应用状态的参数,由进程关键字和进程数量两项组成。进程关键字用能够唯一识别一个进程的字符串表示,可以使用复合关键字。进程数量是正常状态时该进程的数量,用一个整数或范围表示。一个应用可以配置多个进程监控项。
2.3.1.2 主机状态评估
主机状态采用两次评估法,首先根据监控项获取每个主机上进程的启动情况,然后依据该应用中所有进程的状态,将每台主机状态预评估为正常、部分异常、未启动、SSH 异常4 种。其次在预评估基础上,结合应用运行模式将主机状态修正为正常、部分异常、未启动异常、SSH异常、违反运行模式、空闲6种状态。
2.3.1.3 应用状态评估
利用主机状态,根据应用运行模式对应用状态进行评估,评估规则如下。
主备模式:只有一台主机状态正常,其他未启动,则应用为正常;主机状态全部为异常,则应用为异常;两台以上主机正常或存在部分异常的主机,则应用为部分异常。
并行模式:所有主机状态正常,则该应用状态为正常;若所有主机状态异常,则应用状态为异常;至少有一台主机异常,则应用状态为部分异常。
资源池模式:集群内正常的主机数量在设定的范围内,且无异常或部分异常主机,则应用状态为正常;主机全部异常,则应用状态为异常;若正常的主机数量超过设定范围或存在异常的主机,则应用状态为部分异常。
互斥模式:互斥应用需要根据两个应用的状态进行再次评估,如果一个应用正常,另一个异常,则将异常的应用状态修正为正常,如果两个应用都正常,则将它们都修正为异常,其他情况不用修正。
2.3.2 并行化
在软件执行的不同阶段,采用了应用系统间并行、应用组间并行、应用组内并行、应用内多主机并行、主机内监控命令并行5 种并行技术,将可以同时执行的命令全部并行化。在编程中,使用了bash 的进程并行、函数并行、代码块并行3 种并行技术。
2.3.3 缓存加速技术
该软件采用了应用配置缓存、SSH 命令输出缓存两种缓存技术。1)应用配置缓存:在首次执行应用管理命令时,将解析后的应用配置文件缓存到内存,后期直接从内存读入配置。2)SSH 命令输出缓存:对一台主机首次执行SSH 命令时,执行合并后的监控命令,获取该主机上所有应用的状态并缓存,其他并行执行的进程需要该主机上应用的状态时,直接从缓存中读取,不需执行SSH。
2.3.4 多叉树剪枝分层算法
在对应用组进行启动、重启操作时,必须依照应用组之间的依赖关系按顺序执行,软件有先启动依赖、后重启依赖两种依赖关系。依赖关系一般由依赖图或依赖树描述[16],文中使用可以体现层次关系的依赖树来表示多个应用组之间的依赖关系,并采用多叉树剪枝分层算法对依赖树进行剪枝,生成一颗无重复的多叉树。该算法首先使用前序遍历法搜索每个节点,并裁剪、移动重复的节点,最终生成带有分层信息的无重复多叉树。
重复节点裁剪规则:不同层重复的节点将低层的子树剪枝后接到高层,同层重复的节点保留右节点删除左侧节点,其下子节点合并到右侧节点的子节点中。
图3(a)是根据应用组A 的依赖关系生成的初始启动树,共5 层,其中应用组E、F 组有重复,经过裁剪后生成图3(b)所示的无重复6 层多叉树。
图3 初始启动树和裁剪后启动树
2.3.5 资源池负载均衡调度算法
资源池负载均衡调度负责将一个应用按照主机CPU 负载合理地加载或迁移到适合的主机上。调度策略如下:初次启动时,应用自动加载到CPU 负载最轻的主机上。后期负载均衡调度时,应用迁移到可用主机中CPU 负载最轻的主机上,且每次调度只能迁移运行该应用的主机中一半的主机。
Veritas InfoScale 是功能比较全面的集群应用管理软件,为应用提供了高可用方案,可以实现对集群中应用的启动、停止、监控、故障恢复等操作。文中的应用管理软件可以实现InfoScale 的应用管理功能,同时还增加了一些其不具备的功能,可以管理任意集群应用,二者功能比较如表1 所示,表中的“是”表示支持或有,“否”表示不支持或没有。
表1 应用管理系统与Veritas InfoScale的功能比较
甘肃省气象局大数据云平台有Linux主机147台,按照功能划分为12 个相对独立的应用系统,共有105 个应用组、367 个应用,一个应用表示一个应用集群。每个应用系统建立一个管理集群,在每个管理集群中选2 台主机作为管理节点,部署应用管理软件,然后将24 台管理节点组成超级管理集群,选择其中任意一台作为超级管理节点,部署应用超级管理软件。系统划分如表2 所示。
表2 甘肃气象大数据云平台应用系统
1)通用性方面,软件支持大数据平台中所有的应用集群,管理的应用集群达到360 多个[17-18]。如spark 集群的应用组包含两个应用,master 应用以主备模式运行,可以运行在集群中任意一台主机上,有浮动IP。slave 是资源池模式应用,运行在除master节点之外的任意2 台主机上。
2)监控方面,软件可以真实反映集群应用的运行情况,可以快速定位故障节点及故障原因,并可以通过微信向管理人员发送告警信息。图4 是spark 应用组正常运行时监控命令输出结果,其中第3 列表示正在运行的进程数量,第4 列表示配置的进程数量,虽然部分主机上进程没有启动,但符合集群运行模式要求,主机及应用状态均为正常。
图4 spark应用组正常时监控输出
3)监控性能方面,采用并行技术可以明显提高监控的效率。图5 是不同并行方案所需的时间。在未使用并行技术时,对147 台主机的应用状态监控需执行600 多次SSH,用时2 min 以上;在使用5 种并行及缓存技术后,只需执行147次SSH,用时不到5 s。而且增加主机数量对监控性能影响不大,5 种并行技术中,应用内多主机并行效果最明显,其次为应用组内并行。
图5 不同并行方案比较
文中提出的Linux 集群应用无代理分级管理模型支持各种类型的集群,具有监控和管理功能,管理效率高,可以用于设计大型复杂业务的统一监控管理平台。
利用bash 设计的Linux 集群应用管理软件实现了甘肃省气象大数据平台所有应用的集中统一管理,降低了应用管理的难度,减少了运维工作中的失误,提高了运维的效率,提升了应用系统的可用性。