赵慧 赵丹丹 张浩博 高士连
(1.中国电子科技集团公司第三十二研究所 上海市 201808 2.西安现代控制技术研究所 陕西省西安市 710065)
刀片服务器作为一种HAHD(High Availability High Density, 高可用高密度)的服务器平台,在雷达信号处理、水声综合信息处理、预警机核心处理等重要国防领以及天气预测、石油探测、运算化学等高密度计算机环境下广泛应用。刀片服务器作为关键应用领域信息系统的基础设施,其自主可控水平将直接影响到网络安全、信息安全,为保证技术主动性、网络安全性,提高刀片服务器领域自主可控水平,国内各厂商、研究单位逐步研制和推出了基于国产处理器(如飞腾、龙芯、申威等)和国产操作系统(如银河麒麟、普华等)的国产刀片服务器。本文重点研究面向国产刀片服务器的系统监控管理软件,对保证和提高国产刀片服务器的可靠性、可用性和可维护性具有重要意义。
针对刀片服务器应用环境的系统监控和管理需求,为提高系统的可拓展性和灵活性,系统监控管理软件采用分布式、层次化、可扩展的设计架构,由主机端监控管理服务、目标端服务代理以及协同工作软总线三部分组成,主机端监控服务采用B/S开发架构,向外提供Web服务功能,用户通过Web访问界面即可进行远程监控和管理。系统监控管理软件系统架构示意图如图 1所示。
图1:系统架构示意图
目标端服务代理为主机端访问和控制目标端资源提供了实现途径,其以松耦合的方式挂接于软总线之上,服务之间无相关性,可独立运行,服务按类别可分为监控服务、管理服务、预警/告警服务,具体包括资源监控服务、进程服务、文件系统服务、任务管理服务、异常告警服务、告警处置服务等,服务通过协同工作软总线接收来自主机端管理软件的请求,并将处理结果返回到主机端。其中,BMC基板管理控制可提供刀片服务器硬件层资源监控管理,包括板卡在位状态、开关机状态、传感器温度、电压、电流、风扇转速、功率等状态信息以及开机、关机、复位、风扇调速等管理控制。
协同工作软总线作为主机端监控管理服务和目标端服务代理的通信总线,实现主机端和目标机端的指令和数据通信,软总线通过统一的标准化的接口,屏蔽了底层物理链路的差异性,具有链路无关性,支持可靠的和非可靠的网络通信。协同工作软总线通信以消息的方式进行,消息种类有请求(Commands)、应答(Results)和事件(Events)三种类型。
主机端监控管理服务一方面完成来自用户Web端监控管理服务请求的封装,另一方面解析从目标机端服务代理返回的应答消息,具备和目标端服务一一对应的服务功能,通过服务及服务组合的方式,实现对目标端系统监控和管理功能。
系统监控管理软件具体部署示意图如图2所示。目标端服务代理部署于各机箱内的刀片服务器上,机箱间通过交换机与安装了主机端监控管理服务的Web服务器进行信息交互,用户端无需安装任何软件,通过本地浏览器访问监控管理服务页面即可实现各刀片服务器的远程监控管理。
图2:软件部署示意图
系统监控管理软件整体采用分层代理模式,主机端监控管理服务采用多层B/S体系架构,具有用户端零维护、业务扩展便利、共享性强等优点。从用户使用角度出发,系统监控管理软件功能划分如图3所示。
图3:软件功能组成图
物理视图:提供实际业务系统机柜级、机箱级、板卡级的直观拓扑关系,采用信号灯(绿灯:在位正常 红灯:在位异常 白灯:不在位)形式提供业务系统整体运行状态认知,支持对多种异型、异构刀片的自动识别和动态显示,支持机柜数量、机箱数量、刀片数量的可扩展。物理视图作为系统监控管理软件的主入口,通过点击物理视图中的任一板卡,可进入到监控管理导航界面进行具体操作。
在线监控:通过监控信息收集、信息处理与分析、信息记录存储、信息呈现,提供对系统软硬件资源的监控功能。在线监控采用数据可视化方式,借助图形、动画、表格等较直观方式呈现,呈现各板卡模块的温度、电压、电流、CPU使用率、内存占用率、网络带宽、硬盘等软硬件信息的实时使用情况。此外,根据实际业务对健康预测、故障模型预测等需求,系统监控管理软件基于国产数据库,对重要模块的关键软硬件监控数据进行定期记录存储,形成相应数据资产。
在线管理:提供包括文件系统、进程、任务、远程登录的在线管理能力。文件系统管理显示和管理目标刀片的文件系统文件,支持树形和平铺两种形式查看,具备文件创建、编辑、删除、重命名以及文件上下载等功能;进程管理支持按进程名称、所属用户、进程资源占用情况等多种条件筛选和查看目标刀片的进程实时状态,并可对进程进行挂起、恢复、终止等操作;任务管理包含任务软件管理和任务部署两部分,任务软件管理采用中央仓库模式,基于“文件系统+数据库”方式进行构建,以任务软件类别(GroupId)、任务软件名称(ArtifactId)、任务软件版本(Version)三元素为坐标进行存储和管理。任务部署提供任务软件到目标刀片服务器上的远程安装、启动、挂起、卸载等功能,支持单点部署和批量部署两种模式;远程登录基于GoTTY实现对目标刀片服务器的终端Web共享,为高级用户执行复杂操作提供便捷途径。
预警/告警:提供了阈值设置、实时预警/告警以及事件处置功能。阈值设置支持用户按照业务需求,设置和调整刀片服务器的温度阈值、电压阈值、cpu使用率阈值、内存阈值等; 实时预警/告警针对系统中发生的软硬件异常情况,如过温、过压、过流等硬件异常以及应用软件中断、资源占用过高等软件异常情况进行实时预警/告警,根据异常事件等级(Fatal>Error>Warn>Info),采用不同形式进行告警,提供异常的详细信息,包括发生异常的刀片信息、事件等级、异常描述、序列号以及发生时间信息;事件处置是指针对预警/告警的处理,支持自定义处理策略,支持应用软件恢复、应用切换、硬件复位等。
IPMI控制:实现了对目标刀片服务器的远程开机、关机、复位操作。
系统管理:包含用户管理、角色管理、日志管理。用户管理和角色管理包含用户、角色的创建、修改、删除、角色分配以及相应的权限维护,日志管理提供登录日志、用户操作日志、系统错误日志等多类别日志。
目标端服务代理(以下简称代理)采用纯C语言实现,代码使用POSIX API以提高可移植性,目前在飞腾、龙芯、申威国产处理器平台和麒麟、普华等国产操作系统完成了适配。代理基于libc、libpthread、events等函数库,构建了目标通信框架、事件队列、可扩展业务服务等模块。
目标通信框架是代理的基础框架,主要具备三大功能:
(1)构建传输层,基于TCP/IP 可靠传输的输入/输出流和基于 UDP 的自动发现;
(2)处理事件注册及调度,在收到新消息的时候,将消息请求发送给适当的事件处理程序;
(3)定义通用的输入、输出流接口以及库函数。
代理采用事件驱动模式以提高并发性,事件本质上即为一个指向事件处理程序的函数指针(回调函数)加上数据指针,事件队列模块实现了主要的事件队列调度和排队,其含有一个主循环,负责从事件队列中检索事件,并通过单线程事件处理程序顺序执行。可扩展业务服务是指实际业务系统需要的服务。当前代理上实现了基本信息获取服务、实时运行状态监控服务、文件系统管理服务、进程管理服务、任务管理服务、阈值设置服务、事件处置服务。此外,针对新的业务需求,通过服务定制和挂载,可轻松实现服务扩展。
主机端监控管理服务基于SpringBoot框架整合Mybatis-Plus实现后端功能开发,基于Vue框架引入ElementUI组件库和Echarts组件库等完成前端界面开发。
后端开发采用“高内聚,低耦合”的多层架构,具体为Controller层、Service层、Dao层、Model层。Controller层为控制层,负责前后端交互,实现请求和响应控制;Service层为业务逻辑层,完成业务功能设计和实现;Dao层为数据持久层,访问数据库并完成数据的增删改查任务;Model层为实体层,即与数据库表进行对应。其中,Service层作为业务逻辑层,主要实现以下功能:
(1)抽象通信链路层,构建通信通道;
(2)封装消息队列,实现异步事件调度机制;
(3)实现与目标端服务业务服务一一对应的proxy代理及服务组合;
(4)目标节点管理,控制节点发现、通信连接、断开等;
(5)权限管理;
(6)基于IPMI协议的远程控制。
前端开发采用Vue渐进式框架,通过Vue-router进行路由解析,Vuex进行全局状态管理,采用ElementUI组件库和Echarts组件库等三方UI组件库结合自开发的页面组件进行页面开发,使用Restful风格设计前后端交互接口。
协同工作软总线通信协议定义了所有服务通用的数据包属性。协议定义了四种数据包类型:请求(Commands)、响应(Results)、事件(Events)以及流量控制(Flow Control)。数据包以包类型为开头,后接若干控制字段以及实际字节数据数组,采用JSON格式进行数据序列化。
3.3.1 请求(Commands)数据包
请求(Commands)数据包格式定义如下:
C ·
请求数据包以字符“C”开头,token为框架生成的请求唯一标识符,用于进行匹配请求和相应结果;service name用于标志处理请求的服务;command name为服务中具体的子项名;byte array: arguments为请求的参数。
请求数据包通常对应着响应数据包。响应数据包不一定是正向的。响应结果可以包含错误码,或者响应数据包以“N”开头,表示请求数据包未被识别。当目标节点无法响应请求时,由于主机端无法检测响应缺失原因,当超过一定的响应周期后,应当将这种情况视为致命的通信错误,并关闭通信通道。消息通信采用异步通信机制,因此在发送下包请求数据前无需等待上一包的响应结果。一般来说,一次性发送多个请求数据包可以有效提高性能,尤其是在通信传输高延时的情况下。当然,从流量控制的角度来说,请求数据包的数量需要核实,以避免发生通道流量拥塞。
3.3.2 响应(Results)数据包
响应(Results)数据包格式定义有以下三种:
(1)N ·
(2)R ·
(3)P ·
响应数据包以字符“N”开头表示该请求未被识别,以字符“R”开头表示最终结果,以字符串“P”开头表示中间结果。每个请求(Commands)数据包都会对应一个以“R”或“N”开头的响应(Results)数据包。此外,在请求被执行过程中可以产生若干数量的中间结果“P”。
3.3.3 事件(Events)数据包
事件(Events)数据包格式定义如下:
E ·
事件数据包以字符“E”开头表示该请求未被识别,service name表示触发事件的服务名称,event name为事件名称,byte array: event data为事件参数。
事件用于主动向主机端监控管理服务通知目标节点的状态变化。通过在目标刀片服务提供一系列和目标刀片运行状态相关事件,如果主机端对监控目标的特定状态关注,可以在主机端建立该状态的映射,通过监听该特定状态的相关事件更新目标节点状态映射,实现对远端节点的状态跟踪。需要注意的是,事件消息需要适量,消息太少会需要主机端主动轮询目标节点状态变化,在一定程度上可能会导致性能降低,另一方面如果事件消息过于频繁,可能会导致通信通道消息泛滥。
3.3.4 流量控制(Flow Control)数据包
通常情况下,通信通道的一侧产生消息的速度比通道的另一侧处理消息的速度快时,将会导致通道流量拥塞。通过使用流量控制消息,如消息合并、切换到概要信息,来实现处理流量拥塞问题。数据包格式定义如下:
F ·
定义消息阻塞等级为-100到100,-100表示没有待处理消息,0表示最佳负载,正值表示消息流量堵塞的等级。当节点接收到阻塞等级大于0的流量控制消息时,应当降低消息传输速度。
面向国产刀片服务器的系统监控管理软件提供统一的集中监控与管理平台,具备物理视图、在线监控、在线管理、预警/告警、IPMI控制、用户管理六大功能。软件采用分层设计思想,具有良好的可扩展性、灵活性、可靠性和易用性。软件应用于多款全国产刀片服务器,在飞腾、龙芯、申威国产处理器平台和麒麟、普华等国产操作系统成功运行,进一步增强了国产化信息系统的研发能力和自主可控水平。后续将持续关注国产刀片服务器远程调试、故障模型等方面业务需求,进一步提高完善。