掌桥专利:专业的专利平台
掌桥专利
首页

一种基于SWIM的故障检测方法及装置、电子设备

文献发布时间:2023-06-19 18:46:07


一种基于SWIM的故障检测方法及装置、电子设备

技术领域

本发明涉及分布式存储故障检测技术领域,尤其涉及一种基于SWIM的故障检测方法及装置、电子设备。

背景技术

传统的分布式存储故障检测机制是通过心跳实现的,如果一定时间内没有收到对方的心跳,则认为其故障了,具体来讲主要有以下两种方式:

1)有一个中心控制节点,其他节点均向该中心控制节点发送心跳,这种方式会导致该中心控制节点成为瓶颈点,容易出现单点故障。

2)集群中各节点均向范围内所有节点发送心跳,会出现较大的网络负载,且集群规格越大,该网络负载越大,且集群多个节点故障后,故障检测时间可能会很久。

SWIM(Scalable Weakly-consistent Infection-style Process GroupMembership Protocl)是基于Gossip协议实现的一种准确、高效和可扩展的故障检测机制。其故障检测原理见第4部分中SWIM故障检测图。SWIM机制主要是通过dping和iping机制实现故障检测功能。在每个故障检测周期内,从本节点(假设为N1)的节点列表中随机选举一个节点(假设为N2),向其发送dping消息,然后等待N2的ack。如果指定时间内没有收到ack,则N1会将N2设置为SUSPECT状态,并设置SUSPECT的超时时间,然后再从自己的节点列表中随机选择K个节点发送iping,这K个节点收到消息后会向N2发送dping消息,如果N2有应答ack,则将该ack再次转发给N1。如果N1在SUSPECT超时时间内没有收到任何N2的应答(不管是dping还是iping的),则都会将N2设为故障状态,然后在集群内扩散。

SWIM协议能保证最终可以检测到节点故障,但对于节点故障到故障检测出来的时间间隔是无法明确保证的。

发明内容

本发明要解决的技术问题是,当前的SWIM协议对于节点故障到故障检测出来的时间间隔是无法明确保证的,有鉴于此,本发明提供一种基于SWIM的故障检测方法及装置、电子设备,应用于分布式存储的节点状态检测场景。

本发明采用的技术方案是,所述基于SWIM的故障检测方法,包括:

在集群中的基准节点内预先配置的当前节点列表中,并行选择至少两个待检测节点并发送第一检测信号;

基于所述待检测节点对所述第一检测信号的反馈,确定所述待检测节点的状态,当所述待检测节点被确定为待定节点,利用所述节点列表中的其他节点,确定所述待定节点是否为故障节点;

当所述待检测节点被确定为故障节点,将所述故障节点的故障状态扩散至整个集群,其中,所述基准节点当检测到故障节点时,直接将对应的故障信息上报至所述集群中的控制角色;

基于SWIM机制,确定所述控制角色中的故障节点。

在一个实施方式中,所述基于所述待检测节点对所述第一检测信号的反馈,确定所述待检测节点的状态,包括:

当所述待检测节点在第一时间范围内未能反馈所述第一检测信号时,所述基准节点在对应的节点列表中选取至少两个节点,并分别发送iping信号;

响应于所述iping信号,至少两个所述节点分别向所述待检测节点发送第二检测信号;

当所述待检测节点在所述第一时间范围内未能反馈所述第二检测信号时,所述基准节点将所述待检测节点确定为故障节点。

在一个实施方式中,当所述待检测节点在所述第一时间范围内未能反馈所述第一检测信号时,将所述待检测节点确定为待定节点;

当所述待检测节点在第二时间范围内未能反馈所述第一检测信号时,将所述待检测节点确定为故障节点。

在一个实施方式中,所述当所述待检测节点被确定为故障节点,将所述故障节点的故障状态扩散至整个集群,包括:

将所述集群中的非控制角色的节点利用由0开始的序号进行排序;

由序号为0的所述节点开始,将当前节点的使用状态扩散至序号为2n+1或者2n+2的其他节点,其中,n为当前节点的序号;

当扩散至所述故障节点或所述待定节点时,停止经由所述故障节点或待定节点继续向其他节点扩散,由扩散至所述故障节点或所述待定节点的上一级节点,跳过所述故障节点或所述待定节点,将所述故障节点或所述待定节点的当前状态扩散至序号为2m+1或者2m+2的其他节点,其中,m为当前故障节点或待定节点的序号。

本方面的另一方面还提供了一种基于SWIM的故障检测装备,包括:

初始单元,被配置为在集群中的基准节点内预先配置的当前节点列表中,并行选择至少两个待检测节点并发送第一检测信号;

状态判断单元,被配置为基于所述待检测节点对所述第一检测信号的反馈,确定所述待检测节点的状态,当所述待检测节点被确定为待定节点,利用所述节点列表中的其他节点,确定所述待定节点是否为故障节点;

