一种适应于大规模存储集群的失效检测方法

文档序号:7856729阅读:189来源:国知局
专利名称:一种适应于大规模存储集群的失效检测方法
技术领域
本发明涉及集群存储领域,更具体的地说,涉及一种适应于大规模存储集群的失效检测方法。
背景技术
随着信息化和网络技术的快速发展,数据快速增长,使得人们无法准确的根据对数据量的预测和估计来规划存储系统方案,而且存储硬件随着技术的发展价格在迅速下降,逐步的按需扩展存储节点有利于提高投资的利用率,企业需要存储系统具有按需扩展的能力。集群存储技术能很好的满足这种需求,部署大规模存储集群可以实现高性能、高可用性、高扩展性。失效检测是检测者利用一定的检测模型及算法对被检测者进行检测,判断被检测者在某时刻是否失效的过程。所以高效的失效检测方法是实现集群存储系统高可用性的基 础,它对运行时系统中节点的存活状态进行及时和准确的检测,从而通知系统采取应对措施,如启用备用节点,状态迁移和数据恢复等。然而由于网络状况的多变性,如消息丢失,进程负载过大时导致的消息处理延时过大和缓冲区溢出等问题,实现完全高效和正确的失效检测机制是相当困难的。衡量失效检测方法的指标有准确性、完整性和扩展性。目前流行的2种失效检测方法=Gossip失效检测方法和层次式失效检测方法。Gossip失效检测的主要思想借鉴了类似病毒的传播方式。个人信息以及对其他人的看法不被保密并且在其他人之间传播。这种流言消息的接收者把流言消息再传播给他相识的人。Gossip失效检测方法就采用了这种消息传播机制,系统中的节点频繁地交换着各节点状态的信息。具体实现过程如下
心跳消息是失效检测方法的基础。Gossip协议是一种概率型的广播协议,最开始是用来保持分布式数据库系统的一致性。在该方法中,每个节点都维护一个Gossip列表。Gossip列表其实是系统中节点的标识符以及该节点的心跳计数值的列表。每个节点周期性的将自己的Gossip列表发送给一个随机选择的节点。收到Gossip列表的节点将会把自己的Gossip列表与收到的列表进行合并,对于相同节点标识符的项,其对应的心跳计数值取两者的最大值。如果一个节点的Gossip列表中,另外一个节点的心跳值在超出一个时间值之后,仍然未更新,将被怀疑为失效。并且如果在L秒后,仍然没有接收到该节点的心跳更新信息,就将该成员从列表中删除,采用这种方法使所有的成员最后都能检测出失效的成员。该方法对于网络造成的负载最小。并且如果设定的超时值足够长,准确度也最高。但是随着失效节点数的增多,所需的检测时间迅速增长。为了提高准确度,必须将超时值(timeout)设置的足够大,这样将使得检测时间过长,检测速度降低。也就是说Gossip失效检测方法是采用牺牲检测时间换取对网络负载的低影响和高准确度的。该方法会导致系统网络负载随节点的增加线性增加。
层次式失效检测方法是为了解决大规模失效检测技术对网络负载影响的问题而提出的。多层次的失效检测方法主要是针对单层次的基本失效检测方法在对网络负载的影响方面加以改进的,多层次的失效检测把一个失效检测系统划分为多个层次,各节点上的失效检测模块不再是对等的,各失效检测模块所完成的功能和在失效检测系统内的作用也是有差异的。在多层次的失效检测方法中节点存在普通节点与领导者节点之分,每个层次内部的普通节点只能看到本组中的所有节点,对于其它组的成员信息普通节点是看不到的。组内的普通节点发送心跳消息时也只需要向本组中的节点发送,不同组之间节点的失效检测是通过组领导者的通知来实现的。多层次系统中的特殊节点,我们称之为组领导者,负责组间检测消息的传递。组领导者可以看到整个系统中的所有节点的状态信息。处于同组内的节点之间的失效检测采用PUSH模型。不同组之间的失效检测采用由组领导通知的方式。对于系统中的普通节点来说。系统中任意节点每隔相同的时间间隔T,向组内所有其它节点发送心跳消息证明自己的存活状态。假设组内节点间的消息延迟的超时值上限为Tmin,组内节点在发送心跳消息的同时接收来自组内其他节点的心跳消息,如果在Tmin时间后仍然没有接收到组内某个节点的心跳消息就认为此节点已经失效。与此同时也接收来自组领导者的系统中其他组的节点状态信息,同时更新本节点的节点成员信息列表。 对于系统中的组领导者。除了完成普通节点的任务以外。每隔时间间隔T向系统中其他组领导者发送本组所有节点的状态列表。同时接收来自其他组领导者的关于其他组的节点状态信息列表,并在更新本节点的节点成员状态信息的同时.把该成员状态列表转发给组内所有其它普通节点。该方法的问题是基于领导者节点的模式容易造成领导者节点成为热点而使检测时间增加,影响失效检测的效率。对于按需扩展的集群存储系统中,系统由于节点规模动态变化,除了对检测速度和准确性的要求外,同时需要失效检测具有很好的可扩展性,能够保证在节点数量较大且不断变化的情况下保持稳定的低负载。当前的Gossip失效检测方法和层次失效检测方法均不具有很好的扩展性,从而无法适用于大规模的存储集群。

