基于集群的控制zookeeper服务的系统及方法转让专利

申请号 : CN201310184832.9

文献号 : CN103259863B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 井淑明

申请人 : 汉柏科技有限公司

摘要 :

本发明提供一种基于集群的控制zookeeper服务的方法,包括:在运行n台服务器的集群中,选择其中的m台服务器启动zookeeper服务,m是小于n的奇数;分别记录zookeeper服务所在的服务器,并将记录结果分发到集群中;当集群全部重新启动或m个zookeeper服务所在服务器半数以下宕机时,控制半数以上个zookeeper服务在上次启动了zookeeper服务的服务器上启动,剩余zookeeper服务在任意的没有启动zookeeper的服务器上启动;本发明使得当整个集群重启或者zookeeper服务所在的服务器半数以上宕机时,zookeeper服务的数据不迁移,保持数据的完整性和正确性。

权利要求 :

1.一种基于集群的控制zookeeper服务的方法,其特征在于,包括以下步骤:S1、在运行n台服务器的集群中,选择其中的m台服务器启动zookeeper服务,m是小于n的奇数;

S2、分别记录所述zookeeper服务所在的服务器,并将记录结果分发到所述n台服务器上;

S3、所述n台服务器将接收到的该记录以文件的形式记录在本地;

S4、当所述集群全部重新启动或者所述m个zookeeper服务所在的服务器半数以下宕机时,读取本地记录文件,并控制半数以上个zookeeper服务在上次启动了zookeeper服务的服务器上启动,剩余zookeeper服务在任意的没有启动zookeeper的服务器上启动,并返回执行步骤S2;

所述步骤S4进一步包括:

当所述m个zookeeper服务所在的服务器半数以上宕机时,所述宕机服务器上的zookeeper服务不转移到其他服务器上。

2.一种基于集群的控制zookeeper服务的系统,其特征在于,包括有:zookeeper服务启动模块,用于在运行n台服务器的集群中,选择其中的m台服务器启动zookeeper服务,m是小于n的奇数;

分发模块,用于分别记录所述zookeeper服务所在的服务器,并将记录结果分发到所述n台服务器上;

记录模块,使所述n台服务器将接收到的该记录以文件的形式记录在本地;

控制zookeeper服务模块,用于当所述集群全部重新启动或者所述m个zookeeper服务所在的服务器半数以下宕机时,读取本地记录文件,并控制半数以上个zookeeper服务在上次启动了zookeeper服务的服务器上启动,剩余zookeeper服务在任意的没有启动zookeeper的服务器上启动;

所述控制zookeeper服务模块进一步用于当所述m个zookeeper服务所在的服务器半数以上宕机时,所述宕机服务器上的zookeeper服务不转移到其他服务器上。

说明书 :

基于集群的控制zookeeper服务的系统及方法

技术领域

[0001] 本发明涉及分布式系统集群技术领域,特别涉及一种基于集群的控制zookeeper服务的系统及方法。

背景技术