状态扩散单元,被配置为当所述待检测节点被确定为故障节点,将所述故障节点的故障状态扩散至整个集群,其中,所述基准节点当检测到故障节点时,直接将对应的故障信息上报至所述集群中的控制角色;

控制角色检测单元,被配置为基于SWIM机制,确定所述控制角色中的故障节点。

在一个实施方式中,所述状态判断单元被进一步配置为:

当所述待检测节点在第一时间范围内未能反馈所述第一检测信号时,所述基准节点在对应的节点列表中选取至少两个节点,并分别发送iping信号;

响应于所述iping信号,至少两个所述节点分别向所述待检测节点发送第二检测信号;

当所述待检测节点在所述第一时间范围内未能反馈所述第二检测信号时,所述基准节点将所述待检测节点确定为故障节点。

在一个实施方式中,所述状态判断单元被进一步配置为:

当所述待检测节点在所述第一时间范围内未能反馈所述第一检测信号时,将所述待检测节点确定为待定节点;

当所述待检测节点在第二时间范围内未能反馈所述第一检测信号时,将所述待检测节点确定为故障节点。

在一个实施方式中,所述状态扩散单元被进一步配置为:

将所述集群中的所有非控制角色的节点利用由0开始的序号进行排序;

由序号为0的所述节点开始,将当前节点的使用状态扩散至序号为2n+1或者2n+2的其他节点,其中,n为当前节点的序号;

当扩散至所述故障节点或所述待定节点时,停止经由所述故障节点或待定节点继续向其他节点扩散,由扩散至所述故障节点或所述待定节点的上一级节点,跳过所述故障节点或所述待定节点,将所述故障节点或所述待定节点的当前状态扩散至序号为2m+1或者2m+2的其他节点,其中,m为当前故障节点或所述待定节点的序号。

本发明的另一方面还提供了一种电子设备,所述电子设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上任一项所述的基于SWIM的故障检测方法的步骤。

本发明的另一方面还提供了一种计算机存储介质,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述的基于SWIM的故障检测方法的步骤。

采用上述技术方案,本发明至少具有下列优点:

本发明提供的基于SWIM的故障监测方法,相较于现有的SWIM协议,能够更加快速的实现分布式存储节点中的故障节点检测。

附图说明

图1为根据本发明实施例的基于SWIM的故障检测方法流程图;

图2为根据本发明实施例的基于SWIM的故障检测方法的故障节点检测具体实施示意图;

图3为根据本发明实施例的基于SWIM的故障检测方法的故障节点扩散具体实施示意图;

图4为根据本发明实施例的基于SWIM的故障检测装置组成结构示意图;

图5为根据本发明实施例的电子设备的结构示意图。

具体实施方式

为更进一步阐述本发明为达成预定目的所采取的技术手段及功效,以下结合附图及较佳实施例,对本发明进行详细说明如后。

在附图中,为了便于说明,已稍微夸大了物体的厚度、尺寸和形状。附图仅为示例而并非严格按比例绘制。

还应理解的是,用语“包括”、“包括有”、“具有”、“包含”和/或“包含有”,当在本说明书中使用时表示存在所陈述的特征、整体、步骤、操作、元件和/或部件,但不排除存在或附加有一个或多个其它特征、整体、步骤、操作、元件、部件和/或它们的组合。此外,当诸如“...中的至少一个”的表述出现在所列特征的列表之后时,修饰整个所列特征,而不是修饰列表中的单独元件。此外,当描述本申请的实施方式时,使用“可以”表示“本申请的一个或多个实施方式”。并且,用语“示例性的”旨在指代示例或举例说明。

如在本文中使用的,用语“基本上”、“大约”以及类似的用语用作表近似的用语,而不用作表程度的用语,并且旨在说明将由本领域普通技术人员认识到的、测量值或计算值中的固有偏差。

除非另外限定,否则本文中使用的所有用语(包括技术用语和科学用语)均具有与本申请所属领域普通技术人员的通常理解相同的含义。还应理解的是,用语(例如在常用词典中定义的用语)应被解释为具有与它们在相关技术的上下文中的含义一致的含义,并且将不被以理想化或过度正式意义解释,除非本文中明确如此限定。

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

本发明中说明书中对方法流程的描述及本发明说明书附图中流程图的步骤并非必须按步骤标号严格执行,方法步骤是可以改变执行顺序的。而且,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

本发明第一实施例,一种基于SWIM的故障检测方法,如图1所示,包括以下具体步骤:

步骤S1,在集群中的基准节点内预先配置的当前节点列表中,并行选择至少两个待检测节点并发送第一检测信号;

步骤S2,基于待检测节点对第一检测信号的反馈,确定待检测节点的状态,当待检测节点被确定为待定节点,利用节点列表中的其他节点,确定待定节点是否为故障节点;