发明内容
本发明针对上述背景技术中的不足之处,提出了一种适应于大规模存储集群的失效检测方法,以保证在大规模存储集群且不断变化的情况下保持稳定的低负载。本发明的目的是通过如下技术措施来实现的。一种适应于大规模存储集群的失效检测方法,该方法在存储集群系统中设置有失效检测模块,该方法采用的失效检测故障模型为失效/恢复模型,该方法采用的失效节点信息的传播机制为永久免疫传染病的传播模型。所述失效检测故障模型,大多数失效检测模块采用失效/停止模型,但在存储集群中,有些节点可能死机之后,重启就可恢复正常,因此本方法失效检测故障模型采用失效/恢复模型。每个存储节点都有唯一 ID号,对于被检测出的失效节点,重启后恢复将被赋予新的ID号。进一步地,假定节点之间通信链路不会产生或者复制信息,也就是说节点间通信不会发生拜占庭错误,但是链路中的消息可能会有丢失和延迟。所述失效节点信息的传播机制,在存储集群中,系统中各个节点需要尽快知道失效节点的信息,以便快速的处理数据恢复、迁移和启用备用节点的工作。在all-to-all的心跳检测模式下,每个节点在每个检测周期都会检测其他节点的状态,而本方法中,在每个检测周期各个节点只会从成员列表中随机选取一个节点进行检测,因此需要一种有效的方式将检测到的失效节点信息通知系统中的其他节点。最简单的方式是采用广播方式,通过让所有的节点复制和转发收到的失效节点信息来实现,这种方式代价较大,造成较大的网络负载。组播方式可以减少网络传播的消息量,但是难于管理,点对点的传播方式效率低下,可靠性差。因此,在本方法中,失效节点信息的传播机制是采用永久免疫传染病的传播模型,实现失效节点信息快速、高效的传播,其将失效节点信息附加在Ping和ack消息中,根据永久免疫传染病的传播模型进行传播。在上述技术方案中,所述永久免疫传染病模型,具体实现时,系统中任意一个存储节点需要在缓存中保存两个节点列表,一个列表Pl保存正常节点的ID号和相关信息;一个列表P2保存最近被认为失效的节点的ID号和一个计数器,所述计数器用于记录失效节点信息被传播的次数;系统根据计数器选择下一个传播的失效节点信息,每一个失效节点信息最多被传播a Iogn次,其中n表示整个系统中存储节点的总数,a是整数,取{2,3}两个 值,当最初发出失效节点信息的存储节点,收到所有存储节点发回的确认消息后,失效节点将会从该存储节点的列表P2中删除,当计数器的值大于a Iogn后,该存储节点也会把失效节点从列表P2中删除,如果附加的成员更新信息,比如系统中加入了新的存储节点,或旧的存储节点被替换了,类似这样的系统成员更新信息太多,超过了 Ping和ack消息包的最大值时,将优先选择计数器值较小的失效节点信息进行传播;所述失效节点信息是在失效检测模块中产生的,若系统中有节点被认为失效,就会产生失效节点信息,包括该节点ID号和认为该节点失效的时刻,永久免疫传染病的传播模型就将失效节点信息附加在Ping和ack消息中传播到系统中的所有节点,使得系统中所有节点都获知该存储节点失效了。在上述技术方案中,该方法中判断节点失效并产生失效节点信息的步骤包括
(1)存储集群系统中每个节点周期性的按轮询方式从成员列表P1,即保存正常节点的ID号和相关信息的列表中选取一个成员并发送心跳消息,存储节点I向存储节点J发送心跳消息,心跳消息用来确认存储节点J是否失效,消息格式是ping(I;J;timestampe),若存储节点J正常工作,在收到存储节点I的心跳消息之后马上回复ack消息,遍历完成员列表Pl后,以随机方式重新排序成员列表Pl ;
(2)若在规定时间内,存储节点I收到存储节点J的回复ack消息,则进行步骤3;否贝U,认为存储节点J失效,生成失效节点信息,进行步骤5 ;
(3)根据接收到恢复ack消息和发送ping消息的时间差值,计算得到时间差T,并加入到W列表中,若T大于回复的平均时间间隔,则进行步骤4 ;否则,进行步骤5 ;所述W列表是一个长度固定为L的列表,保存最近收到存储节点J应答的L个心跳消息的检测时间,用来计算本步骤所述的回复的平均时间间隔;
(4)存储节点I从成员列表Pl中随机选择M个存储节点,并向M个存储节点发送ping-req消息,ping-req的消息格式为(I; J; Timestampe), I表示发送请求消息的节点,J表示希望其他存储节点帮助检测的可能失效的存储节点,Timestampe记录了发送消息的时间信息;该消息用来向成员列表Pl中的存储节点确认存储节点J是否真正的失效了,若在规定时间N内存储节点I没有收到任何一个存储节点的ack消息,则认为存储节点J失效,生成失效节点信息,进行步骤5 ;否则,至少收到一个存储节点ack消息,说明存储节点J正常;
(5)程序结束。综上所述,本发明提出的一种适应于大规模存储集群的失效检测方法,使得失效检测时间与存储集群规模无关,并具有良好的扩展性。在满足应用对失效检测时间和误报率要求的前提下,网络负载最优。


