一种集群中主控节点自适应选举算法的制作方法

文档序号:7612650阅读:194来源:国知局
专利名称:一种集群中主控节点自适应选举算法的制作方法
技术领域
本发明属于计算机集群技术领域,具体涉及一种集群中选取主控节点的算法,并保证主控节点的高可用性。
背景技术
在集群中,一般选择一个节点来作为主控节点(需要做出说明的是,主控节点是一个集群内的特殊功能实体,控制集群内的所有节点),目前来看,一般采用的办法是通过配置文件来指定某个节点作为主控节点,当主控节点故障的时候,再根据每个节点在配置文件中定义的权值的大小来选择新的节点作为主控的节点。从目前的集群的这种方式来看,需要人为的干预对集群的各个节点作为主控节点的顺序进行定义。
在专利《基于多TCP连接映像的高可用系统》(公开号1423197)中的选举子模块(该专利的说明书的7/13页),描述了如何选举一个主服务器的办法系统初启时此子模块通过配置文件决定谁是主服务器。具体方法如下服务器初启,读配置文件,发现自己被配置为主服务器,这时候不是立即把自己推举为主服务器,而是监听心跳信息的接收端口一段时间(至少要大于心跳信息的间隔时间,这样才能保证收到已启动的服务器的心跳信息),根据接收到的心跳信息判断系统中是否已经存在一个主服务器,如果存在,则不推举自己为主服务器,以避免冲突;如果不存在,才将自己推举为主服务器。这样处理避免了对开机先后次序的约束。
在以后的过程中,此子模块还每隔一段时间(可以设置)就检查当前系统中服务器的状态;当发现主服务器失效时,则重新从处于激活的备份服务器中选举出一个新的主服务器;当发现某个备份服务器失效时,则将该服务器从记录服务器的链表中删除。选举机制根据各个服务器的id号来判断谁来担当主服务器,其基本思想就是看谁的id号最小。其中,id号在每个服务器的配置文件中给出。当系统初启后一段时间,每个服务器的状态信息(hostlist_head)都建立起来了,其中保存这每个服务器的id号,而且hostlist_head在每个服务器上都是相同的。当某个服务器失效时,其他服务器将从各自的hostlist_head中删除此失效服务器,因此,对每个仍然处于激活状态的服务器来说都有一个由所有处于激活状态服务器的id号组成了集合,那么在这个相同的集合中找一个最小id,其结果必然相同,这就保证了选举的一致性。选举结果出来后,每个服务器将这个结果与自己的id号相比较,如果与自己的id号相同,则启动IP抢占线程,将系统对外的虚拟IP地址抢过来绑定在自己的外部网卡上,同时也要把内部局域网的网关地址抢过来绑定在自己的内部网卡上。
通过以上的内容,我们发现该模块选举主服务器的方法需要通过配置文件来干预,在主服务器故障之后,也是通过配置文件指定的各个备份服务器的id的值来选出新的主服务器。显然,这个方法有如下几个问题1.需要人为的干预,也就是说需要人来指定主控节点。
2.需要配置文件。