步骤S3,当待检测节点被确定为故障节点,将故障节点的故障状态扩散至整个集群,其中,基准节点当检测到故障节点时,直接将对应的故障信息上报至集群中的控制角色;

步骤S4,基于SWIM机制,确定控制角色中的故障节点。

参考图1以及图2,下面将分步对本实施例所提供的方法进行详细说明。

步骤S1,在集群中的基准节点内预先配置的当前节点列表中,并行选择至少两个待检测节点并发送第一检测信号。

本实施例是应用于分布式存储的应用场景中,在该应用场景中,通常是一个分布式的节点集群。进一步地,本发明在节点集群中的每个节点中,都对应配置一个节点列表,可以理解的是,每个节点中配置的节点列表可以根据实际情况需要进行合理配置。示例性地,当待检测节点位于基准节点的节点列表内时,基准节点可以向待检测节点发送dping信号(第一检测信号)或者iping信号,其可用于后续的故障检测实现。

本实施例中,可以在集群中的任一节点,为了便于说明,可以是基准节点中,在基准节点预先配置的节点列表中,随机选取任一节点,例如可以是待检测节点,并向待检测节点发送第一检测信号(dping信号)。

进一步地,可以同时有多个基准节点,每个基准在对应的节点列表内选择多个待检测节点,并行地开启对待检测节点的状态检测过程。

步骤S2,基于待检测节点对第一检测信号的反馈,确定待检测节点的状态,当待检测节点被确定为待定节点,利用节点列表中的其他节点,确定待定节点是否为故障节点。

在一些可能的实施方式中,当待检测节点在第一时间范围内未能反馈第一检测信号时,将待检测节点确定为待定节点;当待检测节点在第二时间范围内未能反馈第一检测信号时,将所述第二节点确定为故障节点。

可以理解的是,通常情况下,第二时间范围是远大于第一时间范围的,如果在待定节点的状态下,继续等待第二时间范围可能的响应,会造成时间上的浪费。

本实施例中,当待检测节点在第一时间范围内未能反馈第一检测信号时,直接向节点列表内与待检测节点不同的其他故障域内选取至少两个节点(例如可以选取两个节点,如果只有一个故障域的话,可以随机选择三个节点),由基准节点向上述选择的至少两个节点分别发送iping信号。

可以理解的是,故障域的范围大小以及选取发送iping信号的节点数量均是可以根据实际情况做出合理的调整的,本文对此将不再限定。

本实施例中,当至少两个节点接收到iping信号时,会在短时间立刻向待检测节点发送dping信号,为了与上述dping信号区别,可以称作第二检测信号。

本实施例中,第一时间范围可以是与上述的步骤中的第一时间范围相同,也可以是近似同为很短的时间间隔。

进一步地,待检测节点在接收多个(至少两个)第二检测信号时,如果均未向对应的基准节点反馈时,则可以判断该待检测节点为故障节点。

相应的,待检测节点可能反馈某一节点发送的第二检测信号,此时基准节点可以将该待检测节点确定为正常节点,或称为非故障节点。

由于第一时间范围的时间间隔远小于常规SWIM协议中,第二时间范围的时间间隔,因此,本实施例在SWIM协议的基础之上,可以节省时间,并同样可以以达到故障节点检测的技术目的。

步骤S3,当待检测节点被确定为故障节点,将故障节点的故障状态扩散至整个集群,其中,基准节点当检测到故障节点时,直接将对应的故障信息上报至集群中的控制角色。

本实施例的一些实施方式中,可以将一节点的故障状态,扩散至集群中的其他节点,如图3所示。

具体地,可以将集群中的所有非控制角色的节点由0开始按照0,1,2…的顺序序号进行排序,具体的扩散流程可以是:

由序号为0的节点开始,将当前节点的使用状态(正常、待定、故障)扩散至序号为2n+1或者2n+2的其他节点,其中,n为当前节点的序号;

可结合图3,图3中,作为示例,序号4的节点为待定节点,序号5的节点为故障节点。当扩散至故障节点或待定节点时,停止经由故障节点或待定节点继续向其他节点扩散,由扩散至所述故障节点或所述待定节点的上一级节点,跳过故障节点或所述待定节点,将故障节点或所述待定节点的当前状态扩散至序号为2m+1或者2m+2的其他节点,其中,m为当前故障节点或待定节点的序号。

基于上述故障节点的扩散方法,可以大幅提升故障节点状态的扩散速度。

本实施例中,故障检测信息只有扩散到控制角色才能真正实现在控制面中的标down(也就是标记为故障节点),被客户端感知到后,才能减少对业务面的影响。SWIM协议节点状态更新的传播依赖于故障检测中的dping/iping消息。由于当前是轮询遍历节点列表,会导致故障检测结果真正扩散到有控制角色的节点有延后。可以通过让第一个检测到故障结果的SWIM角色,直接将故障检测结果上报给控制角色实现及时更新控制面视图,在集群控制面视图中将故障的节点标down。