[0002] 在现有技术中,基于集群的zookeeper服务通常利用下面的控制平台予以启动:
[0003] 1、基础:集群中的每个服务器(node)都启动一个管理服务(以下称为worker),这个服务可以控制本node上服务的启动、关闭及检测;
[0004] 2、leader选举:worker之间通过选举产生一个leader,且当该leader死掉后,可以重新选举;所有node上的worker都只需要与leader建立tcp连接,worker之间不需要建立额外的通信连接;
[0005] 3、服务分发:选举出leader后,leader获取所有node的物理资源、服务资源和物理属性,并根据既定的规则分发zookeeper服务;
[0006] 4、服务启动规则:可以根据实际需要定制zookeeper服务启动规则,例如制定zookeeper服务启动的数量、zookeeper服务启动对物理资源的要求以及zookeeper服务启动对物理属性的要求等等;
[0007] 5、服务启动:leader根据规则选出来启动的node,向该node的worker发送tcp启动zookeeper服务的消息,worker开始启动zookeeper服务,并把启动的结果回馈给leader;
[0008] 6、服务检测:worker启动zookeeper服务成功后会启动zookeeper服务的检测,一旦zookeeper服务死掉,就会通过tcp消息报告给leader,触发leader重新选择node启动zookeeper服务,实现zookeeper服务的转移。
[0009] 上述的控制平台实现了基于集群的zookeeper服务的精确分发、zookeeper服务启动的控制以及zookeeper服务状态的检测,但是现有技术中在上述服务分发、服务启动规则的制定上存在以下缺点:
[0010] 1)当有半数以上的zookeeper服务因为某种原因(例如zookeeper服务所在的服务器宕机)停止工作时,这些停止的zookeeper服务将会自动的转移到其他没有启动zookeeper服务的服务器上去,然而由于Zookeeper的服务数据是存储在zookeeper服务所在服务器的本地的,转移后这些数据将会丢失,即有半数以上的zookeeper数据丢失变为0;而集群中所有的zookeeper服务之间要同步数据,且以半数以上zookeeper服务的相同数据为依据,由于半数以上的zookeeper服务的数据变为0,这样整个集群就会认为数据为
0才是正确的,其他没有迁移的zookeeper服务也会将数据同步为0,导致这个集群数据丢失,引发灾难;
[0011] 2)当整个集群重启时,控制平台也是随机的选择启动zookeeper服务的服务器,不能保证半数以上的zookeeper服务启动在原来有数据的服务器上,导致数据丢失的风险;
[0012] 基于此,现有技术确实有待于改进。

发明内容

[0013] 针对现有技术的不足,本发明提供一种基于集群的控制zookeeper服务的系统及方法,使得当整个集群重启或者zookeeper服务所在的服务器半数以上宕机时,zookeeper服务的数据不迁移,保持数据的完整性和正确性。
[0014] 为实现以上目的,本发明通过以下技术方案予以实现:
[0015] 本发明提供一种基于集群的控制zookeeper服务的方法,包括以下步骤:
[0016] S1、在运行n台服务器的集群中,选择其中的m台服务器启动zookeeper服务,m是小于n的奇数;
[0017] S2、分别记录所述zookeeper服务所在的服务器,并将记录结果分发到所述n台服务器上;
[0018] S3、所述n台服务器将接收到的该记录以文件的形式记录在本地;
[0019] S4、当所述集群全部重新启动或者所述m个zookeeper服务所在的服务器半数以下宕机时,读取本地记录文件,并控制半数以上个zookeeper服务在上次启动了zookeeper服务的服务器上启动,剩余zookeeper服务在任意的没有启动zookeeper的服务器上启动,并返回执行步骤S2。
[0020] 优选的,所述步骤S4进一步包括:
[0021] 当所述m个zookeeper服务所在的服务器半数以上宕机时,所述宕机服务器上的zookeeper服务不转移到其他服务器上。
[0022] 本发明还提供一种基于集群的控制zookeeper服务的系统,包括有:
[0023] zookeeper服务启动模块,用于在运行n台服务器的集群中,选择其中的m台服务器启动zookeeper服务,m是小于n的奇数;
[0024] 分发模块,用于分别记录所述zookeeper服务所在的服务器,并将记录结果分发到所述n台服务器上;
[0025] 记录模块,使所述n台服务器将接收到的该记录以文件的形式记录在本地;
[0026] 控制zookeeper服务模块,用于当所述集群全部重新启动或者所述m个zookeeper服务所在的服务器半数以下宕机时,读取本地记录文件,并控制半数以上个zookeeper服务在上次启动了zookeeper服务的服务器上启动,剩余zookeeper服务在任意的没有启动zookeeper的服务器上启动。
[0027] 优选的,所述控制zookeeper服务模块进一步用于当所述m个zookeeper服务所在的服务器半数以上宕机时,所述宕机服务器上的zookeeper服务不转移到其他服务器上。
[0028] 本发明提供的一种基于集群的控制zookeeper服务的系统及方法,可以实现以下有益效果:
[0029] 1)只要node数量大于m,就可以保证启动的zookeeper服务数量;
[0030] 2)只要启动zookeeper服务的node一次性出现故障的个数少于(m+1)/2,控制平台就可以在其他node上继续启动zookeeper服务,并且同步数据,继续提供相同的容错能力。
[0031] 3)当集群需要全部重启时,依然可以保证(m+1)/2个zookeeper服务的数据是之前的完整数据,继而同步给其他的zookeeper服务,使数据完整正确。

