发明内容
本发明的目的在于提供一种基于节点特征推举主节点的方法,通过设定权重的方式,根据节点的特征来判断节点的稳定性和重要性,推举出更合适的主节点。
本发明通过下述技术方案实现:一种基于节点特征推举主节点的方法,新加入集群的节点广播“更新节点”的报文A,使集群中其他节点更新自身的节点列表;集群中的节点广播“查找主节点”的报文B和“设置主节点”的报文C推举设置本节点的主节点。
进一步地,为了更好的实现本发明,具体包括以下步骤:
步骤F1:新加入集群的节点随机生成ID,并维护一份本节点的节点列表;
步骤F2:新加入集群的节点在集群中广播“更新节点”的报文A,并将该新节点的ID放置在报文A中;
步骤F3:集群中的节点收到报文A时,检查自身的节点列表的信息;
步骤F4:更新集群中所有节点所维护的节点列表;
步骤F5:集群中某个从节点的节点列表中若不存在主节点或主节点不存活时,该从节点向集群中广播“查找主节点”的报文B,并收集其他节点的节点列表;若存在存活的主节点时,则不进行广播;
步骤F6:该从节点将收集到的节点列表合并,并选出其中的主节点设置为自身的主节点,然后广播“设置主节点”的报文C;
步骤F7:集群中的节点接收到报文C后,将报文C中的主节点设置为自身的主节点。
进一步地,为了更好的实现本发明,所述步骤F3具体包括以下步骤:
步骤F31:集群中的节点收到报文A时,检查自身的节点列表中是否已存在发送报文A的节点的ID;
步骤F32:若存在,则不做任何更新或更改;若不存在,则在自身的节点列表中接入发送报文A的节点的ID;
步骤F33:该节点将发送报文A的节点的权重值设置为零;
步骤F34:该节点再将自身的ID传送给发送报文A的节点。
进一步地,为了更好的实现本发明,所述步骤F5具体包括以下步骤:
步骤F51:集群中某个从节点通过检查自身的节点列表,查找是否存在角色为主节点的节点;
步骤F52:若存在主节点,但该主节点不存活时,从节点将该不存活的主节点的权重值提高,并清除该主节点的角色,从节点向集群中广播报文B;
若不存在主节点时,从节点向集群中广播报文B;
若存在存活的主节点,则结束工作。
进一步地,为了更好的实现本发明,所述步骤F6具体包括以下步骤:
步骤F61:集群中的节点接收到报文B后,首先检查自身的节点列表中是否存在存活的主节点;
步骤F62:若存在存活的主节点,则该节点将自身的节点列表传送给广播报文B的从节点;若存在不存活的主节点,则在自身的节点列表中将该主节点的角色清除,并将自身的节点列表传送给广播报文B的从节点;若不存在主节点,则将自身的节点列表传送给广播报文B的从节点;
步骤F63:广播报文B的从节点接收到其他节点传送的节点列表后,将自身的节点列表和其他节点的节点列表合并,合并后将节点列表中的节点的权重值相加、角色合并;
步骤F64:若合并后的节点列表中不存在角色为主节点的节点,则在权重值较低的节点中随机选出一个节点作为该从节点的主节点;若合并后的节点列表中仅存在一个角色为主节点的节点,则选取该节点作为该从节点的主节点;若合并后的节点列表中存在多个角色为主节点的节点,则在这些主节点中随机选出一个权重值较低的节点作为该从节点的主节点;
步骤F65:该从节点设置好主节点后,向集群中广播报文C。
进一步地,为了更好的实现本发明,所述步骤F7具体包括以下步骤:
步骤F71:集群中的节点接收到报文C时,清空自身节点列表中主节点的角色;
步骤F72:在自身的节点列表中,将步骤F64中的选出的主节点设置为本节点的主节点。
进一步地,为了更好的实现本发明,集群中任意节点通过自身的节点列表来判断自己是否是主节点。
进一步地,为了更好的实现本发明,任意节点的所述节点列表包括自身节点和集群中其他节点的ID、权重值以及角色。
进一步地,为了更好的实现本发明,所述权重值用于评估节点的可靠性,权重值越高,则该节点越不可靠。
进一步地,为了更好的实现本发明,所述角色用于描述该节点在集群中的角色,主节点的角色值为“主节点”,从节点的角色值为“空”。
工作原理:
本发明与现有技术相比,具有以下优点及有益效果:
(1)本发明通过节点列表信息的强制更新,可以让集群快速进入统一的状态;
(2)本发明通过节点间的信息交换,可以确保集群中节点间的信息共享,增强集群内节点的统一性和工作稳定性;
(3)本发明通过设置节点的权重值,可以记录节点的可靠性,为判断节点的稳定性提供依据。
具体实施方式
下面结合实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。
实施例1:
本发明通过下述技术方案实现,如图1-图2-图2所示,一种基于节点特征推举主节点的方法,新加入集群的节点广播“更新节点”的报文A,使集群中其他节点更新自身的节点列表;集群中的节点广播“查找主节点”的报文B和“设置主节点”的报文C推举设置本节点的主节点。
需要说明的是,通过上述改进,本发明提出一种基于节点特征推举主节点的方法,通过设定节点权重值的方式,根据节点的特征来判断该节点的稳定性和重要性,推举出更合适的主节点。相比于传统的推举主节点的方法,本发明减少了推举主节点的随机性,可以推举出更合理的主节点,提高整合集群的利用效率以及稳定性。
集群中每个节点维护了一份节点列表,所述节点列表中包含自身节点和集群中其他节点的ID、权重值以及角色等信息。集群中的节点的状态可能为存活或不存活,当节点A往节点B发送icmp包或其他协议的报文时,若在一段时间内节点B没有回应节点A,则认为节点B不存活;若节点B在一段时间内回应了节点A,则认为节点B存活。
节点列表中的权重值用于评估该节点的可靠性,权重值越高,则该节点越不可靠,所以在推举主节点时,要尽量选择权重值低的节点。
节点列表中的角色用于描述该节点在集群中的角色,主节点的角色值为“主节点”,从节点的角色值为“空”。
新加入集群的节点向集群中其他节点发送“更新节点”的报文A,集群中存活的节点会收到这个报文A,并强制自身更新节点列表。当集群中某个节点通过检查自身的节点列表发现节点列表中不存在角色为主节点的角色,或检查到主节点的状态为不存活时,则在集群中广播“查找主节点”的报文B,同时收集其他节点的节点列表,并将其他节点的节点列表和自身的节点列表进行合并,随机选择出权重值较低的节点作为本节点的主节点,并向集群中广播“设置主节点”的报文C。
集群中存活的节点会接收到“设置主节点”的报文C,这些节点收到报文C后将自身节点列表中主节点的角色清除,并将发送报文C的节点的主节点作为本节点的主节点。所述报文C中除了发送报文C的节点的信息,还包括该节点的主节点的信息,所以当某节点收到报文C时,无条件的通过报文C中的信息提取主节点作为自身的主节点。
本实施例的其他部分与上述实施例相同,故不再赘述。
实施例2:
本实施例在上述实施例的基础上做进一步优化,如图1-图2所示,具体包括以下步骤:
步骤F1:新加入集群的节点随机生成ID,并维护一份本节点的节点列表;
步骤F2:新加入集群的节点在集群中广播“更新节点”的报文A,并将该新节点的ID放置在报文A中;
步骤F3:集群中的节点收到报文A时,检查自身的节点列表的信息;
步骤F4:更新集群中所有节点所维护的节点列表;
步骤F5:集群中某个从节点的节点列表中若不存在主节点或主节点不存活时,该从节点向集群中广播“查找主节点”的报文B,并收集其他节点的节点列表;若存在存活的主节点时,则不进行广播;
步骤F6:该从节点将收集到的节点列表合并,并选出其中的主节点设置为自身的主节点,然后广播“设置主节点”的报文C;
步骤F7:集群中的节点接收到报文C后,将报文C中的主节点设置为自身的主节点。
需要说明的是,通过上述改进,有新节点加入集群时,该节点向集群中的原节点发送“更新节点”的报文A,此时集群中存活的节点都会收到报文A,所述报文A中包含新节点的ID、权重值以及角色等信息。集群中任意一个节点自身的节点列表不仅包含自身节点的ID、权重值以及角色等信息,还包括集群中其他节点的信息,所以当有新节点加入时,新节点发送报文A以强制集群中存活的节点更新自身的节点列表信息,保证集群中所有的节点更新节点列表信息。
集群中的节点通过自身的节点列表检查是否存在主节点,或检查自身是否为主节点。若集群中某节点不存在主节点,则该节点向集群中的其他节点发送“查找主节点”的报文B,并接收其他节点返回的节点列表。该节点将其他节点的节点列表和自身的节点列表合并,合并后将节点列表中角色为主节点的节点设置为自身的主节点,并向集群中其他节点发送“设置主节点”的报文C。
集群中接收到报文C的节点时,清空自身主节点的角色,根据报文C中的主节点的信息,将报文C中的主节点设置为本节点的主节点。
本实施例的其他部分与上述实施例相同,故不再赘述。
实施例3:
本实施例在上述实施例的基础上做进一步优化,如图1-图2所示,步骤F1:新加入集群的节点随机生成ID,并维护一份本节点的节点列表;
步骤F2:新加入集群的节点在集群中广播“更新节点”的报文A,并将该新节点的ID放置在报文A中;
所述步骤F3具体包括以下步骤:
步骤F31:集群中的节点收到报文A时,检查自身的节点列表中是否已存在发送报文A的节点的ID;
步骤F32:若存在,则不做任何更新或更改;若不存在,则在自身的节点列表中接入发送报文A的节点的ID;
步骤F33:该节点将发送报文A的节点的权重值设置为零;
步骤F34:该节点再将自身的ID传送给发送报文A的节点;
步骤F4:更新集群中所有节点所维护的节点列表;
需要说明的是,通过上述改进,新加入的节点向集群中广播“更新节点”的报文A,集群中存活的节点会收到报文A,通过报文A中的信息检查自身的节点列表中是否存在该新节点的ID。若存在则不做任何更新或更改;若不存在,则在自身的节点列表中添加该新节点的ID,并将该新节点的权重值设置为零,再将自身的ID返回给该新节点。
通过节点列表信息的强制更新和节点间的信息交换,可以确保集群中节点间的信息共享,增强集群内节点的统一性。
本实施例的其他部分与上述实施例相同,故不再赘述。
实施例4:
本实施例在上述实施例的基础上做进一步优化,如图1-图2所示,所述步骤F5具体包括以下步骤:
步骤F51:集群中某个从节点通过检查自身的节点列表,查找是否存在角色为主节点的节点;
步骤F52:若存在主节点,但该主节点不存活时,从节点将该不存活的主节点的权重值提高,并清除该主节点的角色,从节点向集群中广播报文B;
若不存在主节点时,从节点向集群中广播报文B;
若存在存活的主节点,则结束工作。
需要说明的是,通过上述改进,集群中的某个节点通过自身的节点列表检查自己是否为主节点,若不是主节点则该节点为集群中的从节点,然后检查自身节点列表中是否存在角色为主节点的节点。若节点列表中存在主节点但该主节点不存活时,该从节点将这个不存活的主节点的权重值提高,并清除该主节点的角色,使其角色为“空”。然后该从节点向集群中广播“查找主节点”的报文B。若该从节点的自身节点列表中不存在角色为主节点的节点,也向集群中广播报文B。若该从节点的自身列表中存在存活的主节点,则不广播任何报文。
本实施例的其他部分与上述实施例相同,故不再赘述。
实施例5:
本实施例在上述实施例的基础上做进一步优化,如图1-图2所示,所述步骤F6具体包括以下步骤:
步骤F61:集群中的节点接收到报文B后,首先检查自身的节点列表中是否存在存活的主节点;
步骤F62:若存在存活的主节点,则该节点将自身的节点列表传送给广播报文B的从节点;若存在不存活的主节点,则在自身的节点列表中将该主节点的角色清除,并将自身的节点列表传送给广播报文B的从节点;若不存在主节点,则将自身的节点列表传送给广播报文B的从节点;
步骤F63:广播报文B的从节点接收到其他节点传送的节点列表后,将自身的节点列表和其他节点的节点列表合并,合并后将节点列表中的节点的权重值相加、角色合并;
步骤F64:若合并后的节点列表中不存在角色为主节点的节点,则在权重值较低的节点中随机选出一个节点作为该从节点的主节点;若合并后的节点列表中仅存在一个角色为主节点的节点,则选取该节点作为该从节点的主节点;若合并后的节点列表中存在多个角色为主节点的节点,则在这些主节点中随机选出一个权重值较低的节点作为该从节点的主节点;
步骤F65:该从节点设置好主节点后,向集群中广播报文C。
需要说明的是,通过上述改进,集群中存活的节点会收到报文B,接收到报文B后首先检查自身的节点列表中是否存在主节点,再检查主节点是否存活。若存活则将自身的节点列表传送给广播报文B的从节点;若不存活则将自身的主节点的角色清除,再将节点列表传送给广播报文B的从节点;若不存在主节点,则直接将自身的节点列表传送给广播报文B的从节点。
发送报文B的从节点接收其他节点传送的节点列表,并将自身的节点列表和其他节点的节点列表合并,合并后将节点列表中节点的权重值相加、角色合并。
若合并后的节点列表中不存在角色为主节点的节点,则在权重值较低的节点中随机选出一个节点设置为该从节点的主节点;若合并后的节点列表中仅存在一个角色为主节点的节点,则将该节点设置为该从节点的主节点;若合并后的节点列表中存在多个角色为主节点的节点,则在这些主节点中随机选出一个权重值较低的节点作为该从节点的主节点。该从节点设置好自身的主节点后,向集群中广播“设置主节点”的报文C,所述报文C中除了有该从节点的ID、权重值、角色外,还包括其主节点的ID、权重值、角色等信息。
本实施例的其他部分与上述实施例相同,故不再赘述。
实施例6:
本实施例在上述实施例的基础上做进一步优化,如图1-图2所示,所述步骤F7具体包括以下步骤:
步骤F71:集群中的节点接收到报文C时,清空自身节点列表中主节点的角色;
步骤F72:在自身的节点列表中,将步骤F64中的选出的主节点设置为本节点的主节点。
需要说明的是,通过上述改进,集群中存活的节点会接收到报文C,接收后首先检查自身的节点列表中是否存在角色为主节点的节点,若存在则无条件清空该主节点的角色,并根据报文C中的信息,将报文C中推举出来的主节点设置为自身的主节点;若该节点不存在主节点,则直接将报文C中推举出来的主节点设置为自身的主节点。
当集群中没有新增的节点和所有的节点都有自身存活的主节点时,则集群处于稳定的工作状态。
本实施例的其他部分与上述实施例相同,故不再赘述。
以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。