图I为本发明一种适应于大规模存储集群的失效检测方法的存储集群系统结构图。图2为本发明方法中判断节点失效并产生失效节点信息的步骤流程图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图以及具体实施例对本发明做进一步的描述。如图I所示,是本发明实施例提供的存储集群的系统架构,包含四个部分的内容。第一部分是客户端101,与元数据服务器103进行交互完成元数据IO操作,获取数据的存放位置,与存储集群104进行交互完成数据IO操作,完成数据的读写。第二部分监控器102,监控元数据服务器103和存储集群104的状态。第三部分元数据服务器103管理数据的存放以及数据的访问权限等,元数据服务器103通过与存储集群104的交互,将元数据存放在存储集群104中。第四部分是存储集群104,是多个存储节点的集合,所有数据都存储在104中,通过与元数据服务器103交互完成元数据操作,与客户端101交互完成数据操作。这种结构实现了控制路径和数据路径的分离。进一步的,存储集群104内部各存储节点使用网络互联。本实施例提供一种适应于大规模存储集群的失效检测方法,该方法在存储集群系统中设置有失效检测模块,该方法采用的失效检测故障模型为失效/恢复模型,该方法采用的失效节点信息的传播机制为永久免疫传染病的传播模型;
所述失效检测故障模型采用失效/恢复模型,每个存储节点都有唯一 ID号,对于被检测出的失效节点,重启后恢复将被赋予新的ID号。所述失效节点信息的传播机制采用永久免疫传染病的传播模型,其将失效节点信息附加在ping和ack消息中,根据永久免疫传染病的传播模型进行传播。所述永久免疫传染病模型,具体实现时,系统中任意一个存储节点需要在缓存中保存两个节点列表,一个列表Pl保存正常节点的ID号和相关信息;一个列表P2保存最近被认为失效的节点的ID号和一个计数器,所述计数器用于记录失效节点信息被传播的次数,所述失效节点信息即失效了的节点的相关信息,包括节点ID号;系统根据计数器选择下一个传播的失效节点信息,每一个失效节点信息最多被传播a Iogn次,其中n表示整个系统中存储节点的总数,a表示一个参数,a是整数,取{2,3}两个值,当最初发出失效节点信息的存储节点,收到所有存储节点发回的确认消息后,失效节点将会从该存储节点的列表P2中删除,当计数器的值大于a Iogn后,该存储节点也会把失效节点从列表P2中删除,如果附加的成员更新信息,比如系统中加入了新的存储节点,或旧的存储节点被替换了,类似这样的系统成员更新信息太多,超过了 Ping和ack消息包的最大值时,将优先选择计数器值较小的失效节点信息进行传播;所述失效节点信息是在失效检测模块中产生的,若系统中有节点被认为失效,就会产生失效节点信息,包括该节点ID号和认为该节点失效的时刻,永久免疫传染病的传播模型就将失效节点信息附加在Ping和ack消息中传播到系统中的所有节点,使得系统中所有节点都获知该存储节点失效了。如图2所示,本实施例中判断节点失效并产生失效节点信息的步骤包括
(1)存储集群系统中每个节点周期性的按轮询方式从成员列表P1,即保存正常节点的ID号和相关信息的列表中选取一个成员并发送心跳消息,存储节点I向存储节点J发送心跳消息,心跳消息用来确认存储节点J是否失效,消息格式是ping(I;J;timestampe),若存储节点J正常工作,在收到存储节点I的心跳消息之后马上回复ack消息,遍历完成员列表Pl后,以随机方式重新排序成员列表Pl ;
(2)若在规定时间内,存储节点I收到存储节点J的回复ack消息,则进行步骤3;否贝U,认为存储节点J失效,生成失效节点信息,进行步骤5 ;
(3)根据接收到恢复ack消息和发送ping消息的时间差值,计算得到时间差T,并加入到W列表中,若T大于回复的平均时间间隔,则进行步骤4 ;否则,进行步骤5 ;所述W列表是一个长度固定为L的列表,保存最近收到存储节点J应答的L个心跳消息的检测时间,用来计算本步骤所述的回复的平均时间间隔;
(4)存储节点I从成员列表Pl中随机选择M个存储节点,并向M个存储节点发送ping-req消息,ping-req的消息格式为(I; J; Timestampe), I表示发送请求消息的节点,J表示希望其他存储节点帮助检测的可能失效的存储节点,Timestampe记录了发送消息的时间信息;该消息用来向成员列表Pl中的存储节点确认存储节点J是否真正的失效了,若在规定时间N内存储节点I没有收到任何一个存储节点的ack消息,则认为存储节点J失效,生成失效节点信息,进行步骤5 ;否则,至少收到一个存储节点ack消息,说明存储节点J正常;
(5)程序结束。综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种适应于大规模存储集群的失效检测方法,该方法在存储集群系统中设置有失效检测模块,其特征在于该方法采用的失效检测故障模型为失效/恢复模型,该方法采用的失效节点信息的传播机制为永久免疫传染病的传播模型; 所述失效检测故障模型采用失效/恢复模型,每个存储节点都有唯一 ID号,对于被检测出的失效节点,重启后恢复将被赋予新的ID号;所述失效节点信息的传播机制采用永久免疫传染病的传播模型,将失效节点信息附加在Ping和ack消息中,根据永久免疫传染病的传播模型进行传播。
2.根据权利要求I所述的一种适应于大规模存储集群的失效检测方法,其特征在于所述永久免疫传染病模型,具体实现时,系统中任意一个存储节点需要在缓存中保存两个节点列表,一个列表Pl保存正常节点的ID号和相关信息;一个列表P2保存最近被认为失效的节点的ID号和一个计数器,所述计数器用于记录失效节点信息被传播的次数;系统根据计数器选择下一个传播的失效节点信息,每一个失效节点信息最多被传播a Iogn次,其中η表示整个系统中存储节点的总数,α是整数,取{2,3}两个值,当最初发出失效节点信息的存储节点,收到所有存储节点发回的确认消息后,失效节点将会从该存储节点的列表Ρ2中删除,当计数器的值大于alogn后,该存储节点也会把失效节点从列表P2中删除,如果附加的系统成员更新信息太多,超过了 Ping和ack消息包的最大值时,将优先选择计数器值较小的失效节点信息进行传播;所述失效节点信息是在失效检测模块中产生的,若系统中有节点被认为失效,就会产生失效节点信息,包括该节点ID号和认为该节点失效的时亥IJ,永久免疫传染病的传播模型就将失效节点信息附加在Ping和ack消息中传播到系统中的所有节点,使得系统中所有节点都获知该存储节点失效了。
3.根据权利要求2所述的一种适应于大规模存储集群的失效检测方法,其特征在于该方法中判断节点失效并产生失效节点信息的步骤包括 (1)存储集群系统中每个节点周期性的按轮询方式从成员列表P1,即保存正常节点的ID号和相关信息的列表中选取一个成员并发送心跳消息,存储节点I向存储节点J发送心跳消息,心跳消息用来确认存储节点J是否失效,消息格式是ping(I;J;timestampe),若存储节点J正常工作,在收到存储节点I的心跳消息之后马上回复ack消息,遍历完成员列表Pl后,以随机方式重新排序成员列表Pl ; (2)若在规定时间内,存储节点I收到存储节点J的回复ack消息,则进行步骤3;否贝U,认为存储节点J失效,生成失效节点信息,进行步骤5 ; (3)根据接收到恢复ack消息和发送ping消息的时间差值,计算得到时间差T,并加入到W列表中,若T大于回复的平均时间间隔,则进行步骤4 ;否则,进行步骤5 ;所述W列表是一个长度固定为L的列表,保存最近收到存储节点J应答的L个心跳消息的检测时间,用来计算本步骤所述的回复的平均时间间隔; (4)存储节点I从成员列表Pl中随机选择M个存储节点,并向M个存储节点发送ping-req消息,ping-req的消息格式为(I; J; Timestampe), I表示发送请求消息的节点,J表示希望其他存储节点帮助检测的可能失效的存储节点,Timestampe记录了发送消息的时间信息;该消息用来向成员列表Pl中的存储节点确认存储节点J是否真正的失效了,若在规定时间N内存储节点I没有收到任何一个存储节点的ack消息,则认为存储节点J失效,生成失效节点信息,进行步骤5 ;否则,至少收到一个存储节点ack消息,说明存储节点J正常; (5)程序结束。
全文摘要
本发明涉及集群存储领域,提供一种适应于大规模存储集群的失效检测方法,该方法在存储集群系统中设置有失效检测模块,该方法采用的失效检测故障模型为失效/恢复模型,该方法采用的失效节点信息的传播机制为永久免疫传染病的传播模型。使用本发明方法使得失效检测时间与存储集群规模无关,并具有良好的扩展性,保证在大规模存储集群且不断变化的情况下保持稳定的低负载。
文档编号H04L29/08GK102769673SQ20121025925
公开日2012年11月7日 申请日期2012年7月25日 优先权日2012年7月25日
发明者郑胜, 黄骏 申请人:楚云汉智武汉网络存储系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1