气象高性能计算机故障监控系统的设计与实现
2017-08-24许皓皓李从初姚浩立徐振宇
许皓皓+李从初+姚浩立+徐振宇
摘 要: 气象高性能计算机在大幅提升气象部门数值预报能力的同时,给运维工作也带来了挑战。提出了一套轻量级,可拓展的高性能计算机故障监控系统设计方案,详细描述了系统的开发过程,以及开发过程中涉及问题的解决办法。系统部署后,宁波气象高性能计算机故障业务影响率从60%降低到10%以下。实践证明,该系统符合宁波气象的实际需求,也为高性能计算机故障监控系统的深入研究和开发提供了思路。
关键词: 高性能计算机; 气象; 故障监控; 监控系统
中图分类号:P409 文献标志码:A 文章编号:1006-8228(2017)08-90-04
Abstract: The meteorological HPC (high-performance computer) has greatly improved the numerical weather prediction (NWP) ability of meteorological department, and has also brought challenges to the operation and maintenance. In this paper, a lightweight and scalable design scheme of HPC fault monitoring system is proposed. The development process of the system and the solution to the problems involved in the development process are described in detail. After the deployment of the system, the business impact failure rate of Ningbo meteorological HPC has been decreased from 60% to below 10%. Practice has proved that the system conforms to the actual demand of Ningbo meteorological, and also provides a train of thought for the further research and development of HPC fault monitoring system.
Key words: HPC; meteorological; fault monitoring; monitoring system
0 引言
近年来,高性能计算机已经成为提升气象部门数值天气预报能力的关键因素[1-4]。气象高性能计算机运算任务密集,输入和输出数据量大,对时效性和稳定性要求很高[5],一旦发生故障,轻则对天气预报的制作产生影响,重则对防灾减灾和人民群众的生命财产安全产生威胁。各级气象部门在高性能计算机系统的建设、管理和监控上进行了大量的研究。宗翔等[6]对高性能计算机系统的架构和技术方法进行研究,设计了国家级气象高性能计算机管理与应用网络平台;吕爽等[7]对四川省气象局IBM Flex P460高性能计算机系统的架构和管理方法进行研究,为西南区域气象中心数值预报系统的运行和研发提供了理论支撑。通过对高性能计算机系统的架构和技术方法进行研究,提升系统的健壮性,有效避免设计缺陷导致的系统级故障,如果能开发一套高性能计算机监控系统,对各类运行级故障进行监控报警,会有很高的实用价值。针对这一问题,秦运龙等[8-9]使用shell语言,基于Routrek.granados模块进行操作指令传递,通过Web页面对所有高性能计算机系统及作业进行监控和管理,设计并实现了华中区域高性能计算机监控管理平台,一定程度上解决了气象高性能计算机系統运行监控问题,但系统也存在一些问题,如监控平台以网页方式存在,不支持手机短信方式提醒,无法实现无人值守情况下的运行监控和实时报警需求。
宁波市气象局高性能计算机监控系统满足了高性能计算机运行级故障监控和报警需求,打通了运维工作最后一个环节,有效提高了运维人员的故障处理速度,提升了气象高性能计算机的业务可用性。
1 监控系统需求分析
宁波市气象局IBM Flex高性能计算机(图1)主要运行WRF中小尺度数值天气预报模式,是提升宁波气象部门综合预报能力和精细化“无缝隙”数值预报的重要工具和载体。该系统由56台计算节点、1台管理节点、1台数据处理节点、1台登陆节点、2台I/O节点组成,峰值运算速度为每秒29万亿次。单个计算节点配置2颗12核心处理器,64GB内存。
运维部门通过统计发现该高性能计算机大部分故障都发生在运算任务非常密集的计算节点,硬件故障点多出现在主板、硬盘、电源这些部件。如果数值模式运行之前计算节点那么出现故障就不会影响模式运行,因为作业调度系统自动剔除了故障节点;但是如果在数值天气预报模式运行过程中发生故障,则会影响模式的正常输出。技术人员日常运维会定期到机房登入集群系统进行检查,发现故障时首先尝试修复,无法解决时拨打厂家售后服务电话报修,最后对故障处理情况进行记录。
通过对该系统连续两年来的故障记录进行梳理和分析,故障总数是54次,总影响机时近1000小时。这些故障中,对数值预报模式运行有影响的比率超过60%,我们称之为“故障业务影响率”;故障节点如没有及时修复,会导致节点宕机时间延长,长期积累对集群的整体运算能力产生了一定影响。通过数据分析、与运维人员反复沟通和讨论得出结论:故障发生时如能第一时间监控,那么即使故障导致作业运行出错,也可以及时调整作业,调度系统剔除故障节点,把故障对业务影响降低到可接受范围。基于高性能计算机的运维需求,设计和开发一套实用性的故障监控报警系统非常有必要。
2 监控系统设计
监控系统由监控采集模块、收集入库模块和短信报警模块三部分组成。监控采集模块对系统运行状态进行收集和记录;收集入库模块负责读取分析故障信息,录入故障信息数据库,并对故障是否进行短信报警进行控制;短信报警模块定时读取报警信息数据库,调用短信接口向运维和使用人员发送报警短信。
高性能计算机有三套通信网络用于计算节点通信Infiniband网络、数据传输的千兆TCP/IP网络和用于管理的百兆TCP/IP网络,监控采集模块使用管理网络通信,部署在管理节点,对高性能计算机全部节点进行监控。由于故障采集模块仅使用管理网络通信,所以不会对高性能计算机计算和数据网络产生影响。
在监控系统设计过程中,因为高性能计算机对运行安全性要求颇高,网络环境相对独立,无法从系统内部调用外部短信接口进行报警。而且考虑到Linux Shell编程的局限性,实现复杂的程序功能以及和Windows系统数据交互的开发难度较大,因此我们设计了一套SQL Server监控信息数据库作为信息交换中枢。系统内部运行的监控采集模块和系统外部运行的收集入库模块相互配合,把故障信息收集整理入库,短信报警模也依托于数据库系统来完成功能设计。这种设计很好的解决了高性能计算机系统内外部信息交互问题,充分利用了Linux系统的Windows系统的编程特性,也为程序的功能扩充和二次开发提供了基础。
3 集群监控系统开发与实现
3.1 开发语言和工具
监控系统开发主要使用了Visual Studio 2010、VI编辑器、SQL Server Management Studio等工具。监控采集模块采用Shell脚本语言Bash开发,Shell是Linux系统下一个非常灵活的工具,不仅可以用于命令的收集,而且是一门功能强大的编程语言[10-11]。与C语言等其他开发语言相比,开发者可以通过使用shell快速简便的使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。收集入库模块和短信报警模块运行在Windows环境,采用C#语言开发,C#是一种简洁、类型安全的面向对象的语言,开发人员可以使用它来构建在.NET Framework上运行的各种安全、可靠的应用程序,结合SQL Server数据库的开发尤其得心应手。
3.2 系统功能模块
3.2.1 监控采集模块
故障监控采集模块,运行在高性能计算机管理节点上,定时对系统所有节点发送状态检查命令,并根据返回结果收集故障信息,按照规定的格式存储在日志文件里,然后通过ftp协议发送日志文件到指定的服务器。检测到故障时,采集模块同时使用SMB/CIFS服务的Linux客户端程序Smbclient向集群监控PC屏幕发送一条提示信息。在开发监控采集模块时,我们选择使用Linux系统的Shell脚本语言作为开发工具,后续可以结合Linux系统的管理工具,或者和高性能计算机集成管理工具实现对接,就可以对各种类型故障进行细分,实现精细化的故障监控和报警。
while [$NN -le $avaible_nodes_number]
do
HELLO=`ssh node${NN} echo hello`
if [ -z $HELLO ]; then
echo "THE HPC CLUSTER node${NN} cannot be
reached at $time! Please inspect HPC ASAP!"|smbclient -M watchmachine>1&
echo "node${NN} $time">/root/bin/monitor/log
.nodedown.latest
INDEX=`expr $INDEX+1`
NN=`expr $NN+1`
else
INDEX=`expr $INDEX+1`
NN=`expr $NN+1`
fi
if ["$INDEX"="$NFILES"]; then
break;
fi
done
Shell脚本无法实现自动运行功能,需要依赖Linux系统的时间作业调度系统Cron来实现无需人工干预的情况下运行作业。Cron由一系列守护进程和指令组成,每个用户可以拥有自己的crontab文件,操作系统同时保存一个针对整个系统的crontab文件,该文件通常存放于/etc目录下,只能由系统管理员来修改。部署监控采集模块程序时,使用root用户登录后执行Crontab-e命令添加新任务,或者直接编辑/etc/crontab文件来添加任务,新添加一条任务列表:* * * * * /root/bin/monitor/nodestats.sh > /tmp/nodestats.log 2>&1& 代表每分钟运行一次故障监控采集程序。任务列表添加完畢保存后,重新启动Cron服务就可以立即生效。
3.2.2 收集入库模块
收集入库模块,主要完成高性能计算机故障信息的分拣和入库工作。程序定时读取故障日志文件,对故障信息进行关键字符提取,存储在程序变量里,然后录入故障信息数据库。
因为故障报警模块依托于故障信息数据库,如果每次检查到数据库存在故障信息都进行报警,那么,势必会出现短信重复发送的问题,给运维人员造成不便。为了解决这个问题,我们设计了一个故障重复报警过滤机制,对数据库报警信息表增加了一个发送标志字段,并且设置了一个“故障重复报警过滤间隔时间”。收集入库模块在向数据库录入节点故障信息之前,会提取故障日志记录时间和数据库里对应的节点故障时间进行对比,如果两者时间差小于“故障重复报警过滤间隔时间”,则说明该节点最新故障尚未修复,不对数据库记录进行更新,反之则说明该节点出现新故障或者耽误太久没有修复,这种情况在更新数据库的时候,同时把发送标志字段值置为0,报警模块检查到这条记录会立即发送报警短信。
3.2.3 短信报警模块
短信报警模块功能比较单一,定时轮询故障数据库记录,检查到有发送标志字段值为0的记录则调用外部短信发送接口发送短信。短信接口选择上,我们详细测试了英特网HTTP短信接口和本单位已购置的MAS短信接口,MAS短信接口发送速度快稳定性好,HTTP短信接口调用方便但是却存在网络安全风险,最终选择了MAS短信接口方案。短信报警模块程序界面见图2。
4 业务应用效果
故障监控系统投入业务运行后,虽然因为高性能计算机运行负载逐年增加,以及硬件系统整体老化等因素,故障总数有所增加。但是故障监控系统能及时监测到故障并通知相关人员提前干预,大幅的减少了故障对数值预报模式运行的影响。近4年故障统计图如图3所示,监控系统2013年年底启用后,当年便提高了业务模式运行稳定性,2014年全年“故障业务影响率”从2013年的59%降低到40%,2015年和2016年“故障业务影响率”分别为22%和8%,监控系统的应用实现了无人值守的高性能计算机故障监控和报警功能,大幅减少了故障对数值天气预报业务的影响。
5 结束语
高性能计算机故障监控系统采用了一种轻量级的方式,使用Shell和C#两种编程语言,通过三个功能模块的联动,实现了对气象高性能计算机的实时监控和报警。系统在宁波市气象局应用以来,大幅降低了硬件故障对数值天气预报的影响,解放了运维人员,具有很高的实用价值。目前该系统的故障监控类型还不够丰富,未来可以对采集模块继续开发,以对接高性能计算机监控管理系统,实现精细化的故障监控和报警。
参考文献(References):
[1] 赵立成,沈文海,肖华东等.高性能计算技术在气象领域的应用[J].应用气象学报,2016.5:550-558
[2] 洪文董.高性能计算机的发展与气象应用[J].计算机工程与应用,2004.5:32-35,51
[3] 王俊超,彭涛,冯光柳.曙光高性能计算机在数值预报模式中的应用[J].计算机技术与发展,2014.10:178-181,185
[4] 王彬.高性能计算技术在气象部门的应用[J].计算机工程与设计,2014.4:1476-1479
[5] 张志坚,伍光胜,孙伟忠,张静.IBM Flex P460高性能计算机系统及气象应用[J].现代计算机(专业版),2016.9:51-55
[6] 宗翔,王彬.国家级气象高性能计算机管理与应用网络平台设计[J].应用气象学报,2006.5:629-634
[7] 吕爽,衡志炜,马艳军.西南区域气象中心IBM高性能计算机管理及应用[J].高原山地气象研究,2015.2:71-76
[8] 秦运龙,许玮,张冰松.华中区域高性能计算机监控管理平臺设计与实现[J].电子制作,2016.14:37-38
[9] 许玮,王迎迎,秦运龙,张冰松.湖北省气象局高性能计算机监控系统的设计[J].电子制作,2016.14:35-36
[10] 韩璐.在UNIX系统下用shell编程实现对文件的操作[J].中国科技信息,2006.13:131-132
[11] 胡月宁,刘金霞,宋国云,王慧瑜,张玉锦.利用SHELL编程实现UNIX系统下气象资料传输与处理[J].电脑知识与技术,2008.17:1460-1463