一种节点选举方法及装置与流程

文档序号:12729264阅读:171来源:国知局
一种节点选举方法及装置与流程

本发明涉及网络通信技术领域,尤其涉及一种节点选举方法及装置。



背景技术:

分布式IRF(Intelligent Resilient Framework,智能弹性架构)系统通过交互STM(Stacking Management,堆叠管理)协议报文实现堆叠选举,堆叠选举过程涉及大量报文交互以及成员角色状态迁移,且只有框内本地主用主控节点可以参与选举,本地备份主控节点只能做数据备份,最终选举出一个全局主用主控节点和N个全局备份主控节点。

集群系统支持单框、背靠背(B2B)和N+M(N表示交换框数目,M表示线卡框数目)多框。集群系统中各主控节点也需要进行选举,最终选举出一个全局主用主控节点、一个全局备份主控节点和N个全局普通主控节点,但目前尚无适用于集群系统的选举方案。



技术实现要素:

本发明的目的在于提供一种节点选举方法及装置,用以简化节点选举流程,提高选举效率。

为实现上述发明目的,本发明提供了如下技术方案:

本发明提供一种节点选举方法,应用于集群系统中的任一主控节点,所述方法包括:

接收邻居主控节点发送的握手交互报文,所述握手交互报文携带所述邻居主控节点感知的本主控节点的邻居状态;

根据所述邻居主控节点感知的本主控节点的邻居状态,更新本地记录的所述邻居主控节点的邻居状态;

根据本地记录的包括本主控节点在内的主控节点的邻居状态,从非初始状态的主控节点中选举全局主用主控节点,所述非初始状态为单向状态或双向状态,其中,本地记录的本主控节点的邻居状态默认为双向状态;从除全局主用主控节点以外的邻居状态为双向状态的主控节点中选举全局备份主控节点。

本发明还提供一种节点选举装置,应用于集群系统中的任一主控节点,所述装置包括:

报文接收单元,用于接收邻居主控节点发送的握手交互报文,所述握手交互报文携带所述邻居主控节点感知的本主控节点的邻居状态;

状态更新单元,用于根据所述邻居主控节点感知的本主控节点的邻居状态,更新本地记录的所述邻居主控节点的邻居状态;

全局主选举单元,用于根据本地记录的包括本主控节点在内的主控节点的邻居状态,从非初始状态的主控节点中选举全局主用主控节点,所述非初始状态为单向状态或双向状态,其中,本地记录的本主控节点的邻居状态默认为双向状态;

全局备选举单元,用于从除全局主用主控节点以外的邻居状态为双向状态的主控节点中选举全局备份主控节点。

由以上描述可以看出,本发明中各主控节点通过交互握手交互报文,实现邻居主控节点的邻居状态的更新,并基于获取的包括本主控节点在内的主控节点的邻居状态,完成全局主用主控节点和全局备份主控节点的选举,该选举过程报文交互简单,涉及的邻居状态较少,易于实现,可有效提高选举效率。

附图说明

图1是本发明实施例示出的一种节点选举方法流程图;

图2是本发明实施例示出的一种集群系统组网示意图;

图3是本发明实施例示出的一种握手交互报文的报文格式;

图4是本发明实施例示出的主控节点的结构示意图;

图5是本发明实施例示出的一种节点选举装置的结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

本发明实施例提出一种节点选举方法,该方法通过在集群系统的主控节点间交互握手交互报文,实现邻居主控节点的邻居状态的更新,并基于获取的包括本主控节点在内的主控节点的邻居状态,完成全局主用主控节点和全局备份主控节点的选举。

参见图1,为本发明节点选举方法的一个实施例流程图,该实施例从主控节点侧对节点选举过程进行描述。

步骤101,接收邻居主控节点发送的握手交互报文。

本发明首先保证各主控节点间物理连接正常,且可正常通信。在此基础上,各主控节点定时发送握手交互报文。

当本主控节点接收到邻居主控节点(本发明将集群系统中本主控节点以外的其它主控节点称为本主控节点的邻居主控节点)发送的握手交互报文时,可从握手交互报文中获取邻居主控节点感知的本主控节点的邻居状态。

下面对本发明涉及的几种邻居状态进行描述:

1)初始状态:表示邻居主控节点未接收到本主控节点发送的握手交互报文;