发明内容
本发明针对目前的需要通过配置文件指定主控节点不具有灵活性的方法,提出了一种集群中主控节点自适应选举算法,使得集群内部完全自主产生主控节点,具有独立性,不需要通过配置文件来确定主控节点,避免了人为的干预,保证集群中任何时候都有一个主控节点,在主控节点故障的时候,可以自动重新进行随机的选择一个节点作为主控节点。
本发明的技术方案是一种集群中主控节点自适应选举算法,其特征在于每个节点均有猜拳模块和心跳检测模块,初始态各节点猜拳模块启动首先每个节点随机产生一个整数作为猜拳值,然后将这个猜拳值向集群内进行公布,每个节点将会收到其他节点猜拳值,并与自己的猜拳值进行比较;比较规则是,如果自己的猜拳值比其他的节点的猜拳值小,则自己退出猜拳,如果比所有的其他节点的猜拳值大,则向集群公布自己为主控节点,如果有其他节点的猜拳值与自己的相同,则重新进行新一轮的猜拳,直到选出主控节点为止;在集群进入具有主控节点的稳态之后,心跳检测模块启动,集群中的非主控节点定时向主控节点发送探测包,主控节点在接收到此探测包后返回回应包,如果非主控节点在某段时间内(可以设置)接收不到主控节点的回应包则表明主控节点宕机,在新的集群中重新启动猜拳模块来选出新的主控节点。
如上所述的集群中主控节点自适应选举算法,其特征在于猜拳模块采用TCP/IP中的UDP(用户报文协议)组播技术将猜拳值向集群内进行公布。
本发明的原理是采用已有的心跳检测技术与本发明特有的猜拳算法在集群中产生主控节点。
猜拳算法主要是在一个集群中选出一个节点作为主控节点,在集群进入具有主控节点的稳态之后,心跳检测模块开始启动,定时检测主控节点的存活状态,如果发现主控节点故障,集群内的其他节点开始再次启动猜拳模块,重新选择出新的主控节点。主要方法是集群中的节点启动,判断自己是否是主控节点,如果是,则无需进行猜拳,否则便向集群内询问是否存在主控节点,如果收到集群内的主控节点回应消息则主控节点存在,也不需要进行猜拳,否则表明集群中不存在主控节点,则各个节点进行猜拳,首先每个节点随机产生一个整数作为猜拳值,然后将这个猜拳值向集群内进行公布(采用UDP的组播技术),每个节点将会收到其他节点猜拳值,并与自己的猜拳值进行比较,在这里我们采用了如下的规则,如果自己的猜拳值比其他的节点的猜拳值小,则自己推出猜拳,如果比所有的其他节点的猜拳值大,则向集群公布自己为主控节点,如果有其他节点的猜拳值与自己的相同,则重新进行新一轮的猜拳,直到选出主控节点为止。
心跳检测技术主要是在集群中检测主控节点是否存活,他在猜拳模块选出主控节点之后启动,通过周期性的发送/回应探测包来检测主控节点是否存活,如果发现主控节点宕机,将会启动猜拳算法,重新在集群中选出新的主控节点。主要方法是集群中的非主控节点的节点定时向主控节点发送探测包,主控节点在接收到此探测包后返回回应包,如果非主控节点在某段时间内(可以设置)接收不到主控节点的回应包则表明主控节点宕机,在新的集群中重新启动猜拳算法来选出新的主控节点。
本发明所述的算法,具有以下优点1.能够自动随机的选出集群中的主控节点,而不是需要通过配置文件指定。
2.主控节点宕机之后,集群中其他节点可以检测到并自动重新选出新的主控节点;3.此算法使得集群具有伸缩性,集群中加入或者减少节点,集群可以做到自动适应。


