高性能计算集群运维自动化研究
2017-10-13葛佳斌
◆郭 宇 葛佳斌
高性能计算集群运维自动化研究
◆郭 宇 葛佳斌
(中国航发商用航空发动机有限责任公司设计研发中心研发体系与仿真技术部 上海 200241)
随着高性能计算技术的发展,越来越多的行业都将高性能计算作为重要研发手段,依赖系统管理员手工进行运维的工作方式面临越来越多的挑战,逐渐表现出种种不足:运维效率低,容易出错,不利于知识传承,针对高性能计算集群运维工作特点,梳理总结出运维自动化工作三方面主要内容:系统监测自动化、数据分析自动化、问题处理自动化,研究了三步走的运维自动化实施途径:操作流程化、流程标准化、标准自动化,通过运维自动化系统设计和巡检脚本可视化配置为例介绍了运维自动化的技术实现要点。
高性能计算;集群管理;运维;自动化
0 引言
随着高性能计算技术的发展,越来越多的行业都将高性能计算作为重要研发手段[1]。高性能计算集群规模越来越大,系统运维面临越来越多的难点,包括服务器节点类型复杂、运维问题类型众多、问题发生不可预测等[2],以往依赖系统管理员手工进行运维的工作方式逐渐表现出不足:运维效率低,容易出错,不利于知识传承。
在大规模运维场景下,将重复度高的工作,基于监控数据智能决策触发,实现无人参与的自动操作的运维能力,称为运维自动化[3]。运维自动化技术在业界广泛应用,如腾讯蓝鲸织云系统[4]、大众点评运维自动化系统[5]和东方物探[6],实现了知识沉淀,工作效率与可用性提高,业务弹性扩展。
目前运维自动化技术在互联网企业和传统服务器运维中应用较广泛,为了应对高性能计算运维工作的种种挑战,本文将探讨如何在高性能计算运维中应用自动化技术。
1 运维自动化
在大规模运维场景下,将重复度高的工作,基于监控数据智能决策触发,实现无人参与的自动操作的运维能力,称为运维自动化[3]。高性能计算运维自动化除了具有上述特点以外,还具有其特定的业务应用场景和需求,包括与信息系统融合、系统配置动态调节、调度策略配置,计算应用问题处理等。总体来讲,高性能计算运维自动化包括以下三方面内容:
系统监测自动化。系统监测是运维自动化的基础,自动化抓取服务器硬件、操作系统、作业调度系统、计算应用的各种状态信息,如CPU使用率、作业负载、存储使用率等,全面掌握集群状态,并将部分运行数据存储于数据库,为业务运维提供原始信息与数据。
数据分析自动化。监测数据一般为运行信息,无法直接用于业务运维,必须对其进行分析处理,形成业务运行数据,与运维事件特征库比对,可实现运维问题自动识别。如自动监测得到各节点CPU使用率和作业状态数据,将作业所在节点CPU使用量与申请资源比值作为作业负载健康度,一般情况下该值为1,上下波动5%,如偏差过大,说明作业运行出现问题。
问题处理自动化。经分析的业务数据出现异常时,说明业务存在运行问题,需运维人员处理,其中大部分是重复出现的简单问题,占用了运维人员大量时间。将运维人员处理问题的方法总结形成标准化工作流程,或将复杂操作封装为可视化操作,业务异常发生时,自动触发问题处理流程,或由管理员一键式操作恢复,保证业务连续性。如饥饿策略阈值时间在系统负载低时可适当加长,当系统负载高时需缩短,运维人员不必24小时职守系统调整策略,当业务运行数据满足触发条件,系统自动实现策略调整。
图1 高性能计算集群运维架构
2 实施路径
运维自动化是一个循序渐进的过程,高性能计算集群建设伊始,首先需梳理运维业务流程,待业务流程成熟后再考虑通过自动化手段提高运维效率。一般来讲,运维自动化的实现分为三步[7][8]:操作流程化、流程标准化、标准自动化。
2.1 操作流程化
操作流程化是运维自动化的基础,运维操作都有不同操作流程,要整理出核心逻辑算法,定义输入输出,形成操作脚本,一般运维人员都能够做到这一层,形成一系列运维脚本集,此时脚本集还分散存储于各系统管理员处。
2.2 流程标准化
运维脚本集往往是自发形成的,不同运维人员编写习惯不同造成脚本集的重用性和维护性较差,必须统一脚本编写标准,形成运维脚本标准架构。首先要统一脚本开发语言,如涉及操作系统的操作使用shell,其他操作使用Python,其次要统一脚本编写习惯,包括变量命名,依据数据逻辑分离等原则建立配置管理数据库,最后要从顶层业务场景梳理脚本集,对脚本分类分层,复杂脚本分解封装为原子操作,实现脚本功能的复用,最终形成运维体系标准架构。这一步是运维自动化的重中之重。
2.3 标准自动化
利用前一阶段形成的运维体系标准架构,以服务的形式将各功能封装,形成自硬件至应用的运维自动化架构。硬件系统层定期自动抓取信息,存入数据库,数据分析层自动根据数据库中存储的运行数据分析形成业务数据,通过与运维事件特征库比对识别出运维问题,并自动触发业务处理层解决运维问题。在统一的运维架构下,做到自动化是水到渠成的事情。
运维自动化不能为了自动化而自动化,20%的重复性工作消耗了80%的精力,只要集中精力把20%重复性工作做好基本上就可以达到很好的状态,能够释放精力去解决更重要的问题,而不是任何场景都要追求到完全极致自动化[3]。
3 系统实现
为了做到自动化,必须做到以下两点:数据与逻辑分离,逻辑与操作分离。根据这两条原则,运维自动化系统一般按照三层架构设计,数据库、后端控制脚本和前端操作页面。
3.1 功能模块设计
根据运维自动化业务模式,系统分为系统监测、统计分析、任务配置和文档管理四个模块,系统功能架构如图2。系统监测模块负责监测服务器硬件、操作系统和调度系统各项服务以及用户作业的状态,并将必要的信息存储到数据库中作为统计分析和任务执行的依据。统计分析模块主要用于分析系统日志、统计系统与作业运行数据,为任务执行实时提供决策数据支持。任务配置模块可实现众多服务、任务的可视化配置和自动化问题处理,相应的配置信息和问题处理逻辑存储在数据库中。文档管理模块为管理员提供了问题追踪、通知管理和技术笔记等功能,一站式解决管理员的文档管理需求。
图 2 系统功能架构
3.2 主要技术介绍
本系统主要使用MySQL、XML、PHP、Python、HTML5、CSS3、JavaScript等技术实现运维自动化,并集成Ganglia、Mantis等成熟工具。
MySQL是一个关系型数据管理系统。MySQL所使用的SQL语言是用于访问数据库的最常用的标准化语言。本系统中使用MySQL数据库作为主数据库存储各类基础信息和运行信息。
XML可扩展标记语言是一种简单的数据存储语言,使用简单的标记描述数据,本系统用于存储页面配置信息。
PHP是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于web开发领域。本系统中PHP主要用于编写部分后端逻辑和生成HTML代码。
Python是一种面向对象、解释型的编程语言,也是脚本语言的一种。Python具有丰富和强大的库,能够把其他语言很容易地连结在一起。本系统中Python主要用来编写各类后端脚本程序逻辑。
HTML5是一个新的网络标准,目标在于取代现有的HTML4.01、XHTML1.0和DOM Level 2 HTML标注。本系统中HTML5用于生成各种页面。
CSS即层叠样式表(Cascading StyleSheet)。在页面制作时采用层叠样式表技术,可以有效地对页面布局、字体、颜色、背景和其他效果实现精准控制。CSS3是CSS技术的升级版本,CSS3语言开发是朝着模块化发展的。
JavaScript是一种直译式、动态类型、弱类型、基于原形的脚本语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言。JavaScript作为前端的唯一脚本语言,在页面设计与开发过程中不可或缺,它拥有众多优秀库。本系统开发中主要使用了jquery和Highcharts两个JavaScript库。
Ganglia是一个跨平台、可扩展的高性能计算集群分布式监控系统,可监控集群中各类节点的各种状态信息,并将历史数据以曲线方式呈现。本系统中将Ganglia集成于系统监测模块,用于硬件和系统监测。
Mantis是一个轻量级的缺陷跟踪系统,可跟踪缺陷变更历史,并支持缺陷统计功能。本系统中将Mantis集成于文档模块,用于追踪各类问题解决。
3.3 技术实现
本文以实现巡检脚本可视化配置功能为例介绍详细技术实现。
系统运行于Apache服务器上,使用MySQL数据库存储监控、统计、配置和文档信息等数据,后端整合为具备通用功能的模块,模块直接与数据库交互,模块间不存在数据交互关系,使用PHP和Python开发,并通过数据库接口对数据进行读取和更新,其中PHP负责与前端页面数据通信,Python负责运维逻辑。前端页面面向管理员操作设计,尽可能简化操作提高效率,页面配置相关的信息存储在XML文件中,HTML代码由PHP生成,页面样式(布局、控件的颜色和动态效果等)由CSS决定,JavaScript负责页面动态功能的实现。
图3 系统技术架构
高性能计算集群配有多台管理登陆节点保证服务的连续性和可用性,这类节点上通常使用crontab在各台管理登陆节点上分散配置多种自动运行的巡检脚本进行系统检查、配置调整等操作,这类操作会对所有集群节点遍历执行,运行时间也长短不一,占用服务器负载也有所不同。由于缺少全局性的集中管理,任何对巡检脚本的配置调整都是对管理员的记忆力和系统熟悉程度的挑战,因此很有必要对这些巡检脚本统一部署,达到协调执行时间与运行负载,一方面在服务器间根据巡检脚本不同负载平衡分配,保证各服务器整体负载均衡,另一方面根据巡检脚本运行特征合理分配巡检脚本运行时段,保证对业务的影响最小。本系统中使用MySQL数据库统一存储整个集群各类巡检脚本及相关配置信息,在页面中集中显示,便于管理员集中调整配置,并通过后端脚本程序将配置推送到相应服务器上执行。
MySQL数据库中包括了存储运维自动化系统用户、作业、计算机节点、应用软件等基础信息的数据表和更新日志、巡检脚本、巡检脚本运行日志等运行数据信息的数据表,巡检脚本数据表结构如表1所示。
表1 巡检脚本数据表
自定义类mysqlCrontab控制巡检脚本的属性与操作,该类包括了巡检脚本的各类属性信息(对应于数据表中的数据)和巡检脚本的操作(运行、数据库查询、日志记录等),功能实现逻辑如图4。
图4 巡检脚本可视化配置实现逻辑
在运维自动化系统服务器crontab中配置执行巡检脚本的Python程序,代码如下:
from commands import getstatusoutput as pyGet
def execute(self):
#执行mysql查询语句,获取mysqlCrontab表中isOn字段为#true的记录
records = mysql(self.sql)
#开始遍历记录
for record in records.split(" "):
#获取记录各个字段的值,各字段含义见表。
node, minute, hour, day, month, week, script = record.split(" ")
#根据minute、hour、 day、 month、 week的值
#及self.minute、self.hour、self.day、self.month、self.week的
#值,判断是否执行该条记录的脚本
if self.isExecute(minute, hour, day, month, week):
#记录log信息的sql语句
sqlLog= "INSERT INTO webpage.logCrontab(node, script, start, end, error)
VALUES('%s','%s',%d,%d,'%s')"
#脚本执行的错误信息
error = ""
#脚本执行的开始时间
start = int(time.time())
#执行脚本
status, errorInfo = pyGet("ssh " + node + " " + os.path.join(self.path, script))
#如果有错误信息则记录错误信息
if status:
error = errorInfo.split(" ")[-1]
#脚本执行的结束时间
end = int(time.time())
#向数据库插入log记录
#log记录可以在统计页面上查看
mysql(sqlLog % (node, script, start, end, error))
#停止遍历,程序执行完毕
return
mysqlCrontab表中记录了巡检脚本、执行时间和频率,前端页面可直接修改其内容。页面中数据修改后即推送至数据库,并通过运维自动化系统巡检脚本执行程序运行,从而实现巡检脚本配置可视化。
图5 巡检脚本可视化配置页面
前端的页面样式由CSS负责,例如表格的浅灰色和深灰色交错的展示效果可通过如下CSS代码实现:
table tr:nth-child(odd) { background-color: #DDD }
table tr:nth-child(even) { background-color: #EEE }
表格各种动态功能通过JavaScript实现,动态功能包括:排序、筛选、在线编辑等。以在线编辑为例:通过定义Click事件,使鼠标点击单元格后,单元格进入编辑状态;编辑完毕后,在空白处点击鼠标,触发定义的Blur事件,单元格显示为橘红色,编辑后的数据通过AJAX技术以Post的方式传到服务器端。
图5为巡检脚本可视化配置页面,该页面的HTML代码由PHP读取数据库中mysqlCrontab表内容后动态生成。页面内容被修改后,数据会传至服务器端,并通过PHP数据库接口,对mysqlCrontab表的对应字段进行修改。
4 结语
运维自动化通过数据收集、处理分析等技术,提升了人工运维工作效率,运维自动化的关键在于业务数据分析的准确度、问题特征的明确化和处理流程的有效性,目前的自动化只是部分取代人工运维,今后将从自动化向智能化发展,通过对历史运行数据分析实现业务数据智能提取、问题特征智能识别和处理流程智能归纳,实现真正意义上的运维自动化、智能化。
[1]袁国兴,姚继峰.2016年中国高性能计算机发展现状分析[J].计算机工程与科学,2016.
[2]林皎,徐伟平,张武生,杨广文.百万亿次集群系统的设备管理与系统运维实验技术与管理[J],2013.
[3]梁定安.显微镜下的运维自动化[EB/OL].http://diyi tui.com/content-1472138007.52047416.html.
[4]徐勇州.腾讯织云自动化高效运维体系演进[EB/OL]. http://www.infoq.com/cn/presentations/tencent-operation-and maintenance-system-evolution.
[5]张冠宇.大众点评运维架构图文详解[EB/OL]. https://www.douban.com/url/1153868.
[6]曹士炳,王建新,张颖.浅谈高性能计算机运维的发展趋势[J].物探装备, 2012.
[7]马超,冯世杰,王国仕.Linux系统自动化运维管理平台实现及应用[J].通讯世界,2015.
[8]毛承国,张卫华,张进铎,马迅飞,史哲,方凯.大规模集群运维自动化的探索与实践[J].信息安全与技术,2014.