2)单向状态:表示邻居主控节点已接收到本主控节点发送的握手交互报文,但是邻居主控节点感知本主控节点还未接收到邻居主控节点发送的握手交互报文;

3)双向状态:表示邻居主控节点已接收到本主控节点发送的握手交互报文,同时,邻居主控节点感知本主控节点也接收到了邻居主控节点发送的握手交互报文。

步骤102,根据所述邻居主控节点感知的本主控节点的邻居状态,更新本地记录的所述邻居主控节点的邻居状态。

当邻居主控节点感知的本主控节点的邻居状态为初始状态时,说明邻居主控节点未接收到本主控节点发送的握手交互报文,但是,本主控节点当前接收到了邻居主控节点发送的握手交互报文,因此,更新本地记录的邻居主控节点的邻居状态为单向状态。

当邻居主控节点感知的本主控节点的邻居状态为非初始状态(单向状态或双向状态)时,说明邻居主控节点已接收到本主控节点发送的握手交互报文,同时,由于本主控节点当前接收到邻居主控节点发送的握手交互报文,因此,更新本地记录的邻居主控节点的邻居状态为双向状态。

此外,当本主控节点主动停止向邻居主控节点定时发送握手交互报文时,或者本主控节点与邻居主控节点之间的链路故障,或者在预设时间内未接收到邻居主控节点的握手交互报文时,均可更新邻居主控节点的邻居状态为初始状态,以避免存在上述异常的主控节点参与后续选举。

步骤103,根据本地记录的包括本主控节点在内的主控节点的邻居状态,从非初始状态的主控节点中选举全局主用主控节点,从除全局主用主控节点以外的邻居状态为双向状态的主控节点中选举全局备份主控节点。

需要说明的是,本主控节点默认本地记录的自身邻居状态为双向状态,因此,本主控节点具备参与全局主用主控节点和全局备份主控节点的条件。

此外,本主控节点除了记录本主控节点以及邻近主控节点的邻居状态外,还在本地记录本主控节点的节点信息以及邻居主控节点的节点信息,其中,邻居主控节点的节点信息从邻居主控节点发送的握手交互报文中获取,该节点信息包括节点角色、节点类型、框类型、框内主控节点数目以及节点索引等,以用于全局主用主控节点和全局备份主控节点的选举。

下面分别描述全局主用主控节点和全局备份主控节点的选举过程:

全局主用主控节点选举过程如下:

从本地记录的邻居状态为非初始状态的主控节点中选择两个主控节点参与本地主选举(本主控节点所进行的全局主用主控节点选举),将两个主控节点分别作为第一参选主控节点和第二参选主控节点;比较第一参选主控节点和第二参选主控节点,确定胜出的主控节点,将第一参选主控节点更新为胜出的主控节点;判断本地记录的邻居状态为非初始状态的主控节点中是否存在未参与本地主选举的主控节点,若是,从未参与本地主选举的主控节点中选择一个主控节点,将第二参选主控节点更新为该选中的主控节点,并重新比较第一参选主控节点和第二参选主控节点;若否,将胜出的主控节点的节点角色更新为全局主用主控节点。

其中,比较第一参选主控节点和第二参选主控节点,确定胜出的主控节点的过程,包括:

当第一参选主控节点的节点角色和第二参选主控节点的节点角色均为非全局主用主控节点时,从第一参选主控节点和第二参选主控节点中选择优先级高的主控节点为胜出的主控节点,更新优先级低的主控节点的节点角色为全局普通主控节点。

当第一参选主控节点的节点角色和第二参选主控节点的节点角色均为全局主用主控节点时,从第一参选主控节点和第二参选主控节点中选择被选中作为全局主用主控节点次数多的主控节点为胜出的主控节点,更新选中次数少的主控节点的节点角色为全局普通主控节点。

当第一参选主控节点和第二参选主控节点中只有一个主控节点的节点角色为全局主用主控节点时,将节点角色为全局主用主控节点的主控节点作为胜出的主控节点,更新节点角色为非全局主用主控节点的主控节点的节点角色为全局普通主控节点。

至此,完成全局主用主控节点的选举。从上述描述可以看出,经过全局主用主控节点选举后,集群系统中选举出一个全局主用主控节点,其它邻居状态为非初始状态的主控节点为全局普通主控节点。

全局备份主控节点选举过程如下:

判断集群系统是否存在指定的全局备份主控节点,当存在指定的全局备份主控节点时,直接将指定的主控节点的节点角色更新为全局备份主控节点,结束全局备份主控节点的选举;当不存在指定的全局备份主控节点时,除全局主用主控节点,从本地记录的邻居状态为双向状态的主控节点中选择优先级高的主控节点为胜出的主控节点,将胜出的主控节点的节点角色更新为全局备份主控节点。

至此,完成全局备份主控节点的选举。在经过全局备份主控节点选举后,集群系统中选举出一个全局主用主控节点、一个全局备份主控节点、其它主控节点为全局普通主控节点。

需要补充说明的是,在上述全局主用主控节点和全局备份主控节点的选举过程中,均涉及到选择优先级高的主控节点为胜出的主控节点的步骤,该步骤具体包括:

当主控节点的节点类型不同时,选择节点类型为主用主控节点的主控节点为胜出的主控节点。例如,假设主控节点A的节点类型为备份主控节点,主控节点B的节点类型为主用主控节点,则主控节点B为胜出的主控节点。

当主控节点的节点类型相同、框类型不同时,选择框类型为交换框的主控节点为胜出的主控节点。例如,假设主控节点A和主控节点B的节点类型均为主用主控节点,主控节点A所在框的框类型为线卡框,主控节点B所在框的框类型为交换框,则主控节点B为胜出的主控节点。

当主控节点的节点类型相同、框类型相同、框内主控节点数目不同时,选择框内主控节点数目多的主控节点作为胜出的主控节点。例如,假设主控节点A和主控节点B的节点类型均为主用主控节点、框类型均为交换框,主控节点A所在框有一个主控节点,主控节点B所在框有两个主控节点,则主控节点B为胜出的主控节点。

当主控节点的节点类型相同、框类型相同、框内主控节点数目相同时,选择节点索引小的主控节点作为胜出的主控节点。例如,假设主控节点A和主控节点B的节点类型均为主用主控节点、框类型均为交换框、框内均有两个主控节点,主控节点A的节点索引为1,主控节点B的节点索引为2,则主控节点A为胜出的主控节点。

由以上描述可以看出,本发明通过简单的报文交互,以及较少的邻居状态变化,解决了集群系统的选举问题,该选举过程简单,选举效率高。

现以图2所示集群系统为例,详细介绍节点选举过程。

图2所示集群系统包括5个主控节点,记为N1、N2、N3、N4、N5,各主控节点的节点索引分别为1、2、3、4、5。各主控节点定时发送握手交互报文,分别记为Hello1、Hello2、Hello3、Hello4、Hello5。

参见图3,为握手交互报文格式示例,该握手交互报文中各字段说明如表1所示。

表1

对表1所示报文格式作进一步说明:本发明中握手交互报文至少包括报文头字段、第一TLV字段、第二TLV字段,其中,第一TLV字段用于携带发送该握手交互报文的主控节点的节点信息(包括节点角色、节点类型、框类型、框内主控节点数目等信息);第二TLV字段用于携带发送该握手交互报文的主控节点感知的邻居主控节点的邻居状态。表1中的第三TLV字段可由最终选举出的全局主用主控节点填写,填写的全局主用主控节点的节点索引和全局备份主控节点的节点索引可作为后续功能完善使用,第三TLV字段的应用不是本发明的重点,在此不赘述。

下面描述选举过程:

假设,N1发送Hello1,Hello1的源主控节点索引为1,在发送Hello1之前,N1未接收到N2、N3、N4以及N5的Hello报文,因此,本地记录N2、N3、N4、N5的邻居状态为初始状态,默认自身邻居状态为双向状态,并N2、N3、N4、N5的节点索引和邻居状态携带在发送的Hello1中。参见表2,为N1本地记录的各主控节点的邻居状态。

表2

N2接收到Hello1后,根据Hello1的源主控节点索引确定报文来自N1,再根据自身的节点索引找到Hello1中携带的本主控节点的邻居状态,当获知Hello1中携带的本主控节点的邻居状态为初始状态时,说明N1未接收到本主控节点发送的Hello报文,将本地记录的N1的邻居状态更新为单向状态。参见表3,为N2本地记录的各主控节点的邻居状态。

表3

N2发送Hello2,携带本地记录的N1、N3、N4、N5的邻居状态。