图1为猜拳模块的工作流程2为集群竞选主控节点的示意3为拥有主控节点的集群心跳检测示意图具体的实施方式图1描述了猜拳模块的工作流程。
步骤10,模块开始初始化。
步骤11,看自己是否是主控节点,默认的初始状态是非主控节点。如果是主控节点,则跳转到步骤12;否则,跳转到步骤14。
步骤12,如果自身是主控节点,判断是否能够接收到集群内其他非主控节点发来的询问是否存在主控节点的消息。如果收到集群内其他非主控节点的询问主控节点的消息后,则转到步骤13;否则跳转到12。
步骤13,收到询问消息之后,主控节点向询问者回复我是主控节点的消息。
步骤14,如果自身是非主控节点,则向集群内的所有成员询问是否存在主控节点,这里采用了UDP的多播特性,我们规定一个多播地址为集群的邮箱,节点发往该邮箱的消息将会被集群内的所有成员收到。
步骤15,本节点是否能够收到主控节点的回复消息,这里也采用了UDP的点对点的特性,每个节点是从我们规定为邮箱的多播地址上收取消息,如果集群中存在主控节点,我们规定,主控节点在收到如此的消息之后需要点到点的向询问着发送我是的主控节点的回复消息。如果本节点收到主控节点的回复消息,则跳转到步骤16;否则跳转到步骤17。
步骤16,本节点接收到主控节点的回复消息之后,接收主控节点的控制。
步骤17,接收不到主控节点的回复消息之后,节点将会进入猜拳流程,随机产生一个整数,作为猜拳用的拳值,向集群内进行公布。
步骤18,是否能够接收到集群内其他节点猜拳的拳值,如果接收到了,则跳转到步骤110,否则,则跳转到步骤19。
步骤19,如果没有收到集群内其他节点的消息,则本节点成为主控节点。
步骤110,主控节点定时向集群内的其他节点发送我是主控节点的消息,主要是向集群内的其他节点报告自己的存活状态。
步骤111,如果接收到集群内其他节点的猜拳的拳值,则与本节点的参与猜拳的拳值进行比较。
步骤112,如果本节点的拳值比接收到的拳值要小,则跳转到步骤112;否则,跳转到步骤17。
步骤113,因为本节点的拳值比接收到的其他节点的拳值要小,则本节点退出集群中主控节点的竞选。
步骤114,第一次接收到主控节点的组播消息,表明集群已经存在或者已产生主控节点。
步骤115,启动对主控节点存活状态监测的定时器,我们可以规定某段时间内,如果接收不到主控节点的消息,则表明主控节点死亡。
步骤116,对接收的消息的消息类型进行判断。
步骤117,如果接收到超持消息,则表明主控节点死亡,新的集群没有主控节点,需要再次通过猜拳的方式进行主控节点的竞选,于是跳转到步骤17。
步骤118,接收到主控节点的消息,表明主控节点是存活的状态,则取消上一次的定时器,并跳转到步骤115。
图2描述了一个实际例子的主控节点竞选示意图。
图中有4个节点,都是非主控节点,此图描述了本模块在竞选中的消息接收与发送的方向。需要做出说明的是,这里的邮箱是一个多播的IP地址,各个节点通过向这个IP地址发送、接收消息来达到消息的交互。
图3描述了一个实际例子的检测主控节点的示意图。
这里,节点1成为了主控节点,他周期性了向邮箱发送心跳消息,其他非主控节点则通过邮箱接收此心跳消息,如果在规定的时间内接收不到主控节点的心跳消息,则进入新的主控节点的竞选流程。
虽然通过实施例子描述了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发明的精神。
权利要求
1.一种集群中主控节点自适应选举算法,其特征在于每个节点均有猜拳模块和心跳检测模块,初始态各节点猜拳模块启动首先每个节点随机产生一个整数作为猜拳值,然后将这个猜拳值向集群内进行公布,每个节点将会收到其他节点猜拳值,并与自己的猜拳值进行比较;比较规则是,如果自己的猜拳值比其他的节点的猜拳值小,则自己退出猜拳,如果比所有的其他节点的猜拳值大,则向集群公布自己为主控节点,如果有其他节点的猜拳值与自己的相同,则重新进行新一轮的猜拳,直到选出主控节点为止;在集群进入具有主控节点的稳态之后,心跳检测模块启动,集群中的非主控节点定时向主控节点发送探测包,主控节点在接收到此探测包后返回回应包,如果非主控节点在某段时间内接收不到主控节点的回应包则表明主控节点宕机,在新的集群中重新启动猜拳模块来选出新的主控节点。
2.如上所述的集群中主控节点自适应选举算法,其特征在于猜拳模块采用TCP/IP中的UDP组播技术将猜拳值向集群内进行公布。
全文摘要
一种集群中主控节点自适应选举算法,运用猜拳模块和心跳检测模块,基于随机产生的整数猜拳值唯一选出一个主控节点,在主控节点因为某些原因而脱离集群时,新的集群可以自动选举出新的主控节点。本发明应用于电信系统中高可靠性的集群中,使得集群内部完全自主产生主控节点,具有独立性,不需要通过配置文件来确定主控节点,避免了人为的干预。
文档编号H04L29/06GK1645862SQ20051001823
公开日2005年7月27日 申请日期2005年2月1日 优先权日2005年2月1日
发明者陈勇, 涂小明, 叶磊 申请人:北京北方烽火科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1