1. 引言
国产化服务器集群中处理核心任务的计算节点一旦出现故障,会导致数据链的断裂,信息的丢失,极有可能造成灾难性的后果。为了保证计算服务的高可用性,本文设计实现了一种容错支持系统。容错支持系统主要用于对服务器平台内所有计算节点的协同管理,解决由于单个计算或控制单元失效引起的系统故障。同时对各个节点的关键业务、运行状态进行监测,对服务故障进行恢复,必要时基于冗余的计算和控制单元,进行主备节点的业务迁移,从而提高业务系统的稳定性、可用性,提升系统对软硬件故障的容错能力。
2. 系统基本框架
容错支持系统引入先进的高可用集群管理框架,主要架构分为心跳层、成员层、资源管理层和服务层。分层结构见下图:
图1 容错支持系统分层结构
最下一层是心跳层,服务器集群中各个计算节点之间实时互相监测,确保第一时间获取节点或服务的故障状态,这一层包含的组件发送心跳信息及其资料,来向上层发布自己的工作状态。
第二层是心跳成员层。该层负责充分连通所有节点并同步观察其所有成员。它基于心跳层获得的资料来执行这一任务。逻辑上照顾系统服务,并为系统更高层提供一个有组织的集群拓扑结构。
第三层是资源管理层。主要由资源管理、信息基准、策略与转换等组件构成,主要根据既定策略进行资源的分配与集群更改。这一层的每一个动作都通过系统资源管理,它是保持系统信息的基础。
第四层是服务层,主要是一些服务代理,一般是一个shell脚本,用以实现服务的启动、停止与监测控制。集群管理软件提供了2种不同的资源代理脚本。一是Linux的LSB 脚本,二是开放集群框架脚本。实际应用中,用户只需根据自身需求进行自定义脚本编写即可完成资源代理操作。
3. 关键技术研究
a)故障监测
故障监测是指实时监测一个节点或服务的状态并确定其工作是否正常。容错支持系统中定义节点状态和服务状态值分别如下:
表1 节点状态值
表2 服务状态值
这里故障监测功能采用心跳机制[2]来实现。引入三种方式检查节点或服务状态:检查通信状态的ping机制、报告服务状态的register机制和可由管理员定制脚本的health check机制。通过自定义的服务代理脚本进行对应用服务的监测。设计中可灵活调整应用服务的监测频率,考虑到监测频率过小对系统造成的负担,集群管理系统中设置应用服务监测频率为1s。多次测试得出从负载异常到检测发现问题,时间在500ms左右,满足实际应用的要求。
容错支持系统定期将节点的实时状态信息作为心跳信号通过心跳网络传递给其它所有节点,其他节点如果在一定时间内没有收到该节点的心跳信号,则认为该节点发生故障;若收到节点的心跳信号,则会根据心跳信号内容进一步评估该节点是否发生故障。
心跳信号中通常包括应用服务状态、节点到外网络的连通性、操作系统状态等,这些可用于判定节点是否正常以及服务切换时选择接管节点的依据。心跳信号传输时,采用加密、认证等机制以保证节点间的通信安全,防止机密数据被窃取、避免未经授权的节点加入到高可用系统中,或者未经授权的节点状态信息影响到节点的切换。
b)应急切换
应急切换是指集群系统中一个节点失效时其应用服务被自动和透明地切换到另一个节点上继续提供服务。应急切换不但提供高可用性,而且可以用于人为地切换服务[1],进行在线系统维护和软件升级,提高系统的可维护性。
当确定一个提供服务的主节点失效时,容错支持系统将根据预先配置决定由哪个节点去接管它的服务。接管节点首先要通知当前主节点停止其所有应用服务、释放资源,接管节点在获得被释放的资源后才能启动服务,需要释放的资源主要包括共享存储设备、IP地址等,以避免两个节点同时使用产生冲突。在特殊情况下,主节点系统可能挂起、无法释放资源,接管节点可通过STONITH设备让主节点重新启动来释放资源。STONITH是一种用于同时给系统节点提供电源的智能电源设备,节点可通过串口线或网线向STONITH设备发出指令断开或复位其它节点的电源。
c)数据高可用
容错支持系统引入数据库数据实时同步机制,业务系统产生的业务数据在入库的同时,数据实时的备份到其他节点。当故障发生时,集群系统实时将数据库实例和业务访问数据库的服务路由切换到备份节点;故障解除时,集群自动将故障恢复节点加入到可用序列中,同时将数据实时备份到故障备份节点,最终达到数据库数据完全自愈。
4. 结束语
针对国产化服务器集群系统高可用性的需求,本文设计实现了一种容错支持系统,通过心跳层、成员层、资源管理层以及服务层等四层架构来实现对集群系统软硬件资源的实时监测与管理。
参考文献
[1]刘思尧.基于Linux平台的高可用集群管理系统的研究与实现[D].西北大学[2023-09-18]
[2]李勇.基于Linux高可用集群关键技术研究与实现[J].自动化技术与应用, 2020, 39(5):4