N1接收到Hello2后,获取Hello2中携带的自身的邻居状态为单向状态,说明N2已经接收到本主控节点发送的Hello报文,因此,更新本地记录的N2的邻居状态为双向状态。参见表4,为更新后N1记录的各主控节点的邻居状态。

表4

N1再次发送Hello1时,Hello1中携带本地记录的N2、N3、N4、N5的邻居状态。

N2接收到Hello1后,获取Hello1中携带的自身的邻居状态为双向状态,因此,更新本地记录的N1的邻居状态为双向状态。参见表5,为更新后N2记录的各主控节点的邻居状态。

表5

同理,任意两个主控节点之间的邻居状态更新过程相同,在此不再赘述。

当到达预设的选举时间时,开始全局主用主控节点选举,现以N1为例,介绍选举过程。假设N1当前记录的邻居状态如表6所示。

表6

如前所述,握手交互报文中还携带节点信息,包括节点角色、节点类型、框类型、框内主控节点数目等,因此,主控节点N1可本地记录各主控节点的节点信息,如表7所示。

表7

选举时,N1遍历表7,首先比较N1(节点索引1)和N2(节点索引2),N1和N2的邻居状态均为双向状态,节点角色均为未知主控节点(从来没有参与过选举的新节点),因此,比较优先级,由表7可知,N1和N2的节点类型、框类型、框内主控节点数目均相同,N1的节点索引小于N2的节点索引,因此,N1的优先级高于N2的优先级,N1作为胜出的主控节点继续参与选举,N2的节点角色更新为全局普通主控节点。

比较N1和N3(节点索引3),N3的邻居状态为双向状态,可参与全局主用主控节点选举,且N3的节点角色为全局主用主控节点,因此,选择N3作为胜出的主控节点继续参与选举,将N1的节点角色更新为全局普通主控节点。

比较N3和N4(节点索引4),N4的邻居状态为单向状态,可参与全局主用主控节点选举,N4和N3的节点角色相同,均为全局主用主控节点,此时,比较N4和N3被选中作为全局主用主控节点的次数,N3被选中次数为5次,N4被选中次数为2次,因此,N3作为胜出的主控节点继续参与选举,将N4的节点角色更新为全局普通主控节点。

比较N3和N5(节点索引5),N5的邻居状态为初始状态,不能参与全局主用主控节点选举,更新N5的节点角色为全局普通主控节点。

至此,完成对表7的遍历,最终选择N3为全局主用主控节点,节点角色更新后如表8所示。

表8

继续选举全局备份主控节点:判断是否存在指定的全局备份主控节点,若存在指定的全局备份主控节点,则直接选择被指定的全局备份主控节点;若不存在指定的全局备份主控节点,遍历表8,选举全局备份主控节点。

本实施例假定不存在指定的全局备份主控节点,则遍历表8,比较N1和N2,N1和N2的邻居状态均为双向状态,节点角色均为全局普通主控节点,因此,比较优先级,如前所述,N1的优先级高于N2的优先级,因此,选择N1继续参与选举。

比较N1和N3,N3为全局主用主控节点,因此,N3不再参与全局备份主控节点选举,选择N1继续参与选举。

比较N1和N4,N4的邻居状态为单向状态,不能参与全局备份主控节点选举,选择N1继续参与选举。

比较N1和N5,N5的邻居状态为初始状态,不能参与全局备份主控节点选举,因此,最终选择N1为全局备份主控节点,更新N1的节点角色。更新后N1中记录的各主控节点的节点信息如表9所示。

表9

与前述节点选举方法的实施例相对应,本发明还提供了节点选举装置的实施例。

本发明节点选举装置的实施例可以应用在集群系统中的主控节点上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器运行存储器中对应的计算机程序指令形成的。从硬件层面而言,如图4所示,为本发明节点选举装置所在设备的一种硬件结构图,除了图4所示的处理器以及非易失性存储器之外,实施例中装置所在的设备通常根据该设备的实际功能,还可以包括其他硬件,对此不再赘述。

请参考图5,为本发明一个实施例中的节点选举装置的结构示意图。该节点选举装置包括报文接收单元501、状态更新单元502、全局主选举单元503以及全局备选举单元504,其中:

报文接收单元501,用于接收邻居主控节点发送的握手交互报文,所述握手交互报文携带所述邻居主控节点感知的本主控节点的邻居状态;