步骤S4,基于SWIM机制,确定控制角色中的故障节点。

本实施例中,分布式存储控制集群都会使用一致性协议,如raft,paxos协议等。一致性协议本身有心跳检测,但其故障检测只是主与从之间的。可以通过在集群控制角色上使用SWIM协议来做主故障检测或从故障检测。一致性协议的心跳检测中,从检测到主故障一般需要2-3个心跳周期的超时,才能判定主故障了。通过使用SWIM协议来做一致性协议心跳检测的补充,可以提交主故障场景下的检测速度。一是SWIM协议的心跳是主与从,从与从之间都存在的,二是SWIM故障的检测是有iping机制的,是借助多个节点的检测来做出结果,更可靠。

本发明第二实施例,与第一实施例对应,本实施例介绍一种基于SWIM的故障检测装置,如图4所示,包括以下组成部分:

初始单元,被配置为在集群中的基准节点内预先配置的当前节点列表中,并行选择至少两个待检测节点并发送检测信号;

状态判断单元,被配置为基于待检测节点对第一检测信号的反馈,确定待检测节点的状态,当待检测节点被确定为待定节点,利用节点列表中的其他节点,确定待定节点是否为故障节点;

状态扩散单元,被配置为当待检测节点被确定为故障节点,将故障节点的故障状态扩散至整个集群,其中,基准节点当检测到故障节点时,直接将对应的故障信息上报至集群中的控制角色;

控制角色检测单元,被配置为基于SWIM机制,确定控制角色中的故障节点。

在一个实施方式中,状态判断单元被进一步配置为:

当待检测节点在第一时间范围内未能反馈第一检测信号时,基准节点在对应的节点列表中选取至少两个节点,并分别发送iping信号;

响应于iping信号,至少两个节点分别向待检测节点发送第二检测信号;

当待检测节点在第一时间范围内未能反馈第二检测信号时,基准节点将待检测节点确定为故障节点。

在一个实施方式中,状态判断单元被进一步配置为:

当待检测节点在第一时间范围内未能反馈第一检测信号时,将待检测节点确定为待定节点;

当待检测节点在第二时间范围内未能反馈第一检测信号时,将待检测节点确定为故障节点。

在一个实施方式中,状态扩散单元被进一步配置为:

将集群中的所有非控制角色的节点利用由0开始的序号进行排序;

由序号为0的节点开始,将当前节点的使用状态扩散至序号为2n+1或者2n+2的其他节点,其中,n为当前节点的序号;

当扩散至故障节点或待定节点时,停止经由故障节点或待定节点继续向其他节点扩散,由扩散至故障节点或待定节点的上一级节点,跳过故障节点或待定节点,将故障节点或待定节点的当前状态扩散至序号为2m+1或者2m+2的其他节点,其中,m为当前故障节点或待定节点的序号。

本发明第三实施例,一种电子设备,参考图5,可以作为实体装置来理解,包括处理器以及存储有所述处理器可执行指令的存储器,当所述指令被处理器执行时,执行如下操作:

步骤S1,在集群中的基准节点内预先配置的当前节点列表中,并行选择至少两个待检测节点并发送检测信号;

步骤S2,基于待检测节点对第一检测信号的反馈,确定待检测节点的状态,当待检测节点被确定为待定节点,利用节点列表中的其他节点,确定待定节点是否为故障节点;

步骤S3,当待检测节点被确定为故障节点,将故障节点的故障状态扩散至整个集群,其中,基准节点当检测到故障节点时,直接将对应的故障信息上报至集群中的控制角色;

步骤S4,基于SWIM机制,确定控制角色中的故障节点。

本发明第四实施例,本实施例的基于SWIM的故障检测方法的流程与第一、二或三实施例相同,区别在于,在工程实现上,本实施例可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的所述方法可以以计算机软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台设备执行本发明实施例所述的方法。

综上,相较于现有技术,本发明至少具备以下优点:

1)本发明借助SWIM机制来做存储节点的故障检测,能减轻集群各成员在故障检测时的消息负载;

2)本发明通过对SWIM机制的优化,能减少故障检测的时间,加快故障信息扩散;

3)本发明通过对SWIM机制的优化,能使控制面及时更新集群元数据表,及时恢复业务;

4)本发明借助SWIM机制来做控制节点的故障检测,能加快对主故障的检测时间。

通过具体实施方式的说明,应当可对本发明为达成预定目的所采取的技术手段及功效得以更加深入且具体的了解,然而所附图示仅是提供参考与说明之用,并非用来对本发明加以限制。

技术分类

06120115687752