一种分布式心跳检测方法、装置及系统的制作方法

文档序号:7551719阅读:177来源:国知局
专利名称:一种分布式心跳检测方法、装置及系统的制作方法
技术领域
本发明涉及通信技术领域,尤其涉及一种分布式心跳检测方法、装置及系统。
背景技术
随着信息的爆炸式增长,对存储系统的容量和扩展性都提出了更高的要求,因此涌现出了云存储、大数据等一批新兴的概念和产品。云存储系统通常有大量存储节点组成,并且能够进行大规模的扩展,存储节点之间通过相互的数据复制备份来提高系统的可靠性和可用性,存储节点在进行数据复制备份时,需要知道对应的节点状态,因此,节点故障检测技术就成为构建大型存储系统的一项重要技术。分布式技术是构建规模云存储系统的基础,目前分布式系统中的节点故障检测主要是基于心跳消息的心跳检测。现有技术中,分布式心跳检测方法中节点系统结构示意图如图1所示,没有中心节点,各个数据节点的地位完全相同,它们通过Gossip协议维护节点系统的状态。通过Gossip协议,每个数据节点都可知道节点系统中包含哪些数据节点,以及这些数据节点的状态。各数据节点根据Gossip协议向节点系统内其他数据节点发送心跳消息(心跳消息未在图2中全部标出),并接收处理来自其他数据节点的心跳消息。数据节点随机选择另一个数据节点作为接收节点发送心跳消息,在心跳消息中携带记录的其他数据节点的心跳状态,该接收节点接收到心跳消息后,更新其记录的其他节点的心跳状态,当节点系统中一个数据节点记录的其他数据节点的心跳状态超过预置的时长而没有进行更新时,则认为心跳状态超过预置的时长而没有进行更新的数据节点发生了故障。但在上述现有技术中,数据节点随机接收其他数据节点的心跳消息,再次接收来自同一个数据节点的心跳消息的时间都不确定,因此难以确定判断其他数据节点是否发生故障的心跳检测时长。如果数据节点再次接收来自同一个数据节点的心跳消息的时间比较长,那么若该心跳检测时长设置得比较短,则容易造成故障的误检,但是若该心跳检测时长设置得比较长,则检测到故障的时间比较长,可能已不具备实效性,对业务的处理影响比较大。

发明内容
本发明实施例提供了一种分布式心跳检测方法、装置及系统,用以提高节点间检测故障的效率。第一方面,本发明提供一种分布式心跳检测方法,可包括:中心节点根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识该数据节点与不同数据节点所组成的心跳检测关系;将每个所述心跳视图发送给对应数据节点,使得所述对应的数据节点根据所述心跳视图发送心跳消息。在第一方面的第一种可能的实现方式中,所述根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图包括:按照每个数据节点所处的机架及服务器的位置选取数据节点,所述心跳视图中具有心跳检测关系的不同数据节点分布在不同的服务器或机架中;根据所选取的数据节点的ID生成所述心跳视图。结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述方法还包括:若在预先设置的心跳检测时长内,没有接收到所述第一数据节点对应的心跳视图中所指示的发送节点所发送的心跳消息,则判定所述发送节点故障,所述第一数据节点为所述节点系统中任意一个数据节点,所述发送节点为所述第一数据节点对应的心跳视图中标识的向所述第一数据节点发送心跳消息的数据节点。结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述方法还包括:若接收到所述节点系统中任一数据节点发送的故障汇报信息,所述故障汇报信息中包含有上报的故障节点,则根据除去所述故障汇报信息中汇报的故障节点之外的节点系统的拓扑结构,为所述节点系统中除故障节点外的每个数据节点生成对应的新的心跳视图,将每个所述新的心跳视图分别发送给对应的数据节点;若接收到所述节点系统中任一数据节点发送的心跳视图查询信息,则查询该数据节点对应的最新的心跳视图,并将所述最新的心跳视图发送给该数据节点。结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述将每个所述新的心跳视图分别发送给对应的数据节点,包括:将每个新的心跳视图与对应数据节点最近一次的历史心跳视图进行比较获得至少一个第一数据节点,所述第一数据节点为最近一次历史心跳视图和第一数据节点对应的新的心跳视图不同的数据节点;将所述第一数据节点对应的新的心跳视图发送给所述第一数据节点。第二方面,本发明提供一种分布式心跳检测方法,可包括:第一数据节点接收第二数据节点发送的心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图,所述第二心跳视图标识所述第二数据节点与不同的数据节点所组成的心跳检测关系;对比所述第一数据节点的第一心跳视图与接收的所述第二心跳视图是否一致,其中,所述第一心跳视图标识有所述第一数据节点与不同的数据节点组成的心跳检测关系;若所述第一心跳视图与所述第二心跳视图一致,则根据接收所述第二数据节点的心跳消息的时间和心跳间隔,判断所述第二数据节点是否发生故障;若确定所述第二数据节点发生故障,则向中心节点发送故障汇报信息,所述故障汇报信息中包含有故障节点;若所述第一心跳视图与所述第二心跳视图不一致,则向所述中心节点发送心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图。在第二方面的第一种可能的实现方式中,所述对比所述第一数据节点的第一心跳视图与接收的所述第二心跳视图是否一致包括:
对比所述第一心跳视图与所述第二心跳视图中包含的共同的数据节点ID对应的数据节点之间的心跳检测关系是否相同。结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述对比所述第一数据节点的心跳视图与接收的所述第二心跳视图是否一致之后还包括:向所述第二数据节点发送响应信息,所述响应信息用于通知所述第一数据节点所述第一心跳视图与所述第二心跳视图不一致。结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述根据接收所述第二数据节点的心跳消息的时间和心跳间隔,判断所述第二数据节点是否发生故障包括:记录所述第二数据节点发送的心跳消息的时间;若记录的所述心跳消息的时间在设置的心跳检测时长内未更新,则判断所述第二数据节点发生故障。结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述方法包括:若接收到通知所述第一数据节点的心跳视图与不同数据节点的心跳视图不一致的响应信息,则向所述中心节点发送所述心跳视图查询信息。第三方面,本发明提供一种节点,可包括:生成单元,用于根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识该数据节点与不同数据节点所组成的心跳检测关系;发送单元,用于将所述生成单元生成的每个所述心跳视图发送给对应数据节点,使得所述对应的数据节点根据所述心跳视图发送心跳消息。在第三方面的第一种可能的实现方式中,所述节点还包括:选取单元,用于按照每个数据节点所处的机架及服务器的位置选取数据节点,所述心跳视图中具有心跳检测关系的不同数据节点分布在不同的服务器或机架中;所述生成单元,还用于根据所述选取单元所选取的数据节点的ID生成所述心跳视图。结合第三方面或第三方面的第一种可能的实现方式,在第二种可能的实现方式中,所述节点还包括:判定单元,用于若第一数据节点在预先设置的心跳检测时长内,没有接收到所述第一数据节点对应的心跳视图中所指示的发送节点所发送的心跳消息,则判定所述发送节点故障,所述第一数据节点为所述节点系统中任意一个数据节点,所述发送节点为所述第一数据节点对应的心跳视图中标识的向所述第一数据节点发送心跳消息的数据节点。结合第三方面的第二种可能的实现方式,在第三种可能的实现方式中,所述生成单元,还用于若接收到所述节点系统中任一数据节点发送的故障汇报信息,所述故障汇报信息中包含有上报的故障节点,则根据除去所述故障汇报信息中汇报的故障节点之外的节点系统的拓扑结构,为所述节点系统中除故障节点外的每个数据节点生成对应的新的心跳视所述发送单元,还用于将所述生成单元生成的每个所述新的心跳视图分别发送给对应的数据节点。结合第三方面的第三种可能的实现方式,在第四种可能的实现方式中,所述节点还包括:查询单元,用于若接收到所述节点系统中任一数据节点发送的心跳视图查询信息,则查询该数据节点对应的最新的心跳视图;所述发送单元,还用于将所述最新的心跳视图发送给该数据节点。结合第三方面的第四种可能的实现方式,在第五种可能的实现方式中,所述节点还包括:比较单元,用于将每个新的心跳视图与对应数据节点最近一次的历史心跳视图进行比较获得至少一个第一数据节点,所述第一数据节点为最近一次历史心跳视图和第一数据节点对应的新的心跳视图不同的数据节点;所述发送单元,还用于将所述第一数据节点对应的新的心跳视图发送给所述第一数据节点。第四方面,本发明提供一种节点,可包括:接收消息单元,用于第一数据节点接收第二数据节点发送的心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图,所述第二心跳视图标识所述第二数据节点与不同的数据节点所组成的心跳检测关系;对比单元,用于对比所述第一数据节点的第一心跳视图与所述接收消息单元接收的所述第二心跳视图是否一致,其中,所述第一心跳视图标识有所述第一数据节点与不同的数据节点组成的心跳检测关系;判断单元,用于若所述对比单元对比所述第一心跳视图与所述第二心跳视图一致,则根据接收所述第二数据节点的心跳消息的时间和心跳间隔,判断所述第二数据节点是否发生故障;发送信息单元,用于若所述判断单元确定所述第二数据节点发生故障,则向中心节点发送故障汇报信息,所述故障汇报信息中包含有故障节点;所述发送信息单元,还用于若所述对比单元对比所述第一心跳视图与所述第二心跳视图不一致,则向所述中心节点发送心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图。在第四方面的第一种可能的实现方式中,所述对比单元,具体用于对比所述第一心跳视图与所述第二心跳视图中包含的共同的数据节点ID对应的数据节点之间的心跳检测关系是否相同。结合第四方面或第四方面的第一种可能的实现方式,在第二种可能的实现方式中,所述发送信息单元,还用于向所述第二数据节点发送响应信息,所述响应信息用于通知所述第一数据节点所述第一心跳视图与所述第二心跳视图不一致。结合第四方面的第二种可能的实现方式,在第三种可能的实现方式中,所述节点还包括:记录单元,用于记录所述第二数据节点发送的心跳消息的时间;所述判断单元,还用于若记录的所述心跳消息的时间在设置的心跳检测时长内未更新,则判断所述第二数据节点发生故障。结合第四方面的第三种可能的实现方式,在第四种可能的实现方式中,所述发送信息单元,还用于若接收到通知所述第一数据节点的心跳视图与不同数据节点的心跳视图不一致的响应信息,则向所述中心节点发送所述心跳视图查询信息。第五方面,本发明提供一种分布式心跳检测系统,可包括:中心节点,数据节点;所述中心节点,用于根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识该数据节点与不同数据节点所组成的心跳检测关系,将每个所述心跳视图发送给对应数据节点,使得所述对应的数据节点根据所述心跳视图发送心跳消息;所述数据节点包括第一数据节点和第二数据节点;其中,所述第一数据节点,用于接收第二数据节点发送的心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图,所述第二心跳视图标识所述第二数据节点与不同的数据节点所组成的心跳检测关系,对比所述第一数据节点的第一心跳视图与接收的所述第二心跳视图是否一致,其中,所述第一心跳视图标识有所述第一数据节点与不同的数据节点组成的心跳检测关系,若所述第一心跳视图与所述第二心跳视图一致,则根据接收所述第二数据节点的心跳消息的时间和心跳间隔,判断所述第二数据节点是否发生故障,若确定所述第二数据节点发生故障,则向中心节点发送故障汇报信息,所述故障汇报信息中包含有故障节点,若所述第一心跳视图与所述第二心跳视图不一致,则向所述中心节点发送心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图;所述第二数据节点,用于向所述第一数据节点发送心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图,所述第二心跳视图标识所述第二数据节点与不同的数据节点所组成的心跳检测关系。从以上技术方案可以看出,本发明实施例中,中心节点根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,中心节点将各心跳视图发送给对应数据节点,使得节点系统中的数据节点之间的心跳检测关系相对稳定,每个数据节点能够知道与自己有心跳检测关系的其他数据节点,因此可以根据心跳检测关系来更准确地设置自己与其他数据节点之间的心跳检测时长;与现有技术中因数据节点之间检测关系不确定而使得设置的心跳检测时长不准确相比,本发明实施例通过心跳检测来进行故障检测的方法更准确。