附图说明

[0032] 图1为本发明一实施例的流程图;
[0033] 图2为本发明一实施例的系统框图。

具体实施方式

[0034] 下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
[0035] 本发明提供的一种基于集群的控制zookeeper服务的方法,其基于背景技术中的控制平台使用,如图1所示,包括以下步骤:
[0036] S1、在运行n台服务器的集群中,选择其中的m台服务器启动zookeeper服务,m是小于n的奇数;
[0037] S2、分别记录所述zookeeper服务所在的服务器,并将记录结果分发到所述n台服务器上;
[0038] S3、所述n台服务器将接收到的该记录以文件的形式记录在本地;
[0039] 控制平台的leader控制每一个zookeeper服务启动成功后,会通知所有的服务器(包括leader自己),所有的服务器将zookeeper服务启动在哪m台服务器上以文件的形式记录在本地;
[0040] S4、当所述集群全部重新启动或者所述m个zookeeper服务所在的服务器半数以下宕机时,控制平台的leader读取本地记录文件中zookeeper服务上次启动的记录,控制半数以上个zookeeper服务在上次启动了zookeeper服务的服务器上启动,即:(m+1)/2个;剩余m-(m+1)/2个zookeeper服务在任意的没有启动zookeeper的服务器上启动,并返回执行步骤S2。
[0041] 其中,若集群是第一次部署好,则可以按照所述控制平台随机的选择m台服务器启动m个zookeeper服务。
[0042] 优选的,所述步骤S4进一步包括:
[0043] 当所述m个zookeeper服务所在的服务器半数以上宕机时,防止数据丢失,leader不启动zookeeper服务,直到宕机的服务器加回到集群中,半数以上的zookeeper服务在上次启动了zookeeper的服务器上启动,所述宕机服务器上的zookeeper服务不转移到其他服务器上。
[0044] 如图2所示,本发明还提供一种基于集群的控制zookeeper服务的系统,包括有:
[0045] zookeeper服务启动模块,用于在运行n台服务器的集群中,选择其中的m台服务器启动zookeeper服务,m是小于n的奇数;
[0046] 分发模块,用于分别记录所述zookeeper服务所在的服务器,并将记录结果分发到所述n台服务器上;
[0047] 记录模块,使所述n台服务器将接收到的该记录以文件的形式记录在本地;
[0048] 控制zookeeper服务模块,用于当所述集群全部重新启动或者所述m个zookeeper服务所在的服务器半数以下宕机时,读取本地记录文件,并控制半数以上个zookeeper服务在上次启动了zookeeper服务的服务器上启动,剩余zookeeper服务在任意的没有启动zookeeper的服务器上启动。
[0049] 优选的,所述控制zookeeper服务模块进一步用于当所述m个zookeeper服务所在的服务器半数以上宕机时,所述宕机服务器上的zookeeper服务不转移到其他服务器上。
[0050] 本发明提供的一种基于集群的控制zookeeper服务的系统及方法,可以实现以下有益效果:
[0051] 1)只要node数量大于m,就可以保证启动的zookeeper服务数量;
[0052] 2)只要启动zookeeper服务的node一次性出现故障的个数少于(m+1)/2,控制平台就可以在其他node上继续启动zookeeper服务,并且同步数据,继续提供相同的容错能力。
[0053] 3)当集群需要全部重启时,依然可以保证(m+1)/2个zookeeper服务的数据是之前的完整数据,继而同步给其他的zookeeper服务,使数据完整正确。
[0054] 以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。