状态更新单元502,用于根据所述邻居主控节点感知的本主控节点的邻居状态,更新本地记录的所述邻居主控节点的邻居状态;

全局主选举单元503,用于根据本地记录的包括本主控节点在内的主控节点的邻居状态,从非初始状态的主控节点中选举全局主用主控节点,所述非初始状态为单向状态或双向状态,其中,本地记录的本主控节点的邻居状态默认为双向状态;

全局备选举单元504,用于从除全局主用主控节点以外的邻居状态为双向状态的主控节点中选举全局备份主控节点。

进一步地,

所述状态更新单元502,具体用于当所述邻居主控节点感知的本主控节点的邻居状态为初始状态时,更新所述邻居主控节点的邻居状态为单向状态;当所述邻居主控节点感知的本主控节点的邻居状态为非初始状态时,更新所述邻居主控节点的邻居状态为双向状态;当本主控节点停止向所述邻居主控节点发送握手交互报文时,或者本主控节点与所述邻居主控节点之间的链路故障,或者在预设时间内未接收到所述邻居主控节点的握手交互报文时,更新所述邻居主控节点的邻居状态为初始状态。

进一步地,

所述握手交互报文包括报文头字段、第一TLV字段、第二TLV字段,所述第一TLV字段携带所述邻居主控节点的节点信息,所述第二TLV字段携带所述邻居主控节点感知的本主控节点的邻居状态;其中,所述节点信息包括节点角色,所述装置还包括:

信息记录单元,用于在本地记录本主控节点的节点信息和所述邻居主控节点的节点信息。

进一步地,所述全局主选举单元503,包括:

节点选择模块,用于从本地记录的邻居状态为非初始状态的主控节点中选择两个主控节点参与本地主选举,将所述两个主控节点分别作为第一参选主控节点和第二参选主控节点;

节点比较模块,用于比较第一参选主控节点和第二参选主控节点,确定胜出的主控节点,将第一参选主控节点更新为胜出的主控节点;

节点判断模块,用于判断本地记录的邻居状态为非初始状态的主控节点中是否存在未参与本地主选举的主控节点,若是,从未参与本地主选举的主控节点中选择一个主控节点,将第二参选主控节点更新为该选中的主控节点,并重新比较第一参选主控节点和第二参选主控节点;若否,将胜出的主控节点的节点角色更新为全局主用主控节点。

进一步地,

所述节点比较模块,具体用于当第一参选主控节点的节点角色和第二参选主控节点的节点角色均为非全局主用主控节点时,从第一参选主控节点和第二参选主控节点中选择优先级高的主控节点为胜出的主控节点,更新优先级低的主控节点的节点角色为全局普通主控节点;当第一参选主控节点的节点角色和第二参选主控节点的节点角色均为全局主用主控节点时,从第一参选主控节点和第二参选主控节点中选择被选中作为全局主用主控节点次数多的主控节点为胜出的主控节点,更新选中次数少的主控节点的节点角色为全局普通主控节点;当第一参选主控节点和第二参选主控节点中只有一个主控节点的节点角色为全局主用主控节点时,将节点角色为全局主用主控节点的主控节点作为胜出的主控节点,更新节点角色为非全局主用主控节点的主控节点的节点角色为全局普通主控节点。

进一步地,

所述全局备选举单元504,具体用于当不存在指定的全局备份主控节点时,除全局主用主控节点,从本地记录的邻居状态为双向状态的主控节点中选择优先级高的主控节点为胜出的主控节点,将胜出的主控节点的节点角色更新为全局备份主控节点。

进一步地,

所述节点信息还包括节点类型、框类型、框内主控节点数目以及节点索引;

所述节点比较模块或所述全局备选举单元504选择优先级高的主控节点为胜出的主控节点,具体包括:

当主控节点的节点类型不同时,选择节点类型为主用主控节点的主控节点为胜出的主控节点;当主控节点的节点类型相同、框类型不同时,选择框类型为交换框的主控节点为胜出的主控节点;当主控节点的节点类型相同、框类型相同、框内主控节点数目不同时,选择框内主控节点数目多的主控节点作为胜出的主控节点;当主控节点的节点类型相同、框类型相同、框内主控节点数目相同时,选择节点索引小的主控节点作为胜出的主控节点。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1