图1为现有技术中分布式心跳检测方法中节点系统结构示意图;图2为本发明实施例中分布式心跳检测方法中节点系统结构示意图;图3为本发明实施例中分布式心跳检测方法的中心节点系统的结构示意图;图4为本发明实施例中分布式心跳检测方法的一个实施例示意图;图5为本发明实施例中心跳视图的结构示意图;图6为本发明实施例中分布式心跳检测方法的另一个实施例示意图;图7为本发明实施例中分布式心跳检测方法的又一个实施例示意图;图8为本发明实施例中分布式心跳检测方法的再一个实施例示意图;图9为本发明实施例中节点的一个实施例示意图10为本发明实施例中节点的另一个实施例示意图;图11为本发明实施例中节点的又一个实施例示意图;图12为本发明实施例中节点的再一个实施例示意图;图13为本发明实施例中节点的硬件装置实施例示意图;图14为本发明实施例中分布式心跳检测系统的一个实施例示意图。
具体实施例方式本发明实施例提供了一种分布式心跳检测方法、装置及系统,用于提高检测节点故障的效率。本发明实施例中,在分布式节点系统中添加一个中心节点,所述中心节点控制节点系统中数据节点之间的心跳检测关系。本发明中的中心节点只处理与心跳视图有关的事务,不参与心跳消息的发送和处理,从而不会限制存储系统中的数据节点扩展。除中心节点夕卜,在节点系统中呈分布式排列有各数据节点,各节点数据之间互相传递心跳消息,各数据节点根据所述心跳消息对其他数据节点进行节点状态检测。为便于理解,请参阅图2,本发明实施例中,在分布式节点系统中添加一个中心节点,其余数据节点均可与中心节点进行数据交互。该中心节点用于处理节点系统中元数据的修改、将系统中产生的新的元数据更新到数据节点中以及提供元数据的查询业务。元数据为数据库中描述数据及其环境的数据。主要是描述数据属性的信息,用来支持如指示存储位置、历史数据、资源查找、文件纪录等功能,本实施例中,元数据可以为节点系统的拓扑结构数据。本实施例中的中心节点为元数据控制器(MDC, Meta Data Controller)。需要说明的是,中心节点可以与数据节点部署在同一台服务器,也可以单独部署在一台服务器上。中心节点也可以由两个或两个以上的中心节点组成一个小规模的中心节点系统,以提供元数据管理服务,这样,即使某个中心节点发生了故障,还有其他的中心节点能够继续提供服务,提高了系统的可靠性和可用性,具体请参阅图3,三个中心节点201组成中心节点系统202。本发明实施例中,在节点系统中只存在一个中心节点时,将该中心节点之外的节点统称为数据节点,在节点系统中存在一个中心节集群时,将该中心节点系统之外的节点统称为数据节点。请参阅图4,本发明实施例中的分布式心跳检测方法的一个实施例包括:301、中心节点根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识所述数据节点与不同数据节点所组成的心跳检测关系;中心节点根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,心跳视图用于标识所述数据节点与不同数据节点所组成的心跳检测关系,心跳检测关系是指节点系统中某个数据节点与其他不同数据节点之间检测对方是否发生故障的关系,即,某个数据节点检测哪些其他不同数据节点是否发生故障,以及该某个数据节点被哪些其他不同数据节点检测是否发生故障。心跳视图具体为表示所述心跳检测关系的数据节点身份标识号码(ID,IDentity)的序列,本实施例中,将接收中心节点发送的心跳视图的数据节点称为视图节点,接收该视图节点发送的心跳消息的数据节点称为接收节点,向该视图节点发送心跳消息的数据节点称为发送节点,则心跳视图为一个包含视图节点ID、接收节点ID及发送节点ID的序列。心跳视图是由η个数据节点ID组成的序列,η为奇数,且η > 3,在所述数据节点ID组成序列中第(η+1)/2个数据节点ID表示视图节点的ID,该视图节点向接收节点发送心跳消息,该视图节点接收来自发送节点的心跳消息。例如,以η=5为例,心跳视图结构示意图请见图5,心跳视图中包含多个数据节点ID,第一接收节点ID、第二接收节点ID、视图节点ID、第一发送节点ID和第二发送节点ID。可以理解的,心跳视图中可携带更多数据节点ID,以使得所述数据节点根据该心跳视图对其他数据节点进行心跳检测。302、将所述心跳视图发送给对应数据节点,使得所述数据节点根据所述心跳视图发送心跳消息。数据节点上电后,向中心节点请求心跳视图,中心节点可以根据数据节点的请求,将为该数据节点生成的对应的心跳视图发送给该数据节点,使得所述数据节点根据所述心跳视图发送心跳消息。节点系统根据用户预先设置的心跳检测时长。所述心跳检测时长,是指数据节点检测其他不同数据节点是否发生故障的检测时长,例如,用户预先设置的心跳检测时长为10秒,则表示数据节点接到其他不同数据节点发送心跳消息后,每隔10秒判断一次该其他不同数据节点是否发生故障。本实施例中,数据节点根据接收的心跳视图可获知要检测哪些其他数据节点是否发生故障,以及哪些其他数据节点可检测该数据节点自身是否发生故障。具体地,以数据节点A为例,数据节点A向中心节点请求心跳视图,该心跳视图指示数据节点A向数据节点B发送心跳消息,数据节点在发送心跳消息时,心跳视图随着心跳消息一起发送。那么,数据节点A在接收到该心跳视图后,便可根据该心跳视图向数据节点B发送心跳消息。而数据节点B向中心节点请求的心跳视图也会指示数据节点B接收数据节点A发送的心跳消息,这样,从数据节点接收到中心节点发送的心跳视图后,便开始计时,以判断经过设置的心跳检测时长是否会接收到数据节点A发送的心跳消息,若经过设置的心跳检测时长后未收到数据节点A发送的心跳消息,则数据节点B判断数据节点A已经发生故障,若在预置的故障检查时长内收到数据节点A发送的心跳消息,则数据节点B判断数据节点A未发生故障。本发明实施例中,中心节点根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,该心跳视图用于标识所述数据节点与不同数据节点所组成的心跳检测关系,中心节点将各心跳视图发送给对应数据节点,使得节点系统中的数据节点之间的心跳检测关系相对稳定,每个数据节点能够知道与自己有心跳检测关系的其他数据节点,因此可以根据心跳检测关系来更准确地设置自己与其他数据节点之间的心跳检测时长,与现有技术中因数据节点之间检测关系不确定而使得设置的心跳检测时长不准确相比,本发明实施例通过心跳检测来进行故障检测的方法更准确。并且,中心节点通过心跳视图统一管理数据节点互相传递心跳消息,但不参与心跳消息的传递及心跳的检测,那么,当系统中有新的数据节点加入时,该新加入的数据节点通过与中心节点的交互能够很快根据心跳视图中接收节点及发送节点的ID,获知与其他数据节点的收发心跳消息的关系并据此进行通信,使得系统具有很好的扩展性,同时,数据节点只需向心跳视图关联的节点发送心跳消息,减少通信消息的数量,可节约服务器能耗。
为便于理解,下面以另一实施例详细说明本发明实施例中的分布式心跳检测方法,请参阅图6,本发明实施例中的分布式心跳检测方法的另一个实施例包括:401、中心节点根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识该数据节点与不同数据节点所组成的心跳检测关系;中心节点根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,心跳视图用于标识所述数据节点与不同数据节点所组成的心跳检测关系,心跳检测关系是指节点系统中某个数据节点与其他不同数据节点之间检测对方是否发生故障的关系,即,某个数据节点检测哪些其他不同数据节点是否发生故障,以及该某个数据节点被哪些其他不同数据节点检测是否发生故障。心跳视图具体为表示所述心跳检测关系的数据节点ID的序列,心跳视图的具体格式请参阅前述图3所示实施例中步骤301的相关描述,此处不再赘述。本发明实施例中,按照每个数据节点所处的机架及服务器的位置选取数据节点,所述心跳视图中具有心跳检测关系的不同数据节点分布在不同的服务器或机架中,根据所选取的数据节点的ID生成所述心跳视图。具体地,中心节点控制节点系统中数据节点之间的心跳检测关系,该中心节点接收管理员下发的节点系统的拓扑结构信息,该拓扑结构信息中包含的该节点系统的拓扑结构标识该节点系统中各节点的连接关系,包括各节点所在的节点的机架(英文:rack)信息和服务器(英文:server)信息。中心节点按照节点系统中各数据节点在所述节点系统中所处的机架及服务器的位置选取数据节点,根据所选取的数据节点的ID生成所述心跳视图,优选地,为了检测到更多rack或server的数据节点是否发生故障,可以选取不同rack,不同server的数据节点生成所述节点系统中数据节点的心跳视图,例如:在节点系统中有2个rack,每个rack中各有2个server,每个server中有10个数据节点,可选取每个rack中每个server中的I个数据节点的ID生成心跳视图。拓扑结构信息发生变化会导致各数据节点之间发送和接收信息的关系发生变化,进而导致心跳视图中的数据节点ID的序列相应发生变化,生成的心跳视图标识与包含的数据节点ID对应的数据节点之间的心跳检测关系。402、将所述心跳视图发送给所述节点系统中的数据节点,使得所述数据节点根据所述心跳视图发送心跳消息;中心节点可以根据数据节点的请求,将生成的所述心跳视图发送给所述节点系统中的数据节点,使得所述数据节点根据所述心跳视图发送心跳消息,并且在发送的心跳消息中携带所述心跳视图。本步骤的具体内容请参见图4所示实施例中步骤302中的具体描述,此处不再赘述。403、若在预先设置的心跳检测时长内,没有接收到所述第一数据节点对应的心跳视图中所指示的发送节点所发送的心跳消息,则判定所述发送节点故障;若在预先设置的心跳检测时长内,所述第一节点没有接收到所述第一数据节点对应的心跳视图中所指示的发送节点所发送的心跳消息,则判定所述发送节点故障。其中,所述第一数据节点为所述节点系统中任意一个数据节点,所述发送节点为所述第一数据节点对应的心跳视图中标识的向所述第一数据节点发送心跳消息的数据节点。404、若接收到任一数据节点发送的故障汇报信息,则为所述节点系统中除故障节点外的每个数据节点生成对应的新的心跳视图并发送给对应的数据节点,若接收到任一数据节点发送的心跳视图查询信息,则查询该数据节点对应的最新的心跳视图,并将所述最新的心跳视图发送给该数据节点。本实施例中,若中心节点接收到所述节点系统中任一数据节点发送的故障汇报信息,所述故障汇报信息用于汇报发生故障的数据节点的信息,所述故障汇报信息中包含有上报的故障节点,则根据除去所述故障汇报信息中汇报的故障节点之外的节点系统的拓扑结构,为所述节点系统中除故障节点外的每个数据节点生成对应的新的心跳视图,并将所述新的心跳视图发送给对应的数据节点。若中心节点接收到所述节点系统中任一数据节点发送的心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点最新的心跳视图,则查询该数据节点对应的最新的心跳视图,所述最新的心跳视图是指中心节点最近一次根据节点系统的拓扑结构为该数据节点生成的对应的心跳视图,并将所述最新的心跳视图发送给该数据节点。中心节点将所述新的心跳视图发送给对应的数据节点具体为,将每个新的心跳视图与对应数据节点最近一次的历史心跳视图进行比较获得至少一个第一数据节点,所述第一数据节点为最近一次历史心跳视图和第一数据节点对应的新的心跳视图不同的数据节点,将所述第一数据节点对应的新的心跳视图发送给所述第一数据节点。需要说明的是,本发明实施例中的中心节点也可以是两个或两个以上的MDC节点组成的中心节点集群,若所述数据节点发生故障或所述节点系统的配置信息发生更改,则生成新的心跳视图,并将所述生成的新的心跳视图发送给及其他中心节点。具体地,在中心节点集群中通过选举算法选举一个MDC节点作为主MDC节点,其他的MDC节点为备MDC节点。该主MDC节点可以是通信质量最好的一个MDC节点,该主MDC节点为集群中的数据节点提供元数据的管理和查询服务。当节点系统中有数据节点发生故障时,主MDC节点负责处理节点系统中的交互数据,根据发生故障的节点ID更新心跳视图,将新的心跳视图同步到备MDC节点,并提供心跳视图的查询服务。若主MDC节点发生故障或者由于故障被隔离后,中心节点集群中的多个备MDC节点则再次选举产生一个新的主MDC节点继续为数据节点提供服务。本发明实施例中,中心节点接收到数据节点发送的故障汇报信息后,根据除去所述故障汇报信息中汇报的故障节点之外的节点系统的拓扑结构,为所述节点系统中除故障节点外的每个数据节点生成对应的新的心跳视图,并将所述新的心跳视图发送给对应的数据节点,而不需要向其他与该新的心跳视图不相关的数据节点发送该心跳视图,所以可减少通信消息数量,节约带宽,由于其他中心节点及时进行心跳视图的更新,可防止由于中心节点发生故障而造成系统无法正常处理数据,提高系统的可用性和可靠性。以上是从中心节点侧描述了本发明实施例中的分布式心跳检测方法,下面从数据节点侧描述本发明实施例中的分布式心跳检测方法,请参阅图7,本发明实施例中的分布式心跳检测方法的又一个实施例包括:501、第一数据节点接收第二数据节点发送的心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图,所述第二心跳视图标识所述第二数据节点与不同的数据节点所组成的心跳检测关系;本实施例中,该第一数据节点与该第二数据节点,均为节点系统中的数据节点,二者处理数据的功能相同。第一数据节点接收所述第二数据节点发送的心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图。该第一心跳视图和该第二心跳视图均由中心节点生成,每个数据节点上电启动后,向中心节点发送获取心跳视图的请求。所述心跳视图标识与所述第二数据节点与不同的数据节点所组成的心跳检测关系,心跳检测关系是指节点系统中第二数据节点与其他不同数据节点之间检测对方是否发生故障的关系,即,第二数据节点检测哪些其他不同数据节点是否发生故障,以及该某个数据节点被哪些其他不同数据节点检测是否发生故障。所述心跳视图为与所述心跳消息关联的数据节点ID的序列,将接收中心节点发送的心跳视图的数据节点称为视图节点,接收该视图节点发送的心跳消息的数据节点称为接收节点,向该视图节点发送心跳消息的数据节点称为发送节点,则心跳视图为一个包含视图节点ID、接收节点ID及发送节点ID的序列。心跳视图是由η个数据节点ID组成的序列,η为奇数,且η > 3,在所述数据节点ID组成序列中第(η+1)/2个数据节点ID表示视图节点的ID,该视图节点向接收节点发送心跳消息,该视图节点接收来自发送节点的心跳消息。例如,以η=5为例,心跳视图结构示意图请见图5,心跳视图中包含多个数据节点ID,第一接收节点ID、第二接收节点ID、视图节点ID、第一发送节点ID和第二发送节点ID。可以理解的,心跳视图中可携带更多数据节点ID,以使得所述数据节点根据该心跳视图对其他数据节点进行心跳检测。502、对比所述第一数据节点的第一心跳视图与接收的该第二数据节点的第二心跳视图是否一致;其中,所述第一心跳视图标识有所述第一数据节点与不同的数据节点组成的心跳检测关系。本实施例中,心跳检测关系是指节点系统中第一数据节点与其他不同数据节点之间检测对方是否发生故障的关系,即,第一数据节点检测哪些其他不同数据节点是否发生故障,以及该某个数据节点被哪些其他不同数据节点检测是否发生故障。中心节点对比所述第一数据节点的第一心跳视图与接收的该第二数据节点的第二心跳视图是否一致,是指中心节点对比所述第一心跳视图与所述第二心跳视图中包含的共同的数据节点ID对应的数据节点之间的心跳检测关系是否相同。例如,第一心跳视图中各数据节点ID的序列为{4,5,0,1,2},第二心跳视图中各数据节点ID的序列为{5,0,1,2,3},二者包含的共同的数据节点ID为4个,即5,0,1,2,那么,只要对比出在第一心跳视图中这4个数据节点ID对应的数据节点之间的心跳检测关系,与第二心跳视图中这4个数据节点ID对应的数据节点之间的心跳检测关系相同,即可确定第一心跳视图与第二心跳视图一致。若是,则执行步骤503,若否,则执行步骤504。503、根据接收所述第二数据节点的心跳消息的时间和心跳间隔,判断所述第二数据节点是否发生故障;第一数据节点接收第二数据节点的心跳消息的时间,即是第一数据节点接收到该心跳消息时的时间。心跳间隔表示该第二数据节点每发送两次心跳消息的时间间隔,第一数据节点根据该心跳消息的时间和心跳间隔,可判断所述第二数据节点是否按设置的心跳间隔发送下一次心跳消息,以此判断该第二数据节点是否发生故障。若确定所述第二数据节点发生故障,则执行步骤505。504、向所述中心节点发送心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图;如果所述第一数据节点判断第一心跳视图与接收的该第二心跳视图不一致,表明两个数据节点中的某一个数据节点保存的是历史心跳视图,而不是最新的心跳视图,所述最新的心跳视图是指中心节点最近一次根据节点系统的拓扑结构为该数据节点生成的对应的心跳视图,根据历史心跳视图进行心跳检测,不能有效、及时、正确检测到节点系统中的数据节点的状态,进而影响系统内数据的正常处理。则第一数据节点向所述中心节点发送心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图,第一数据节点进一步根据查询到的最新的心跳视图标识的该数据节点与不同数据节点所组成的心跳检测关系,检测不同数据节点的心跳状态。505、若确定所述第二数据节点发生故障,则向中心节点发送故障汇报信息,所述故障汇报信息中包含有故障节点。第一数据节点确定第二数据节点发生故障后,向所述中心节点发送故障汇报信息,所述故障汇报信息用于向所述中心节点汇报发生故障的所述第二数据节点的信息,所述故障汇报信息中包含有故障节点,即第二数据节点。根据除去所述故障汇报信息中汇报的第二数据节点之外的节点系统的拓扑结构,为所述节点系统中除该第二数据节点外的每个数据节点生成对应的新的心跳视图,并将所述新的心跳视图发送给对应的数据节点。本发明实施例中,第一数据节点对比第一数据节点的第一心跳视图和第二数据节点的第二心跳视图是否一致,若一致,则根据接收的第二数据节点心跳消息中的时间和心跳间隔判断第二数据节点是否发生故障,若不一致,向所述中心节点查询中心节点生成的与所述第一数据节点对应的最新的心跳视图。若判断出第二数据节点发生了故障,则向中心节点发送故障汇报信息,通知该中心节点所述第二数据节点发生故障,使得所述中心节点根据除去第二数据节点之外的节点系统的拓扑结构,为所述节点系统中除该第二数据节点外的每个数据节点生成对应的新的心跳视图,因此,节点系统中的数据节点由中心节点通过心跳视图统一管理,数据节点根据该心跳视图互相传递心跳消息及互相进行心跳状态的检测,提高数据节点检测其他数据节点故障的效率。而中心节点并不参与心跳消息的传递及心跳的检测,那么,当系统中有新的数据节点加入时,该新加入的数据节点通过与中心节点的交互能够很快根据心跳视图中接收节点及发送节点的ID,获知与其他数据节点的收发心跳消息的关系并据此进行通信,使得系统具有很好的扩展性。下面以另一实施例详细描述本发明实施例中的分布式心跳检测方法,请参阅图8,本发明实施例中的分布式心跳检测方法的再一个实施例包括:601、第一数据节点接收所述第二数据节点发送的心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图,所述第二心跳视图标识所述第二数据节点与不同的数据节点所组成的心跳检测关系;第一数据节点接收所述第二数据节点发送的心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图。该第一心跳视图和该第二心跳视图是向中心节点获取的。心跳视图由中心节点生成,心跳视图的具体格式请见前述图7所示实施例中的相关描述内容,此处不再赘述。所述心跳视图标识与所述第二数据节点与不同的数据节点所组成的心跳检测关系,心跳检测关系是指节点系统中第二数据节点与其他不同数据节点之间检测对方是否发生故障的关系,即,第二数据节点检测哪些其他不同数据节点是否发生故障,以及该某个数据节点被哪些其他不同数据节点检测是否发生故障。602、对比所述第一数据节点的第一心跳视图与接收的该第二数据节点的第二心跳视图是否一致;其中,所述第一心跳视图标识有所述第一数据节点与不同的数据节点组成的心跳检测关系。心跳检测关系是指节点系统中第一数据节点与其他不同数据节点之间检测对方是否发生故障的关系,即,第一数据节点检测哪些其他不同数据节点是否发生故障,以及该某个数据节点被哪些其他不同数据节点检测是否发生故障。中心节点对比所述第一数据节点的第一心跳视图与接收的该第二数据节点的第二心跳视图是否一致,是指中心节点对比所述第一心跳视图与所述第二心跳视图中包含的共同的数据节点ID对应的数据节点之间的心跳检测关系是否相同。例如,第一心跳视图中各数据节点ID的序列为{4,5,0,1,2},第二心跳视图中各数据节点ID的序列为{5,0,1,2,3},二者包含的共同的数据节点ID为4个,即5,0,1,2,那么,只要对比出在第一心跳视图中这4个数据节点ID对应的数据节点之间的心跳检测关系,与第二心跳视图中这4个数据节点ID对应的数据节点之间的心跳检测关系相同,即可确定第一心跳视图与第二心跳视图一致。具体对比第一心跳视图与第二心跳视图是否一致的方式,可以是当第二数据节点向第一数据节点发送心跳消息时,在心跳消息中携带第二数据节点的第二心跳视图,第一数据节点根据接收到的所述第二心跳视图,以及第一数据节点的ID和第二数据节点的ID分别在第二心跳视图中的位置,生成第一对比序列,所述第一对比序列由数据节点ID组成,所述第一对比序列的数据节点ID范围为[hbviewl [b- (n_l)/2],hbviewl [a+(n-1/2)]],第一数据节点根据第一数据节点的心跳视图,以及第一数据节点的ID和第二数据节点的ID分别在第一数据节点的心跳视图中的位置,生成第二对比序列,所述第二比序列的数据节点 ID 范围为[hbview2[b- (n-1) /2], hbview2[a+ (n_l)/2]],其中 a、b 分别是第一数据节点的ID和第二数据节点的ID在心跳视图中的位置,η为心跳视图中数据节点的个数,η为奇数,且η > 3如果第一对比序列和第二对比序列一致,则第一数据节点及第二数据节点的心跳视图是一致的。例如,数据节点A的ID为0,数据节点B的ID为1,数据节点A的心跳视图中各数据节点ID的序列为{4,5,0,1,2},数据节点B的心跳视图中各数据节点ID的序列为{5,0,1,2,3}。那么,根据数据节点A的心跳视图可知,数据节点B要向数据节点A发送心跳消息,在心跳消息中携带节点B的心跳视图,当节点A接收到节点B的心跳消息时,根据节点B的心跳视图生成第一对比序列。具体地,在节点B的心跳视图中,以O作为起始位置,则数据节点A的位置为1,数据节点B的位置为2,那么第一对比序列中数据节点ID的位置范围是(2-2) (1+2),即O 3,则数据节点B的对比序列为数据节点B的心跳视图中包括前4个数据节点ID的序列,即数据节点B的对比序列为{5,0,1,2}。同理,数据节点A根据数据节点A的心跳视图生成第二对比序列,所述第二对比序列中数据节点ID的位置范围为(3-2) (2+2),即I 4,则第二对比序列为数据节点A的心跳视图中包括后4个数据节点ID的序列,即第二对比序列为{5,0,1,2}。节点A对比生成的两个对比序列是一致的,则确定数据节点A接收的数据节点B的心跳视图与数据节点A的心跳视图是一致的。若是,则执行步骤603,若否,则执行步骤604。603、记录所述第二数据节点发送的心跳消息的时间,若记录的所述心跳消息的时间在设置的心跳检测时长内未更新,则判断所述第二数据节点发生故障,并向所述中心节点发送故障汇报信息,所述故障汇报信息中包含有故障节点;本实施例中设置的心跳检测时长可包括至少一个心跳间隔,该心跳检测时长可根据系统应用情况自定义设置,如果对检测数据节点是否发生故障要求越高,则将该心跳检测时长设置越小,包括的心跳间隔越少。第一数据节点记录所述第二数据节点发送的心跳消息的时间,当检测到记录的所述心跳时间的信息在设置的心跳检测时长内未更新,在该心跳检测时长内未接收到新的心跳时间信息,则判断所述第二数据节点发生故障,向所述中心节点发送故障汇报信息,所述故障汇报信息中包含有故障节点。例如,该第二节点的心跳间隔为5秒,设置的心跳检测时长为20秒,即包括4个心跳间隔。该第一节点记录的该第二节点的最新心跳时间的信息为14点00分05秒,那么经过20秒后,检测当前记录的最新心跳时间的信息仍为14点00分05秒,则表示在经过设置的心跳检测时长后,第一节点未更新心跳时间的信息,未接到来自第二节点的更新的心跳
消息,可确定该第二节点已发生故障。604、向所述中心节点发送心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图,并向所述第二数据节点发送响应信息,所述响应信息用于通知所述第一数据节点该第一心跳视图与该第二心跳视图
不一致。该第一数据节点发现所述第一数据节点自身的第一心跳视图与接收的第二数据节点的第二心跳视图不一致,若继续按照各自的心跳视图执行数据节点故障的检测和进行各自心跳视图的转发,将造成系统内在处理数据时产生错误。进一步地,该第一数据节点向所述中心节点发送心跳视图查询信息,用以查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图,并向所述第二数据节点发送响应信息,用以通知所述第一数据节点的第一心跳视图与接收的所述第二数据节点的第二心跳视图不一致,使得第二数据节点获知该第二数据节点自身保存的心跳视图可能未及时更新,与该中心节点所述中心节点生成的所述第二数据节点对应的最新的心跳视图不一致。在节点系统中,数据节点之间根据心跳视图检测其他不同数据节点的故障及转发心跳消息,每个数据节点都可能接到来自其他数据节点的该响应信息。该第一数据节点若接收到通知所述第一数据节点的心跳视图与不同数据节点的心跳视图不一致的响应信息,则该第一数据节点向所述中心节点发送所述心跳视图查询信息,查询所述中心节点最新的心跳视图,避免因该第一数据节点自身保存的心跳视图不是最新的心跳视图,在与节点系统中不同数据节点数据交互时发生错误。本发明实施例中,第一数据节点对比第一心跳视图与第二心跳视图是否一致,若一致,记录所述第二数据节点的心跳消息中的时间,当记录的所述心跳消息的时间在预置的心跳检测时长内未更新,则判断所述第二数据节点发生故障,并向所述中心节点发送故障汇报信息,所述故障汇报信息中包含有故障节点,若不一致,向所述中心节点查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图,并向所述第二数据节点发送响应信息,通知其所述第一心跳视图与所述第二心跳视图不一致,从而在中心节点的统一管理下,避免在系统中按照各自的心跳视图执行数据节点故障的检测和进行各自心跳视图的转发,而造成处理数据时产生错误。在以上实施例中,第一数据节点和第二数据节点只是表示节点系统中的任意两个数据节点之间的交互方式,以及该两个数据节点与所述中心节点之间的交互方式,在节点系统实际应用过程中,所有的数据节点均可通过上述方式实现数据的互相交互,以及与中心节点的交互。下面详细说明本发明中的节点,请参阅图9,本发明实施例中的节点包括:生成单元701,用于根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识该数据节点与不同数据节点所组成的心跳检测关系;发送单元702,用于将所述生成单元生成的每个所述心跳视图发送给对应数据节点,使得所述对应的数据节点根据所述心跳视图发送心跳消息。本发明实施例中的节点的各单元实现各自功能的具体过程,请参见前述图4所示实施例中的具体描述,此处不再赘述。本发明实施例中,生成单元701根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识该数据节点与不同数据节点所组成的心跳检测关系,发送单元702将所述生成单元701生成的每个所述心跳视图发送给对应数据节点,使得所述对应的数据节点根据所述心跳视图发送心跳消息,使得节点系统中的数据节点之间的心跳检测关系相对稳定,每个数据节点能够知道与自己有心跳检测关系的其他数据节点,因此可以根据心跳检测关系来更准确地设置自己与其他数据节点之间的心跳检测时长,与现有技术中因数据节点之间检测关系不确定而使得设置的心跳检测时长不准确相比,本发明实施例通过心跳检测来进行故障检测的方法更准确。并且通过心跳视图统一管理数据节点互相传递心跳消息,但不参与心跳消息的传递及心跳的检测,从而提高数据节点间检测故障的速度和时效性,当系统中有新的数据节点加入时,能够很快通过心跳视图控制该新加入的数据节点与节点系统中其他的数据节点进行通信,从而系统具有很好的扩展性,同时,数据节点只需向心跳视图关联的节点发送心跳消息,减少通信消息的数量,可节约服务器能耗。下面以另一实施例详细描述本发明实施例中的中心节点,请参阅图10,本发明实施例中的中心节点的另一个实施例包括:生成单元801,用于根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识该数据节点与不同数据节点所组成的心跳检测关系;发送单元802,用于将所述生成单元801生成的每个所述心跳视图发送给对应数据节点,使得所述对应的数据节点根据所述心跳视图发送心跳消息。进一步地,本发明实施例中的节点还包括:选取单元803,用于按照每个数据节点所处的机架及服务器的位置选取数据节点,所述心跳视图中具有心跳检测关系的不同数据节点分布在不同的服务器或机架中;所述生成单元801,还用于根据所述选取单元803所选取的数据节点的ID生成所述心跳视图。本发明实施例中的节点还可以进一步包括:判定单元804,用于若第一数据节点在预先设置的心跳检测时长内,没有接收到所述第一数据节点对应的心跳视图中所指示的发送节点所发送的心跳消息,则判定所述发送节点故障,所述第一数据节点为所述节点系统中任意一个数据节点,所述发送节点为所述第一数据节点对应的心跳视图中标识的向所述第一数据节点发送心跳消息的数据节点。所述生成单元801,还用于若接收到所述节点系统中任一数据节点发送的故障汇报信息,所述故障汇报信息中包含有上报的故障节点,则根据除去所述故障汇报信息中汇报的故障节点之外的节点系统的拓扑结构,为所述节点系统中除故障节点外的每个数据节点生成对应的新的心跳视图;所述发送单元,还用于将所述生成单元801生成的每个所述新的心跳视图分别发送给对应的数据节点。本发明实施例中的节点还可以进一步包括:查询单元805,用于若接收到所述节点系统中任一数据节点发送的心跳视图查询信息,则查询该数据节点对应的最新的心跳视图;所述发送单元802,还用于将所述最新的心跳视图发送给该数据节点。进一步地,本实施例中的节点还可以进一步包括:比较单元806,用于将每个新的心跳视图与对应数据节点最近一次的历史心跳视图进行比较获得至少一个第一数据节点,所述第一数据节点为最近一次历史心跳视图和第一数据节点对应的新的心跳视图不同的数据节点;所述发送单元802,还用于将所述第一数据节点对应的新的心跳视图发送给所述
第一数据节点。本发明实施例中的节点的各单元实现各自功能的具体过程,请参见前述图4及图6所示实施例中的具体描述,此处不再赘述。本发明实施例中,生成单元801接收到数据节点发送的故障汇报信息后,根据除去所述故障汇报信息中汇报的故障节点之外的节点系统的拓扑结构,为所述节点系统中除故障节点外的每个数据节点生成对应的新的心跳视图,发送单元802将所述新的心跳视图发送给对应的数据节点,而不需要向其他与该新的心跳视图不相关的数据节点发送该心跳视图,所以可减少通信消息数量,节约带宽,由于其他中心节点及时进行心跳视图的更新,可防止由于中心节点发生故障而造成系统无法正常处理数据,提高系统的可用性和可靠性。下面介绍本发明实施例中的另一种节点,请参阅图11,本发明实施例中的节点的又一个实施例包括:接收消息单元901,用于第一数据节点接收第二数据节点发送的心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图,所述第二心跳视图标识所述第二数据节点与不同的数据节点所组成的心跳检测关系;对比单元902,用于对比所述第一数据节点的第一心跳视图与接收的所述第二心跳视图是否一致,其中,所述第一心跳视图标识有所述第一数据节点与不同的数据节点组成的心跳检测关系;判断单元903,用于若所述对比单元902对比所述第一心跳视图与所述第二心跳视图一致,则根据接收所述第二数据节点的心跳消息的时间和心跳间隔,判断所述第二数据节点是否发生故障;发送信息单元904,用于若所述判断单元903确定所述第二数据节点发生故障,则向中心节点发送故障汇报信息,所述故障汇报信息中包含有故障节点;所述发送信息单元904,还用于若所述对比单元对比所述第一心跳视图与所述第二心跳视图不一致,则向所述中心节点发送心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图。需要说明的是,本发明实施例中的节点还可以包括定时器,用于控制所述发送信息单元903定时发送心跳消息,以及控制所述判断单元903定时判断第二数据节点是否发生故障。本发明实施例中的节点的各单元实现各自功能的具体过程,请参见前述图7所示实施例中的具体描述,此处不再赘述。本发明实施例中,对比单元902对比第一数据节点的第一心跳视图和第二数据节点的第二心跳视图是否一致,若一致,则判断单元903根据接收的第二数据节点心跳消息中的时间和心跳间隔判断第二数据节点是否发生故障,若不一致,则发送信息单元904向所述中心节点发送心跳视图查询信息,以查询中心节点生成的与所述第一数据节点对应的最新的心跳视图。若判断单元判断第二数据节点发生了故障,则发送信息单元904向中心节点发送故障汇报信息,使得所述中心节点根据除去第二数据节点之外的节点系统的拓扑结构,为所述节点系统中除该第二数据节点外的每个数据节点生成对应的新的心跳视图,因此,节点系统中的数据节点由中心节点通过心跳视图统一管理,数据节点根据该心跳视图互相传递心跳消息及互相进行心跳状态的检测,提高数据节点检测其他数据节点故障的效率。而中心节点并不参与心跳消息的传递及心跳的检测,那么,当系统中有新的数据节点加入时,该新加入的数据节点通过与中心节点的交互能够很快根据心跳视图中接收节点及发送节点的ID,获知与其他数据节点的收发心跳消息的关系并据此进行通信,使得系统具有很好的扩展性。下请参阅图12,本发明实施例中的节点的再一个实施例包括:接收消息单元1001,用于第一数据节点接收第二数据节点发送的心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图,所述第二心跳视图标识所述第二数据节点与不同的数据节点所组成的心跳检测关系;对比单元1002,用于对比所述第一数据节点的第一心跳视图与所述接收消息单元1001接收的所述第二心跳视图是否一致,其中,所述第一心跳视图标识有所述第一数据节点与不同的数据节点组成的心跳检测关系;判断单元1003,用于若所述对比单元1002对比所述第一心跳视图与所述第二心跳视图一致,则根据接收所述第二数据节点的心跳消息的时间和心跳间隔,判断所述第二数据节点是否发生故障;发送信息单元1004,用于若所述判断单元1003确定所述第二数据节点发生故障,则向中心节点发送故障汇报信息,所述故障汇报信息中包含有故障节点;所述发送信息单元1004,还用于若所述对比单元1002对比所述第一心跳视图与所述第二心跳视图不一致,则向所述中心节点发送心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图。进一步地,所述对比单元1002,具体用于对比所述第一心跳视图与所述第二心跳视图中包含的共同的数据节点ID对应的数据节点之间的心跳检测关系是否相同。所述发送信息单元1004,还用于向所述第二数据节点发送响应信息,所述响应信息用于通知所述第一数据节点所述第一心跳视图与所述第二心跳视图不一致。进一步地,本实施例中的节点还可以包括:记录单元1005,用于记录所述第二数据节点发送的心跳消息的时间;所述判断单元1003,还用于若记录的所述心跳消息的时间在设置的心跳检测时长内未更新,则判断所述第二数据节点发生故障。进一步地,所述发送信息单元1004,还用于若接收到通知所述第一数据节点的心跳视图与不同数据节点的心跳视图不一致的响应信息,则向所述中心节点发送所述心跳视图查询信息。本发明实施例中的节点的各单元实现各自功能的具体过程,请参见前述图7及图8所示实施例中的具体描述,此处不再赘述。本发明实施例中,对比单元1002对比所述第一数据节点的第一心跳视图与接收消息单元1001接收的第二数据节点发送的第二心跳视图是否一致,若一致,记录单元1005记录所述第二数据节点的心跳消息中的时间,当记录的所述心跳消息的时间在预置的心跳检测时长内未更新,则判断单元1003判断所述第二数据节点发生故障,若所述第一心跳视图与所述第二心跳视图不一致,则发送信息单元1004向所述中心节点发送心跳视图查询信息,用于查询与所述第一数据节点对应的最新的心跳视图,发送信息单元1004向所述第二数据节点发送响应信息,通知所述第二节点所述第一数据节点所述第一心跳视图与所述第二心跳视图不一致,从而在中心节点的统一管理下,避免在系统中按照各自的心跳视图执行数据节点故障的检测和进行各自心跳视图的转发,而造成处理数据时产生错误。本发明实施例还提供了一种节点,请参阅图13,所述节点包括:接收装置1101,发送装置1102,存储器1103,处理器1104 ;节点中的处理器1104的数量可以为一个或多个,图13中以一个处理器为例,在本发明实施例中,输入装置1101、输出装置1102、存储器1103和处理器1104可通过总线或其他方式连接,图13中以通过总线连接为例。所述处理器1104根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识该数据节点与不同数据节点所组成的心跳检测关系;
所述输出装置1102将每个所述心跳视图发送给对应数据节点,使得所述对应的数据节点根据所述心跳视图发送心跳消息。或者,本实施例的节点也可执行如下步骤:所述输入装置1101接收第二数据节点发送的心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图,所述第二心跳视图标识所述第二数据节点与不同的数据节点所组成的心跳检测关系;所述处理器1104对比所述第一数据节点的第一心跳视图与接收的所述第二心跳视图是否一致;若所述第一心跳视图与所述第二心跳视图一致,所述处理器1104则根据接收所述第二数据节点的心跳消息的时间和心跳间隔,判断所述第二数据节点是否发生故障;若确定所述第二数据节点发生故障,所述输出装置1102则向所述中心节点发送故障汇报信息,所述故障汇报信息中包含有故障节点;若所述第一心跳视图与所述第二心跳视图不一致,输出装置1102则向所述中心节点发送心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图。本实施例中的节点的各功能模块的功能可以根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述方法实施例的相关描述,此处不再赘述。本发明实施例还提供了一种分布式心跳检测系统,请参阅图14,包括:中心节点1201,数据节点1202 ;所述中心节点1201,用于根据节点系统的拓扑结构为每个数据节点1202生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识该数据节点与不同数据节点所组成的心跳检测关系,将每个所述心跳视图发送给对应数据节点,使得所述对应的数据节点根据所述心跳视图发送心跳消息;所述数据节点1202包括第一数据节点12021和第二数据节点12022、其中,所述第一数据节点12021,用于接收第二数据节点12022发送的心跳消息,所述心跳消息中携带所述第二数据节点12022的第二心跳视图,所述第二心跳视图标识所述第二数据节点12022与不同的数据节点所组成的心跳检测关系,对比所述第一数据节点12021的第一心跳视图与接收的所述第二心跳视图是否一致,其中,所述第一心跳视图标识有所述第一数据节点12021与不同的数据节点组成的心跳检测关系,若所述第一心跳视图与所述第二数据节点12022的心跳视图一致,则根据接收所述第二数据节点12022的心跳消息的时间和心跳间隔,判断所述第二数据节点12022是否发生故障,若确定所述第二数据节点12022发生故障,则向中心节点1201发送故障汇报信息,所述故障汇报信息中包含有故障节点,若所述第一心跳视图与所述第二数据节点12022的心跳视图不一致,则向所述中心节点1201发送心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点1201生成的与所述第一数据节点12021对应的最新的心跳视图;所述第二数据节点12022,用于向所述第一数据节点12021发送心跳消息,所述心跳消息中携带所述第二数据节点12022的第二心跳视图,所述第二心跳视图标识所述第二数据节点12022与不同的数据节点所组成的心跳检测关系。本实施例中的中心节点和数据节点的各功能模块的功能可以根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述方法实施例的相关描述,此处不再赘述。本领域技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。以上对本发明所提供的一种分布式心跳检测方法、装置及系统进行了详细介绍,对于本领域的技术人员,依据本发明实施例的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种分布式心跳检测方法,应用于节点系统,其特征在于,所述节点系统中包括中心节点和多个数据节点,所述方法包括: 中心节点根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识该数据节点与不同数据节点所组成的心跳检测关系; 将每个所述心跳视图发送给对应数据节点,使得所述对应的数据节点根据所述心跳视图发送心跳消息。
2.根据权利要求1所述的方法,其特征在于,所述根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图包括: 按照每个数据节点所处的机架及服务器的位置选取数据节点,所述心跳视图中具有心跳检测关系的不同数据节点分布在不同的服务器或机架中; 根据所选取的数据节点的ID生成所述心跳视图。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括: 若在预先设置的心跳检测时长内,没有接收到所述第一数据节点对应的心跳视图中所指示的发送节点所发送的心跳消息,则判定所述发送节点故障,所述第一数据节点为所述节点系统中任意一个数据节点,所述发送节点为所述第一数据节点对应的心跳视图中标识的向所述第一数据节点发送心跳消息的数据节点。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括: 若接收到所述节点系统中任一数据节点发送的故障汇报信息,所述故障汇报信息中包含有上报的故障节点,则根据除去所述故障汇报信息中汇报的故障节点之外的节点系统的拓扑结构,为所述节点系统中除故障节点外的每个数据节点生成对应的新的心跳视图,将每个所述新的心跳视图分 别发送给对应的数据节点; 若接收到所述节点系统中任一数据节点发送的心跳视图查询信息,则查询该数据节点对应的最新的心跳视图,并将所述最新的心跳视图发送给该数据节点。
5.根据权利要求4所述的方法,其特征在于,所述将每个所述新的心跳视图分别发送给对应的数据节点,包括: 将每个新的心跳视图与对应数据节点最近一次的历史心跳视图进行比较获得至少一个第一数据节点,所述第一数据节点为最近一次历史心跳视图和第一数据节点对应的新的心跳视图不同的数据节点; 将所述第一数据节点对应的新的心跳视图发送给所述第一数据节点。
6.一种分布式心跳检测方法,其特征在于,包括: 第一数据节点接收第二数据节点发送的心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图,所述第二心跳视图标识所述第二数据节点与不同的数据节点所组成的心跳检测关系; 对比所述第一数据节点的第一心跳视图与接收的所述第二心跳视图是否一致,其中,所述第一心跳视图标识有所述第一数据节点与不同的数据节点组成的心跳检测关系; 若所述第一心跳视图与所述第二心跳视图一致,则根据接收所述第二数据节点的心跳消息的时间和心跳间隔,判断所述第二数据节点是否发生故障; 若确定所述第二数据节点发生故障,则向中心节点发送故障汇报信息,所述故障汇报信息中包含有故障节点;若所述第一心跳视图与所述第二心跳视图不一致,则向所述中心节点发送心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图。
7.根据权利要求6所述的方法,其特征在于,所述对比所述第一数据节点的第一心跳视图与接收的所述第二心跳视图是否一致包括: 对比所述第一心跳视图与所述第二心跳视图中包含的共同的数据节点ID对应的数据节点之间的心跳检测关系是否相同。
8.根据权利要求6所述的方法,其特征在于,所述对比所述第一数据节点的心跳视图与接收的所述第二心跳视图是否一致之后还包括: 向所述第二数据节点发送响应信息,所述响应信息用于通知所述第一数据节点所述第一心跳视图与所述第二心跳视图不一致。
9.根据权利要求6所述的方法,其特征在于,所述根据接收所述第二数据节点的心跳消息的时间和心跳间隔,判断所述第二数据节点是否发生故障包括: 记录所述第二数据节点发送的心跳消息的时间; 若记录的所述心跳消息的时间在设置的心跳检测时长内未更新,则判断所述第二数据节点发生故障。
10.根据权利要求6至9任一项所述的方法,其特征在于,所述方法包括: 若接收到通知所述第一数据节点的心跳视图与不同数据节点的心跳视图不一致的响应信息,则向所述中心节点发送所述心跳视图查询信息。
11.一种节点,其特征在于,包括: 生成单元,用于根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识该数据节点与不同数据节点所组成的心跳检测关系; 发送单元,用于将所述生成单元生成的每个所述心跳视图发送给对应数据节点,使得所述对应的数据节点根据所述心跳视图发送心跳消息。
12.根据权利要求11所述的节点,其特征在于,所述节点还包括: 选取单元,用于按照每个数据节点所处的机架及服务器的位置选取数据节点,所述心跳视图中具有心跳检测关系的不同数据节点分布在不同的服务器或机架中; 所述生成单元,还用于根据所述选取单元所选取的数据节点的ID生成所述心跳视图。
13.根据权利要求11或12所述的节点,其特征在于,所述节点还包括: 判定单元,用于若第一数据节点在预先设置的心跳检测时长内,没有接收到所述第一数据节点对应的心跳视图中所指示的发送节点所发送的心跳消息,则判定所述发送节点故障,所述第一数据节点为所述节点系统中任意一个数据节点,所述发送节点为所述第一数据节点对应的心跳视图中标识的向所述第一数据节点发送心跳消息的数据节点。
14.根据权利要求11或12所述的节点,其特征在于, 所述生成单元,还用于若接收到所述节点系统中任一数据节点发送的故障汇报信息,所述故障汇报信息中包含有上报的故障节点,则根据除去所述故障汇报信息中汇报的故障节点之外的节点系统的拓扑结构, 为所述节点系统中除故障节点外的每个数据节点生成对应的新的心跳视图;所述发送单元,还用于将所述生成单元生成的每个所述新的心跳视图分别发送给对应的数据节点。
15.根据权利要求11至14任一项所述的节点,其特征在于,所述节点还包括: 查询单元,用于若接收到所述节点系统中任一数据节点发送的心跳视图查询信息,则查询该数据节点对应的最新的心跳视图; 所述发送单元,还用于将所述最新的心跳视图发送给该数据节点。
16.根据权利要求11所述的节点,其特征在于,所述节点还包括: 比较单元,用于将每个新的心跳视图与对应数据节点最近一次的历史心跳视图进行比较获得至少一个第一数据节点,所述第一数据节点为最近一次历史心跳视图和第一数据节点对应的新的心跳视图不同的数据节点; 所述发送单元,还用于将所述第一数据节点对应的新的心跳视图发送给所述第一数据节点。
17.—种节点,其特征在于,包括: 接收消息单元,用于第一数据节点接收第二数据节点发送的心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图,所述第二心跳视图标识所述第二数据节点与不同的数据节点所组成的心跳检测关系; 对比单元,用于对比所述第一数据节点的第一心跳视图与所述接收消息单元接收的所述第二心跳视图是否一致,其中,所述第一心跳视图标识有所述第一数据节点与不同的数据节点组成的心跳检测关系; 判断单元,用于若所述对比单元对比所述第一心跳视图与所述第二心跳视图一致,则根据接收所述第二数据节点的心跳消息的时间和心跳间隔,判断所述第二数据节点是否发生故障; 发送信息单元,用于若所述判断单元确定所述第二数据节点发生故障,则向中心节点发送故障汇报信息,所述故障汇报信息中包含有故障节点; 所述发送信息单元,还用于若所述对比单元对比所述第一心跳视图与所述第二心跳视图不一致,则向所述中心节点发送心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图。
18.根据权利要求17所述的节点,其特征在于, 所述对比单元,具体用于对比所述第一心跳视图与所述第二心跳视图中包含的共同的数据节点ID对应的数据节点之间的心跳检测关系是否相同。
19.根据权利要求17或18所述的节点,其特征在于, 所述发送信息单元,还用于向所述第二数据节点发送响应信息,所述响应信息用于通知所述第一数据节点所述第一心跳视图与所述第二心跳视图不一致。
20.根据权利要求17至19任一项所述的节点,其特征在于,所述节点还包括: 记录单元,用于记录所述第二数据节点发送的心跳消息的时间; 所述判断单元,还用于若记录的所述心跳消息的时间在设置的心跳检测时长内未更新,则判断所述第二数据节点发生故障。
21.根据权利要求20所 述的节点,其特征在于, 所述发送信息单元,还用于若接收到通知所述第一数据节点的心跳视图与不同数据节点的心跳视图不一致的响应信息,则向所述中心节点发送所述心跳视图查询信息。
22.—种分布式心跳检测系统,其特征在于,包括: 中心节点,数据节点; 所述中心节点,用于根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识该数据节点与不同数据节点所组成的心跳检测关系,将每个所述心跳视图发送给对应数据节点,使得所述对应的数据节点根据所述心跳视图发送心跳消息; 所述数据节点包括第一数据节点和第二数据节点; 其中,所述第一数据节点,用于接收第二数据节点发送的心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图,所述第二心跳视图标识所述第二数据节点与不同的数据节点所组成的心跳检测关系,对比所述第一数据节点的第一心跳视图与接收的所述第二心跳视图是否一致,其中,所述第一心跳视图标识有所述第一数据节点与不同的数据节点组成的心跳检测关系,若所述第一心跳视图与所述第二心跳视图一致,则根据接收所述第二数据节点的心跳消息的时间和心跳间隔,判断所述第二数据节点是否发生故障,若确定所述第二数据节点发生故障,则向中心节点发送故障汇报信息,所述故障汇报信息中包含有故障节点,若所述第一心跳视图与所述第二心跳视图不一致,则向所述中心节点发送心跳视图查询信息,所述心跳视图查询信息用于查询所述中心节点生成的与所述第一数据节点对应的最新的心跳视图; 所述第二数据节点, 用于向所述第一数据节点发送心跳消息,所述心跳消息中携带所述第二数据节点的第二心跳视图,所述第二心跳视图标识所述第二数据节点与不同的数据节点所组成的心跳检测关系。
全文摘要
本发明实施例公开了一种分布式心跳检测方法,用于提高节点间检测故障的效率。本发明实施例方法包括中心节点根据节点系统的拓扑结构为每个数据节点生成一个对应的心跳视图,任一个数据节点的所述心跳视图用于标识该数据节点与不同数据节点所组成的心跳检测关系,将每个所述心跳视图发送给对应数据节点,使得所述对应的数据节点根据所述心跳视图发送心跳消息。
文档编号H04L29/08GK103117901SQ20131003994
公开日2013年5月22日 申请日期2013年2月1日 优先权日2013年2月1日
发明者刘叙友, 张烽 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1