CN103595781B - 一种基于zookeeper的服务提供方法、第一服务器及系统 - Google Patents
一种基于zookeeper的服务提供方法、第一服务器及系统 Download PDFInfo
- Publication number
- CN103595781B CN103595781B CN201310556776.7A CN201310556776A CN103595781B CN 103595781 B CN103595781 B CN 103595781B CN 201310556776 A CN201310556776 A CN 201310556776A CN 103595781 B CN103595781 B CN 103595781B
- Authority
- CN
- China
- Prior art keywords
- zookeeper
- server
- dynamic
- process corresponding
- client
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 310
- 230000008569 process Effects 0.000 claims abstract description 275
- 238000007667 floating Methods 0.000 claims abstract description 72
- 230000003068 static effect Effects 0.000 claims description 44
- 230000005856 abnormality Effects 0.000 claims description 15
- 230000002159 abnormal effect Effects 0.000 claims 1
- 230000006854 communication Effects 0.000 abstract description 12
- 238000004891 communication Methods 0.000 abstract description 11
- 230000005059 dormancy Effects 0.000 description 9
- 230000008447 perception Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 239000000203 mixture Substances 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
Landscapes
- Telephonic Communication Services (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明实施例公开了一种基于zookeeper的服务提供方法、第一服务器及系统,涉及通信领域,提高了zookeeper集群的可靠性。具体方案为:第一服务器启动第一动态zookeeper对应的进程;确定第二服务器的第二动态zookeeper对应的进程满足预定条件;为第一动态zookeeper对应的进程配置浮动网络地址,以便第一服务器的第一动态zookeeper对应的进程为客户端提供服务;其中,第一动态zookeeper预先配置在第一服务器上,第二动态zookeeper预先配置在第二服务器上;第一动态zookeeper对应的进程的数据与第二动态zookeeper对应的进程的数据均存储在共享存储介质中。本发明用于提高zookeeper集群可靠性的过程中。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于zookeeper的服务提供方法、第一服务器及系统。
背景技术
分布式系统是建立在网络之上的软件系统,近年来分布式系统在互联网中的应用越来越广泛,众所周知,分布式系统的中各个服务器是依赖互联网相互通信的,因此在通信过程中会存在如单点故障、故障恢复、扩张性等问题。
zookeeper是一个针对分布式系统的可靠协调软件,其可用于各个服务器之间共享数据,为了确保写入分布式系统的数据的高可靠性,在分布式系统中,一般需要部署一个zookeeper集群,且该zookeeper集群最好包含奇数个zookeeper节点(至少需要包含三个zookeeper节点)。也就是说,当分布式系统中有奇数台服务器时,可以在每台服务器上分别部署一个zookeeper节点,从而保障zookeeper集群的高可靠性和可用性,当分布式系统中有偶数台(假设有N台)服务器时,在现有技术中,可以在N台服务器的其中N-1台服务器上部署zookeeper节点,或者也可以在N台服务器的其中某台服务器上部署偶数个zookeeper节点,以保证zookeeper集群中有奇数个zookeeper节点,从而保障zookeeper集群的正常运行。
现有技术中至少存在如下问题:当分布式系统中有偶数台(假设有N台)服务器时,无论是在N台服务器的其中N-1台服务器上部署zookeeper节点,或者是在N台服务器的其中某台服务器上部署偶数个zookeeper节点,zookeeper集群的可靠性都会降低。
发明内容
本发明的实施例提供一种基于zookeeper的服务提供方法、第一服务器及系统,提高了zookeeper集群的可靠性。
为达到上述目的,本发明的实施例采用如下技术方案:
本发明的第一方面,提供一种基于zookeeper的服务提供方法,包括:
第一服务器启动第一动态zookeeper对应的进程;
所述第一服务器确定第二服务器的第二动态zookeeper对应的进程满足预定条件;其中,所述预定条件为所述第二服务器的所述第二动态zookeeper对应的进程不能为客户端提供正常服务;
所述第一服务器为所述第一动态zookeeper对应的进程配置浮动网络地址,以便所述第一服务器的所述第一动态zookeeper对应的进程为所述客户端提供服务;
其中,所述第一动态zookeeper预先配置在所述第一服务器上,所述第二动态zookeeper预先配置在所述第二服务器上;所述第一动态zookeeper对应的进程的数据与所述第二动态zookeeper对应的进程的数据均存储在共享存储介质中。
结合第一方面,在一种可能的实现方式中,在所述第一服务器启动第一动态zookeeper对应的进程之后,还包括:
所述第一服务器针对所述共享存储介质进行读取操作;
当针对所述共享存储介质的读取操作成功时,则执行所述确定第二服务器的第二动态zookeeper对应的进程满足预定条件。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,在所述第一服务器确定第二服务器的第二动态zookeeper对应的进程满足预定条件之前,还包括:
所述第一服务器释放为所述第一动态zookeeper对应的进程配置的所述浮动网络地址。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,在所述第一服务器启动第一动态zookeeper对应的进程之后,还包括:
所述第一服务器周期性的向所述共享存储介质中的计数器文件写入写计数;其中,所述计数器文件与所述第一动态zookeeper对应的进程相对应,所述第一服务器周期性的向所述共享存储介质中写入的所述写计数中,后一次写入的所述写计数大于前一次写入的所述写计数。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,
所述第一服务器确定第二服务器的第二动态zookeeper对应的进程满足预定条件,包括:
所述第一服务器确定所述第二服务器的所述第二动态zookeeper对应的进程处于激活状态,且确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件;
在所述第一服务器确定第二服务器的第二动态zookeeper对应的进程满足预定条件之后,还包括:
所述第一服务器确定在预设时间内,不再向所述共享存储介质中的计数器文件写入写计数;
当计时时间等于所述预设时间时,所述第一服务器确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,所述第一服务器确定第二服务器的第二动态zookeeper对应的进程满足预定条件,包括:
所述第一服务器确定所述第二服务器的所述第二动态zookeeper对应的进程处于非激活状态,且确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,还包括:
所述第一服务器确定所述第二服务器的所述第二动态zookeeper对应的进程处于异常状态;
所述第一服务器退出所述第一动态zookeeper对应的进程。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,所述第一服务器确定所述第二服务器的所述第二动态zookeeper对应的进程处于异常状态,包括:
所述第一服务器确定所述第二服务器的所述第二动态zookeeper对应的进程处于非激活状态,且确定所述第二服务器能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程处于所述异常状态。
本发明的第二方面,提供一种第一服务器,包括:
启动单元,用于启动第一动态zookeeper对应的进程;
确定单元,用于确定第二服务器的第二动态zookeeper对应的进程满足预定条件;其中,所述预定条件为所述第二服务器的所述第二动态zookeeper对应的进程不能为客户端提供正常服务;
配置单元,用于为所述第一动态zookeeper对应的进程配置浮动网络地址,以便所述第一服务器的所述第一动态zookeeper对应的进程为所述客户端提供服务;
其中,所述第一动态zookeeper预先配置在所述第一服务器上,所述第二动态zookeeper预先配置在所述第二服务器上;所述第一动态zookeeper对应的进程的数据与所述第二动态zookeeper对应的进程的数据均存储在共享存储介质中。
结合第二方面,在一种可能的实现方式中,还包括:
读取单元,用于在所述启动单元启动第一动态zookeeper对应的进程之后,针对所述共享存储介质进行读取操作;
所述确定单元,具体用于当所述读取单元针对所述共享存储介质的读取操作成功时,确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,还包括:
释放单元,用于在所述确定单元确定第二服务器的第二动态zookeeper对应的进程满足预定条件之前,释放为所述第一动态zookeeper对应的进程配置的所述浮动网络地址。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,还包括:
写入单元,用于在所述启动单元启动第一动态zookeeper对应的进程之后,周期性的向所述共享存储介质中的计数器文件写入写计数;其中,所述计数器文件与所述第一动态zookeeper对应的进程相对应,所述写入单元周期性的向所述共享存储介质中写入的所述写计数中,后一次写入的所述写计数大于前一次写入的所述写计数。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,
所述确定单元,具体用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于激活状态,且确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件;
所述确定单元,还用于在所述确定第二服务器的第二动态zookeeper对应的进程满足预定条件之后,确定在预设时间内,不再向所述共享存储介质中的计数器文件写入写计数,并当计时时间等于所述预设时间时,确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,
所述确定单元,具体用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于非激活状态,且确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,
所述确定单元,还用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于异常状态;
所述第一服务器,还包括:
退出单元,用于退出所述第一动态zookeeper对应的进程。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,
所述确定单元,具体用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于非激活状态,且确定所述第二服务器能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程处于所述异常状态。
本发明的第三方面,提供一种基于zookeeper的服务提供系统,包括:
第一服务器;其中,所述第一服务器上预先配置了第一静态zookeeper和第一动态zookeeper,且所述第一静态zookeeper已加入zookeeper集群;
N台第二服务器;其中,N为奇数,所述N台第二服务器中的每台第二服务器上均预先配置了第二静态zookeeper和第二动态zookeeper,且所述N台第二服务器中的每台第二服务器上预先配置的所述第二静态zookeeper均已加入所述zookeeper集群;
以及客户端;
所述第一服务器,用于确定第二服务器的第二动态zookeeper对应的进程满足预定条件;其中,所述预定条件为所述第二服务器的所述第二动态zookeeper对应的进程不能为客户端提供正常服务;为所述第一动态zookeeper对应的进程配置浮动网络地址,以便所述第一服务器的所述第一动态zookeeper对应的进程为所述客户端提供服务;
其中,所述第一动态zookeeper对应的进程的数据与所述第二动态zookeeper对应的进程的数据均存储在共享存储介质中,在同一时刻,所述第一动态zookeeper和所述N台第二服务器中的每台第二服务器上预先配置的所述第二动态zookeeper中,只有一台服务器的动态zookeeper加入所述zookeeper集群。
结合第三方面,在一种可能的实现方式中,所述N等于1。
本发明实施例提供的基于zookeeper的服务提供方法,第一服务器及系统,在第一服务器启动自身预先配置的第一动态zookeeper对应的进程之后,当第一服务器确定第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务时,第一服务器为第一动态zookeeper对应的进程配置浮动网络地址,以便第一服务器的第一动态zookeeper对应的进程为客户端提供服务,这样使得当分布式系统中有偶数台服务器中配置的zookeeper已加入zookeeper集群为客户端提供服务时,通过确保zookeeper集群中为客户端提供服务的zookeeper为奇数个,提高了zookeeper集群的可靠性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1提供的一种基于zookeeper的服务提供方法流程图;
图2为本发明实施例2提供的一种基于zookeeper的服务提供方法流程图;
图3为本发明实施例2提供的另一种基于zookeeper的服务提供方法流程图;
图4为本发明实施例3提供的一种第一服务器的组成示意图;
图5为本发明实施例3提供的另一种第一服务器的组成示意图;
图6为本发明实施例4提供的一种第一服务器的组成示意图;
图7为本发明实施例5提供的一种基于zookeeper的服务提供系统的组成示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
另外,本文中术语“系统”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
需要说明的是,在本发明实施例中所述的zookeeper为一个针对分布式系统的可靠协调软件,所述zookeeper用于各个服务器之间进行数据的共享。
实施例1
本发明实施例1提供一种基于zookeeper的服务提供方法,当分布式系统中有偶数个服务器中配置的静态zookeeper已加入zookeeper集群为客户端提供服务时,为了提高分布式系统中部署的zookeeper集群的可靠性,在本发明实施例中,具体的分布式系统中包括第一服务器,该第一服务器上预先配置了第一静态zookeeper和第一动态zookeeper,且该第一静态zookeeper已加入了zookeeper集群,同时该分布式系统中还包括N台第二服务器(N为奇数),该N台第二服务器中的每台第二服务器上均预先配置了第二静态zookeeper和第二动态zookeeper,且N台第二服务器中的每台第二服务器上预先配置的第二静态zookeeper均已加入所述zookeeper集群。并且第一动态zookeeper对应的进程的数据与第二动态zookeeper对应的进程的数据均存储在共享存储介质中,为了提高分布式系统中部署的zookeeper集群的可靠性,只需确保zookeeper集群中为客户端提供服务的zookeeper为奇数个即可,因此在同一时刻,第一动态zookeeper和N台第二服务器中的每台第二服务器上预先配置的第二动态zookeeper中,只有一台服务器的动态zookeeper加入zookeeper集群为客户端提供服务。
在本发明实施例中,提高分布式系统中部署的zookeeper集群的可靠性,即确保zookeeper集群中为客户端提供服务的zookeeper为奇数个的具体实施方法如图1所示,该方法可以包括:
101、第一服务器启动第一动态zookeeper对应的进程。
其中,第一动态zookeeper预先配置在第一服务器上。具体的,第一服务器可以启动预先配置在该第一服务器上的第一动态zookeeper对应的进程。
102、第一服务器确定第二服务器的第二动态zookeeper对应的进程满足预定条件。
其中,第二动态zookeeper预先配置在第二服务器上,所述预定条件为第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务。
具体的,当第一服务器启动了在该第一服务器上预先配置的第一动态zookeeper对应的进程之后,第一服务器可以判断第二服务器上预先配置的第二动态zookeeper对应的进程是否满足预定条件,并在确定第二服务器上预先配置的第二动态zookeeper对应的进程满足预定条件,也就是说确定第二服务器上预先配置的第二动态zookeeper对应的进程不能为客户端提供正常服务时,执行以下步骤103。
103、第一服务器为第一动态zookeeper对应的进程配置浮动网络地址,以便第一服务器的第一动态zookeeper对应的进程为客户端提供服务。
其中,在第一服务器确定第二服务器的第二动态zookeeper对应的进程满足预定条件,即确定第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务之后,第一服务器为预先配置在该第一服务器上的第一动态zookeeper对应进程配置浮动网络地址,以便第一服务器上预先配置第一动态zookeeper对应的进程为客户端提供服务。
需要说明的是,在本发明实施例中分布式系统中除了包含偶数个已加入zookeeper集群的静态zookeeper对应的服务器外,还可以包含配置了静态zookeeper(但未加入zookeeper集群),或者未配置静态zookeeper的服务器,也就是说,分布式系统中包含的服务器个数可以大于或者等于N。
本发明实施例提供的基于zookeeper的服务提供方法,在第一服务器启动自身预先配置的第一动态zookeeper对应的进程之后,当第一服务器确定第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务时,第一服务器为第一动态zookeeper对应的进程配置浮动网络地址,以便第一服务器的第一动态zookeeper对应的进程为客户端提供服务,这样使得当分布式系统中有偶数个服务器中配置的静态zookeeper已加入zookeeper集群为客户端提供服务时,通过确保zookeeper集群中为客户端提供服务的zookeeper为奇数个,提高了zookeeper集群的可靠性。
实施例2
本发明实施例2提供一种基于zookeeper的服务提供方法,当分布式系统中有偶数个服务器中配置的静态zookeeper已加入zookeeper集群为客户端提供服务时,为了提高分布式系统中部署的zookeeper集群的可靠性,在本发明实施例中,具体的分布式系统中包括第一服务器,该第一服务器上预先配置了第一静态zookeeper和第一动态zookeeper,且该第一静态zookeeper已加入了zookeeper集群,同时该分布式系统中还包括N台第二服务器(N为奇数),该N台第二服务器中的每台第二服务器上均预先配置了第二静态zookeeper和第二动态zookeeper,且N台第二服务器中的每台第二服务器上预先配置的第二静态zookeeper均已加入所述zookeeper集群。并且第一动态zookeeper对应的进程的数据与第二动态zookeeper对应的进程的数据均存储在共享存储介质中,该共享存储介质不在分布式系统中包含的偶数个已加入zookeeper集群的静态zookeeper对应的服务器中,为了提高分布式系统中部署的zookeeper集群的可靠性,只需确保zookeeper集群中为客户端提供服务的zookeeper为奇数个即可,因此在同一时刻,第一动态zookeeper和N台第二服务器中的每台第二服务器上预先配置的第二动态zookeeper中,只有一台服务器的动态zookeeper加入zookeeper集群为客户端提供服务。
需要说明的是,在本发明实施例中分布式系统中除了包含偶数个已加入zookeeper集群的静态zookeeper对应的服务器外,还可以包含配置了静态zookeeper(但未加入zookeeper集群),或者未配置静态zookeeper的服务器,也就是说,分布式系统中包含的服务器个数可以大于或者等于N。
在本发明实施例中,提高分布式系统中部署的zookeeper集群的可靠性,即确保zookeeper集群中为客户端提供服务的zookeeper为奇数个的具体实施方法如图2所示,该方法可以包括:
201、第一服务器启动第一动态zookeeper对应的进程。
其中,第一动态zookeeper预先配置在第一服务器上,且第一服务器是为客户端提供服务的所有服务器中的任意一个。具体的,为了可以确保zookeeper集群中为客户端提供服务的zookeeper为奇数个,第一服务器需要启动该第一服务器上预先配置的第一动态zookeeper对应的进程。
可选的,第一服务器上可以配置定时检测进程,这样每隔预定的时间便可以检测第一服务器上预先配置的第一动态zookeeper对应的进程是否启动,若检测到第一动态zookeeper对应的进程未启动,则启动该第一服务器上预先配置的第一动态zookeeper对应的进程。
202、第一服务器针对共享存储介质进行读取操作。
其中,为了确保为客户端提供的数据的一致性,第一服务器上预先配置的第一动态zookeeper对应的进程的数据与第二服务器上预先配置的第二动态zookeeper对应的进程的数据存储在同一个共享存储介质,这样第一动态zookeeper进程和第二动态zookeeper进程便可以通过该共享存储介质提供的读写接口,读写同一份数据,从而保证了为客户端提供的数据的一致性,且第二服务器是为客户端提供服务的所有服务器中除第一服务器外的其余服务器(大于等于1台服务器)。
具体的,当第一服务器启动在该第一服务器上预先配置的第一动态zookeeper对应的进程之后,便可以针对共享存储介质进行数据读取操作,以便判断该共享存储介质是否准备好,当针对共享存储介质的读取操作成功时,则执行以下步骤203-205。当针对共享存储介质的读取操作未成功时,第一服务器则退出第一动态zookeeper对应的进程,当然,在第一服务器退出第一动态zookeeper对应的进程之后,根据第一服务器上配置的定时检测进程,还可以在预定的时间到达时,再次启动第一动态zookeeper对应的进程。
203、第一服务器释放为第一动态zookeeper对应的进程配置的浮动网络地址。
其中,为了防止第一服务器在上一次退出该第一动态zookeeper对应的进程时,浮动网络地址未被成功释放,此时第一服务器可以释放为第一动态zookeeper对应的进行配置的浮动网络地址。
当然,需要说明的是,若第一服务器的第一动态zookeeper对应的进程是第一次启动,那么此时步骤203可以执行,也可以不执行,也就是说,步骤203为可选步骤,步骤203是否执行可以根据实际应用场景的需要选择。
204、第一服务器周期性的向共享存储介质中的计数器文件写入写计数。
其中,计数器文件与第一动态zookeeper对应的进程相对应,第一服务器周期性的向共享存储介质中写入的写计数中,后一次写入的写计数大于前一次写入的写计数。
具体的,由于在本发明实施例中,服务器上预先配置的动态zookeeper是否需要加入zookeeper集群为客户端提供服务是通过判断对端服务器的动态zookeeper是否处于激活状态,具体的是判断对端服务器的动态zookeeper在共享存储介质中的对应的计数器文件的计数数值在预定的时间内是否有增加来确定的,因此,为了使得第一服务的对端服务器可以获知第一服务器已处于激活状态,第一服务器可以启动保活线程,具体的是周期性的向共享存储介质中与第一动态zookeeper对应的进程相对应的计数器文件中写入写计数,且周期性写入的写计数中,后一次写入的写计数大于前一次写入的写计数,以确保写入计数器文件中的写计数是递增的。
可选的,在本发明实施例中,当第一服务器向共享存储介质中与第一动态zookeeper对应的进程相对应的计数器文件中写入写计数,出现写失败的情况出现时,为了确保不会出现多个服务器的动态zookeeper同时加入zookeeper集群为客户端提供服务的情况发生,第一服务器在这种情况下,可以直接提出第一动态zookeeper对应的进程。
需要说明的是,在本发明实施例中对步骤203和步骤204的执行顺序不做限制,也就是说,可以先执行步骤203,再执行步骤204,也可以先执行步骤204,再执行步骤203,当然步骤203与步骤204还可以同时执行。
205、第一服务器判断第二服务器的第二动态zookeeper对应的进程是否满足预定条件。
其中,预定条件为第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务。
具体的,第一服务器判断第二服务器的第二动态zookeeper对应的进程是否满足预定条件,即判断第二服务器的第二动态zookeeper对应的进程是否不能为客户端提供正常服务,当第一服务器确定第二服务器的第二动态zookeeper对应的进程满足预定条件,即确定第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务时,执行以下步骤206。当第一服务器确定第二服务器的第二动态zookeeper对应的进程不满足预定条件,即确定第二服务器的第二动态zookeeper对应的进程能为客户端提供正常服务时,则重新执行步骤205。
其中,进一步的,如图3所示,在本发明实施例中步骤205判断第二服务器的第二动态zookeeper对应的进程是否满足预定条件,即判断第二服务器的第二动态zookeeper对应的进程是否不能为客户端提供正常服务,具体的可以包括以下步骤:
2051、第一服务器判断第二服务器的第二动态zookeeper对应的进程是否处于激活状态。
其中,第一服务器通过判断第二服务器的第二动态zookeeper在共享存储介质中对应的计数器文件的计数数值是否有增加,来判断第二服务器的第二动态zookeeper是否处于激活状态。
2052、第一服务器判断第二服务器是否能通过浮动网络地址与客户端进行通信。
其中,在第一服务器判断第二服务器的第二动态zookeeper是否处于激活状态之后,还需要判断第二服务器是否能通过浮动网络地址与客户端进行通信,例如,可以通过判断浮动网络地址是否可达,来判断第二服务器是否能通过该浮动网络地址与客户端进行通信。
需要说明的是,为了使得客户端感知不到服务器端到底是哪个服务器在提供服务,在本发明实施例中,可以预先为第一服务器上预先配置的第一动态zookeeper和第二服务器上预先配置的第二动态zookeeper分配同一个浮动网络地址,也就是说无论是第一服务器的第一动态zookeeper对应的进程为客户端提供服务,还是第二服务器的第二动态zookeeper对应的进程为客户端提供服务,为客户端提供服务的动态zookeeper对应的进程均绑定预先分配的同一个浮动网络地址,因此当第一服务器需要判断第二服务器是否能通过浮动网络地址与客户端进行通信时,只需判断该浮动网络地址是否可达即可。
具体的,在执行步骤2051和步骤2052时,可能出现以下四种情况。
在第一种应用场景中,当第一服务器确定第二服务器的第二动态zookeeper对应的进程处于激活状态,且确定第二服务器不能通过浮动网络地址与客户端进行通信时,此时可以确定第二服务器的第二动态zookeeper对应的进程满足预定条件,也就是说此时第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务,且该判断结果还表明第一服务器的第一动态zookeeper对应的进程与第二服务器的第二动态zookeeper对应的进程在竞争加入zookeeper集群,此时第一服务器可以执行以下步骤2053和步骤2054。
2053、第一服务器确定在预设时间内,不再向共享存储介质中的计数器文件写入写计数。
其中,由于第一服务器的第一动态zookeeper对应的进程与第二服务器的第二动态zookeeper对应的进程在竞争加入zookeeper集群,因此第一服务器需要随机休眠一段时间,在休眠的过程中,即在预设的时间内,第一服务器确定不再向共享存储介质中与第一动态zookeeper对应的进程的相对应的计数器文件中写入写计数,且不再判断第二服务器的第二动态zookeeper对应的进程是否不能为客户端提供正常服务,当然第二服务器也需要随机休眠一段时间,同样的第二服务器也需要在预设的时间内不再向共享存储介质中与第二动态zookeeper对应的进程的相对应的计数器文件中写入写计数。
需要说明的是,为了避免第一服务器和第二服务器选择的随机休眠的时间一样,或者是第一服务器与第二服务器选择的随机休眠的时间接近,在本发明实施例中,可以为第一服务器和第二服务器预先设置不同的休眠的时间,例如,可以根据第一服务器的第一静态zookeeper的节点号和第二服务器的第二静态zookeeper的节点号,来为第一服务器和第二服务器分配休眠的时间,如第一服务器的第一静态zookeeper的节点号小,则为第一服务器设置休眠的时间为[0,100]之间的随机数,为第二服务器设置休眠的时间为(100,200]之间的随机数。
2054、当计时时间等于预设时间时,第一服务器确定第二服务器不能通过浮动网络地址与客户端进行通信。
其中,当第一服务器休眠的计时时间等于预设时间时,第一服务器可以再次判断第二服务器是否能通过浮动网络地址与客户端进行通信,当第一服务器确定第二服务器不能通过浮动网络地址与客户端进行通信时,则说明第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务,此时可以执行步骤206。若第一服务器确定第二服务器能通过浮动网络地址与客户端进行通信,那么说明第二服务器的第二动态zookeeper已经加入zookeeper集群,也就是说第二服务器的第二动态zookeeper可以为客户端提供正常服务,此时可以重新执行步骤2051和步骤2052。
需要说明的是,本发明实施例中判断第二服务器是否能通过浮动网络地址与客户端进行通信的具体描述可以参考本发明实施例中步骤2052对应内容的具体描述,本发明实施例在此不再一一赘述。
在第二种应用场景中,当第一服务器确定第二服务器的第二动态zookeeper对应的进程处于激活状态,且确定第二服务器能通过浮动网络地址与客户端进行通信,此时可以确定第二服务器的第二动态zookeeper对应的进程不满足预定条件,也就是说此时第二服务器的第二动态zookeeper对应的进程能为客户端提供正常服务,则第一服务器的第一动态zookeeper暂时不需要向客户端提供服务,那么可以重新执行步骤2051和步骤2052。
在第三种应用场景中,当第一服务器确定第二服务器的第二动态zookeeper对应的进程处于非激活状态,且确定第二服务器不能通过浮动网络地址与客户端进行通信时,此时可以确定第二服务器的第二动态zookeeper对应的进程满足预定条件,也就是说此时第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务,此时第一服务器可以执行以下步骤206。
在第四种应用场景中,当第一服务器确定第二服务器的第二动态zookeeper对应的进程处于非激活状态,且确定第二服务器能通过浮动网络地址与客户端进行通信,也就是说,第二服务器的第二动态zookeeper对应的进程已经退出,但是为第二动态zookeeper对应的进程绑定的浮动网络地址却未释放,那么此时可以确定第二服务器的第二动态zookeeper对应的进程处于异常状态,此时第一服务器可以执行以下步骤207。
206、第一服务器为第一动态zookeeper对应的进程配置浮动网络地址,以便第一服务器的第一动态zookeeper对应的进程为客户端提供服务。
其中,当第一服务器确定第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务时,第一服务器可以为第一动态zookeeper对应的进程配置浮动网络地址,这样第一服务器的第一动态zookeeper便加入zookeeper集群为客户端提供服务。
207、第一服务器退出第一动态zookeeper对应的进程。
其中,当第一服务器确定第二服务器的第二动态zookeeper对应的进程处于非激活状态,且确定第二服务器能通过浮动网络地址与客户端进行通信时,第一服务器可以确定第二服务器的第二动态zookeeper对应的进程处于异常状态,此时第一服务器便可以直接退出第一动态zookeeper对应的进程。
需要说明的是,在分布式系统中包含的已加入zookeeper集群的静态zookeeper对应的服务器上可以配置奇数个动态zookeeper,也就是说,只需保证zookeeper集群中包含奇数个zookeeper为客户端提供服务即可。例如,分布式系统中包含第一服务器和第二服务器,第一服务器上配置了一个第一静态zookeeper和三个第一动态zookeeper(zookeeper01、zookeeper02、zookeeper03),第二服务器上配置了一个第二静态zookeeper和三个第二动态zookeeper(zookeeper04、zookeeper05、zookeeper06),且第一静态zookeeper和第二静态zookeeper已加入zookeeper集群,zookeeper01对应的进程的数据与zookeeper04对应的进程的数据存储在第一共享存储介质中,zookeeper02对应的进程的数据与zookeeper05对应的进程的数据存储在第二共享存储介质中,zookeeper03对应的进程的数据与zookeeper06对应的进程的数据存储在第二共享存储介质中。这样,第一服务器可以按照本发明实施例中步骤201-步骤207中执行过程判断zookeeper01是否需要加入zookeeper集群,此时只需判断第二服务器的zookeeper04对应的进程是否能为客户端提供正常服务即可,第二服务器可以按照本发明实施例中步骤201-步骤207中执行过程判断zookeeper04是否需要加入zookeeper集群,此时只需判断第一服务器的zookeeper01对应的进程是否能为客户端提供正常服务即可,同理,第一服务器判断zookeeper02、zookeeper03是否需要加入zookeeper集群的过程与上述过程类似,第二服务器判断zookeeper05、zookeeper06是否需要加入zookeeper集群的过程也与上述过程类似。也就是说,当本端服务器与对端服务器中均包含多个动态zookeeper时,本端服务器只需判断与本端服务器的动态zookeeper对应进程的数据存储在同一个共享存储介质的对端服务器的动态zookeeper对应的进程是否能为客户端提供正常服务,便可以获知本端服务器的动态zookeeper是否需要加入zookeeper集群为客户端提供服务,具体的判断过程可以参考本发明实施例中步骤201-步骤207中的具体描述,本发明实施例在此不再一一赘述。
为了便于本领域技术人员的理解,在此对本发明实施例的具体执行过程进行举例说明。
例如,分布式系统中包括两台服务器,为第一服务器和第二服务器,其中第一服务器上配置了一个第一静态zookeeper和一个第一动态zookeeper,第二服务器上配置了一个第二静态zookeeper和一个第二动态zookeeper,且第一静态zookeeper和第二静态zookeeper已加入zookeeper集群为客户端提供服务,第一动态zookeeper对应的进程的数据与第二动态zookeeper对应的进程的数据均存储在共享存储介质中。为了确保zookeeper集群中包含奇数个zookeeper,以保证zookeeper集群的可靠性,在同一时刻,第一动态zookeeper和第二动态zookeeper中只有一个动态zookeeper加入zookeeper集群,当第一服务器和第二服务器中其中一台发生故障时,如果发生故障的服务器中的动态zookeeper之前加入了zookeeper集群,并且由于服务器发生故障动态zookeeper对应的进程无法为客户端提供服务,那么另一台服务器上的动态zookeeper会加入zookeeper集群,接替发生故障动态zookeeper为客户端提供服务,这样zookeeper集群中仍然有两个zookeeper,进而可以保证zookeeper集群可以继续对客户端提供正常服务。具体的,第一服务器可以按照本发明实施例中步骤201-步骤207中执行过程判断第一动态zookeeper是否需要加入zookeeper集群,同理,第二服务器也可以按照本发明实施例中步骤201-步骤207中执行过程判断第二动态zookeeper是否需要加入zookeeper集群。
并且,本发明实施例提供的方法,在分布式系统中包含两个服务器的应用场景中,zookeeper集群的可靠性的保证尤为明显。
本发明实施例提供的基于zookeeper的服务提供方法,在第一服务器启动自身预先配置的第一动态zookeeper对应的进程之后,当第一服务器确定第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务时,第一服务器为第一动态zookeeper对应的进程配置浮动网络地址,以便第一服务器的第一动态zookeeper对应的进程为客户端提供服务,这样使得当分布式系统中有偶数个服务器中配置的静态zookeeper已加入zookeeper集群为客户端提供服务时,通过确保zookeeper集群中为客户端提供服务的zookeeper为奇数个,提高了zookeeper集群的可靠性。
并且,通过为第一服务器的第一动态zookeeper对应的进程和第二服务器的第二动态zookeeper对应的进行绑定同一个浮动网络地址,使得客户端感知不到服务器端是哪个服务器在为自身提供服务,提高了客户端体验。
实施例3
本发明实施例3提供一种第一服务器,如图4所示,包括:启动单元31、确定单元32、配置单元33。
启动单元31,用于启动第一动态zookeeper对应的进程。
确定单元32,用于确定第二服务器的第二动态zookeeper对应的进程满足预定条件;其中,所述预定条件为所述第二服务器的所述第二动态zookeeper对应的进程不能为客户端提供正常服务。
配置单元33,用于为所述第一动态zookeeper对应的进程配置浮动网络地址,以便所述第一服务器的所述第一动态zookeeper对应的进程为所述客户端提供服务。
其中,所述第一动态zookeeper预先配置在所述第一服务器上,所述第二动态zookeeper预先配置在所述第二服务器上;所述第一动态zookeeper对应的进程的数据与所述第二动态zookeeper对应的进程的数据均存储在共享存储介质中。
进一步的,如图5所示,所述第一服务器还可以包括:读取单元34。
读取单元34,用于在所述启动单元31启动第一动态zookeeper对应的进程之后,针对所述共享存储介质进行读取操作。
所述确定单元32,具体用于当所述读取单元34针对所述共享存储介质的读取操作成功时,确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件。
进一步的,所述第一服务器还可以包括:释放单元35。
释放单元35,用于在所述确定单元32确定第二服务器的第二动态zookeeper对应的进程满足预定条件之前,释放为所述第一动态zookeeper对应的进程配置的所述浮动网络地址。
进一步的,所述第一服务器还可以包括:写入单元36。
写入单元36,用于在所述启动单元31启动第一动态zookeeper对应的进程之后,周期性的向所述共享存储介质中的计数器文件写入写计数;其中,所述计数器文件与所述第一动态zookeeper对应的进程相对应,所述写入单元36周期性的向所述共享存储介质中写入的所述写计数中,后一次写入的所述写计数大于前一次写入的所述写计数。
进一步的,所述确定单元32,具体用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于激活状态,且确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件。
所述确定单元32,还用于在所述确定第二服务器的第二动态zookeeper对应的进程满足预定条件之后,确定在预设时间内,不再向所述共享存储介质中的计数器文件写入写计数,并当计时时间等于所述预设时间时,确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信。
进一步的,所述确定单元32,具体用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于非激活状态,且确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件。
进一步的,所述确定单元32,还用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于异常状态。
所述第一服务器,还可以包括:退出单元37。
退出单元37,用于退出所述第一动态zookeeper对应的进程。
进一步的,所述确定单元32,具体用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于非激活状态,且确定所述第二服务器能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程处于所述异常状态。
需要说明的是,本发明实施例提供的第一服务器中各功能模块的具体描述可以参考方法实施例中对应内容的具体描述,本发明实施例在此不再详细赘述。
本发明实施例提供的第一服务器,在启动自身预先配置的第一动态zookeeper对应的进程之后,当确定第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务时,为第一动态zookeeper对应的进程配置浮动网络地址,以便第一动态zookeeper对应的进程为客户端提供服务,这样使得当分布式系统中有偶数个服务器中配置的静态zookeeper已加入zookeeper集群为客户端提供服务时,通过确保zookeeper集群中为客户端提供服务的zookeeper为奇数个,提高了zookeeper集群的可靠性。
并且,通过为第一服务器的第一动态zookeeper对应的进程和第二服务器的第二动态zookeeper对应的进行绑定同一个浮动网络地址,使得客户端感知不到服务器端是哪个服务器在为自身提供服务,提高了客户端体验。
实施例4
本发明实施例4提供一种第一服务器,如图6所示,包括:至少一个处理器41、存储器42、通信接口43和总线44,该至少一个处理器41、存储器42和通信接口43通过总线44连接并完成相互间的通信,其中:
所述总线44可以是工业标准体系结构(Industry StandardArchitecture,ISA)总线、外部设备互连(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准体系结构(Extended IndustryStandard Architecture,EISA)总线等。该总线44可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
所述存储器42用于存储可执行程序代码,该程序代码包括计算机操作指令。存储器42可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
所述处理器41可能是一个中央处理器(Central Processing Unit,CPU),或者是特定集成电路(Application Specific Integrated Circuit,ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。
所述通信接口43,主要用于实现本实施例的设备之间的通信。
所述处理器41,用于执行所述存储器42中存储的可执行程序代码,具体的用于执行以下操作:
所述处理器41,用于启动第一动态zookeeper对应的进程;确定第二服务器的第二动态zookeeper对应的进程满足预定条件;其中,所述预定条件为所述第二服务器的所述第二动态zookeeper对应的进程不能为客户端提供正常服务;为所述第一动态zookeeper对应的进程配置浮动网络地址,以便所述第一服务器的所述第一动态zookeeper对应的进程为所述客户端提供服务。
其中,所述第一动态zookeeper预先配置在所述第一服务器上,所述第二动态zookeeper预先配置在所述第二服务器上;所述第一动态zookeeper对应的进程的数据与所述第二动态zookeeper对应的进程的数据均存储在共享存储介质中。
在本发明实施例中,进一步可选的,所述处理器41,还用于在所述启动第一动态zookeeper对应的进程之后,针对所述共享存储介质进行读取操作;当针对所述共享存储介质的读取操作成功时,确定第二服务器的第二动态zookeeper对应的进程满足预定条件。
在本发明实施例中,进一步可选的,所述处理器41,还用于在所述确定第二服务器的第二动态zookeeper对应的进程满足预定条件之前,释放为所述第一动态zookeeper对应的进程配置的所述浮动网络地址。
在本发明实施例中,进一步可选的,所述处理器41,还用于在所述启动第一动态zookeeper对应的进程之后,周期性的向所述共享存储介质中的计数器文件写入写计数;其中,所述计数器文件与所述第一动态zookeeper对应的进程相对应,所述处理器41周期性的向所述共享存储介质中写入的所述写计数中,后一次写入的所述写计数大于前一次写入的所述写计数。
在本发明实施例中,进一步可选的,所述处理器41,还用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于激活状态,且确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件。
所述处理器41,还用于在所确定第二服务器的第二动态zookeeper对应的进程满足预定条件之后,确定在预设时间内,不再向所述共享存储介质中的计数器文件写入写计数;当计时时间等于所述预设时间时,确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信。
在本发明实施例中,进一步可选的,所述处理器41,还用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于非激活状态,且确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件。
在本发明实施例中,进一步可选的,所述处理器41,还用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于异常状态;退出所述第一动态zookeeper对应的进程。
在本发明实施例中,进一步可选的,所述处理器41,还用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于非激活状态,且确定所述第二服务器能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程处于所述异常状态。
需要说明的是,本发明实施例提供的第一服务器中各功能模块的具体描述可以参考方法实施例中对应内容的具体描述,本发明实施例在此不再详细赘述。
本发明实施例提供的第一服务器,在启动自身预先配置的第一动态zookeeper对应的进程之后,当确定第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务时,为第一动态zookeeper对应的进程配置浮动网络地址,以便第一动态zookeeper对应的进程为客户端提供服务,这样使得当分布式系统中有偶数个服务器中配置的静态zookeeper已加入zookeeper集群为客户端提供服务时,通过确保zookeeper集群中为客户端提供服务的zookeeper为奇数个,提高了zookeeper集群的可靠性。
并且,通过为第一服务器的第一动态zookeeper对应的进程和第二服务器的第二动态zookeeper对应的进行绑定同一个浮动网络地址,使得客户端感知不到服务器端是哪个服务器在为自身提供服务,提高了客户端体验。
实施例5
本发明实施例5提供一种基于zookeeper的服务提供系统,如图7所示,包括:第一服务器51、N台第二服务器52、以及客户端53。
其中,所述第一服务器51上预先配置了第一静态zookeeper和第一动态zookeeper,且所述第一静态zookeeper已加入zookeeper集群。
其中,N为奇数,所述N台第二服务器52中的每台第二服务器52上均预先配置了第二静态zookeeper和第二动态zookeeper,且所述N台第二服务器52中的每台第二服务器52上预先配置的所述第二静态zookeeper均已加入所述zookeeper集群。
所述第一服务器51,用于确定第二服务器52的第二动态zookeeper对应的进程满足预定条件;其中,所述预定条件为所述第二服务器52的所述第二动态zookeeper对应的进程不能为客户端53提供正常服务;为所述第一动态zookeeper对应的进程配置浮动网络地址,以便所述第一服务器51的所述第一动态zookeeper对应的进程为所述客户端53提供服务。
其中,所述第一动态zookeeper对应的进程的数据与所述第二动态zookeeper对应的进程的数据均存储在共享存储介质中,在同一时刻,所述第一动态zookeeper和所述N台第二服务器52中的每台第二服务器52上预先配置的所述第二动态zookeeper中,只有一台服务器的动态zookeeper加入所述zookeeper集群。
进一步的,所述N等于1。
需要说明的是,本发明实施例提供的基于zookeeper的服务提供系统中各设备功能的具体描述可以参考方法实施例中对应内容的具体描述,本发明实施例在此不再详细赘述。
本发明实施例提供的基于zookeeper的服务提供系统,在第一服务器启动自身预先配置的第一动态zookeeper对应的进程之后,当第一服务器确定第二服务器的第二动态zookeeper对应的进程不能为客户端提供正常服务时,第一服务器为第一动态zookeeper对应的进程配置浮动网络地址,以便第一服务器的第一动态zookeeper对应的进程为客户端提供服务,这样使得当分布式系统中有偶数个服务器中配置的静态zookeeper已加入zookeeper集群为客户端提供服务时,通过确保zookeeper集群中为客户端提供服务的zookeeper为奇数个,提高了zookeeper集群的可靠性。
并且,通过为第一服务器的第一动态zookeeper对应的进程和第二服务器的第二动态zookeeper对应的进行绑定同一个浮动网络地址,使得客户端感知不到服务器端是哪个服务器在为自身提供服务,提高了客户端体验。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (18)
1.一种基于zookeeper的服务提供方法,其特征在于,包括:
第一服务器启动第一动态zookeeper对应的进程;
所述第一服务器确定第二服务器的第二动态zookeeper对应的进程满足预定条件;其中,所述预定条件为所述第二服务器的所述第二动态zookeeper对应的进程不能为客户端提供正常服务;
所述第一服务器为所述第一动态zookeeper对应的进程配置浮动网络地址,以便所述第一服务器的所述第一动态zookeeper对应的进程为所述客户端提供服务;
其中,所述第一动态zookeeper预先配置在所述第一服务器上,所述第二动态zookeeper预先配置在所述第二服务器上;所述第一动态zookeeper对应的进程的数据与所述第二动态zookeeper对应的进程的数据均存储在共享存储介质中。
2.根据权利要求1所述的方法,其特征在于,在所述第一服务器启动第一动态zookeeper对应的进程之后,还包括:
所述第一服务器针对所述共享存储介质进行读取操作;
当针对所述共享存储介质的读取操作成功时,则执行所述确定第二服务器的第二动态zookeeper对应的进程满足预定条件。
3.根据权利要求1所述的方法,其特征在于,在所述第一服务器确定第二服务器的第二动态zookeeper对应的进程满足预定条件之前,还包括:
所述第一服务器释放为所述第一动态zookeeper对应的进程配置的所述浮动网络地址。
4.根据权利要求1所述的方法,其特征在于,在所述第一服务器启动第一动态zookeeper对应的进程之后,还包括:
所述第一服务器周期性的向所述共享存储介质中的计数器文件写入写计数;其中,所述计数器文件与所述第一动态zookeeper对应的进程相对应,所述第一服务器周期性的向所述共享存储介质中写入的所述写计数中,后一次写入的所述写计数大于前一次写入的所述写计数。
5.根据权利要求1所述的方法,其特征在于,
所述第一服务器确定第二服务器的第二动态zookeeper对应的进程满足预定条件,包括:
所述第一服务器确定所述第二服务器的所述第二动态zookeeper对应的进程处于激活状态,且确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件;
在所述第一服务器确定第二服务器的第二动态zookeeper对应的进程满足预定条件之后,还包括:
所述第一服务器确定在预设时间内,不再向所述共享存储介质中的计数器文件写入写计数;
当计时时间等于所述预设时间时,所述第一服务器确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信。
6.根据权利要求1所述的方法,其特征在于,所述第一服务器确定第二服务器的第二动态zookeeper对应的进程满足预定条件,包括:
所述第一服务器确定所述第二服务器的所述第二动态zookeeper对应的进程处于非激活状态,且确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件。
7.根据权利要求1所述的方法,其特征在于,还包括:
所述第一服务器确定所述第二服务器的所述第二动态zookeeper对应的进程处于异常状态;
所述第一服务器退出所述第一动态zookeeper对应的进程。
8.根据权利要求7所述的方法,其特征在于,所述第一服务器确定所述第二服务器的所述第二动态zookeeper对应的进程处于异常状态,包括:
所述第一服务器确定所述第二服务器的所述第二动态zookeeper对应的进程处于非激活状态,且确定所述第二服务器能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程处于所述异常状态。
9.一种第一服务器,其特征在于,包括:
启动单元,用于启动第一动态zookeeper对应的进程;
确定单元,用于确定第二服务器的第二动态zookeeper对应的进程满足预定条件;其中,所述预定条件为所述第二服务器的所述第二动态zookeeper对应的进程不能为客户端提供正常服务;
配置单元,用于为所述第一动态zookeeper对应的进程配置浮动网络地址,以便所述第一服务器的所述第一动态zookeeper对应的进程为所述客户端提供服务;
其中,所述第一动态zookeeper预先配置在所述第一服务器上,所述第二动态zookeeper预先配置在所述第二服务器上;所述第一动态zookeeper对应的进程的数据与所述第二动态zookeeper对应的进程的数据均存储在共享存储介质中。
10.根据权利要求9所述的第一服务器,其特征在于,还包括:
读取单元,用于在所述启动单元启动第一动态zookeeper对应的进程之后,针对所述共享存储介质进行读取操作;
所述确定单元,具体用于当所述读取单元针对所述共享存储介质的读取操作成功时,确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件。
11.根据权利要求9所述的第一服务器,其特征在于,还包括:
释放单元,用于在所述确定单元确定第二服务器的第二动态zookeeper对应的进程满足预定条件之前,释放为所述第一动态zookeeper对应的进程配置的所述浮动网络地址。
12.根据权利要求9所述的第一服务器,其特征在于,还包括:
写入单元,用于在所述启动单元启动第一动态zookeeper对应的进程之后,周期性的向所述共享存储介质中的计数器文件写入写计数;其中,所述计数器文件与所述第一动态zookeeper对应的进程相对应,所述写入单元周期性的向所述共享存储介质中写入的所述写计数中,后一次写入的所述写计数大于前一次写入的所述写计数。
13.根据权利要求9所述的第一服务器,其特征在于,
所述确定单元,具体用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于激活状态,且确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件;
所述确定单元,还用于在所述确定第二服务器的第二动态zookeeper对应的进程满足预定条件之后,确定在预设时间内,不再向所述共享存储介质中的计数器文件写入写计数,并当计时时间等于所述预设时间时,确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信。
14.根据权利要求9所述的第一服务器,其特征在于,
所述确定单元,具体用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于非激活状态,且确定所述第二服务器不能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程满足所述预定条件。
15.根据权利要求9所述的第一服务器,其特征在于,
所述确定单元,还用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于异常状态;
所述第一服务器,还包括:
退出单元,用于退出所述第一动态zookeeper对应的进程。
16.根据权利要求15所述的第一服务器,其特征在于,
所述确定单元,具体用于确定所述第二服务器的所述第二动态zookeeper对应的进程处于非激活状态,且确定所述第二服务器能通过所述浮动网络地址与所述客户端进行通信,则确定所述第二服务器的所述第二动态zookeeper对应的进程处于所述异常状态。
17.一种基于zookeeper的服务提供系统,其特征在于,包括:
如权利要求9-16中任一项所述的第一服务器;其中,所述第一服务器上预先配置了第一静态zookeeper和第一动态zookeeper,且所述第一静态zookeeper已加入zookeeper集群;
N台第二服务器;其中,N为奇数,所述N台第二服务器中的每台第二服务器上均预先配置了第二静态zookeeper和第二动态zookeeper,且所述N台第二服务器中的每台第二服务器上预先配置的所述第二静态zookeeper均已加入所述zookeeper集群;
以及客户端;
其中,所述第一动态zookeeper对应的进程的数据与所述第二动态zookeeper对应的进程的数据均存储在共享存储介质中,在同一时刻,所述第一动态zookeeper和所述N台第二服务器中的每台第二服务器上预先配置的所述第二动态zookeeper中,只有一台服务器的动态zookeeper加入所述zookeeper集群。
18.根据权利要求17所述的系统,其特征在于,所述N等于1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310556776.7A CN103595781B (zh) | 2013-11-11 | 2013-11-11 | 一种基于zookeeper的服务提供方法、第一服务器及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310556776.7A CN103595781B (zh) | 2013-11-11 | 2013-11-11 | 一种基于zookeeper的服务提供方法、第一服务器及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103595781A CN103595781A (zh) | 2014-02-19 |
CN103595781B true CN103595781B (zh) | 2016-08-17 |
Family
ID=50085761
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310556776.7A Active CN103595781B (zh) | 2013-11-11 | 2013-11-11 | 一种基于zookeeper的服务提供方法、第一服务器及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103595781B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105049549B (zh) * | 2015-08-07 | 2018-12-28 | 北京思特奇信息技术股份有限公司 | 一种实现浮动ip地址自动漂移的方法和系统 |
CN106385437A (zh) * | 2016-08-31 | 2017-02-08 | 广州唯品会信息科技有限公司 | 集群选择方法及装置 |
CN107172230B (zh) * | 2017-07-24 | 2020-05-22 | 北京赛特斯信息科技股份有限公司 | 基于第三方数据库实现业务节点通讯地址发现的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101977124A (zh) * | 2010-11-05 | 2011-02-16 | 山东中创软件工程股份有限公司 | 基于ZooKeeper技术的业务集群方法及系统 |
CN103078805A (zh) * | 2012-12-31 | 2013-05-01 | 北京京东世纪贸易有限公司 | 使Zookeeper的读性能支持水平扩展的系统和方法 |
CN103259863A (zh) * | 2013-05-17 | 2013-08-21 | 汉柏科技有限公司 | 基于集群的控制zookeeper服务的系统及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9521554B2 (en) * | 2008-08-15 | 2016-12-13 | Qualcomm Incorporated | Adaptive clustering framework in frequency-time for network MIMO systems |
-
2013
- 2013-11-11 CN CN201310556776.7A patent/CN103595781B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101977124A (zh) * | 2010-11-05 | 2011-02-16 | 山东中创软件工程股份有限公司 | 基于ZooKeeper技术的业务集群方法及系统 |
CN103078805A (zh) * | 2012-12-31 | 2013-05-01 | 北京京东世纪贸易有限公司 | 使Zookeeper的读性能支持水平扩展的系统和方法 |
CN103259863A (zh) * | 2013-05-17 | 2013-08-21 | 汉柏科技有限公司 | 基于集群的控制zookeeper服务的系统及方法 |
Non-Patent Citations (1)
Title |
---|
基于ZooKeeper的分布式缓存的设计与实现;李汝光等;《绵阳师范学院学报》;20111125;第30卷(第11期);第116-119页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103595781A (zh) | 2014-02-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102084430B (zh) | 用于修补高容量/高带宽存储器装置的方法及设备 | |
CN108200124B (zh) | 一种高可用应用程序架构及构建方法 | |
CN104951357A (zh) | 并行用户态协议栈的管理方法和协议栈系统 | |
CN105373443A (zh) | 具有存储器系统体系结构的数据系统和数据读取方法 | |
CN104469699B (zh) | 集群仲裁方法和多集群配合系统 | |
CN106797349A (zh) | 用于动态vnf的动态级联聚类 | |
JP2002517819A (ja) | 耐障害性演算用の冗長コンピュータ・ベース・システムを管理するための方法及び装置 | |
CN103298013B (zh) | 一种进行业务恢复的方法及装置 | |
CN104899111B (zh) | 一种处理家庭网关系统内核崩溃的方法及系统 | |
CN103595781B (zh) | 一种基于zookeeper的服务提供方法、第一服务器及系统 | |
CN112235136B (zh) | 一种网络文件系统备份方法、系统、终端及存储介质 | |
CN108924272A (zh) | 一种端口资源分配方法及装置 | |
CN111181780A (zh) | 基于ha集群的主机池切换方法、系统、终端及存储介质 | |
CN113625945A (zh) | 分布式存储的慢盘处理方法、系统、终端及存储介质 | |
CN105487609A (zh) | 一种服务器 | |
CN103580923B (zh) | 软件部署的方法和装置 | |
CN109710025A (zh) | 一种固态硬盘的pcie时钟兼容方法、装置、计算机设备及存储介质 | |
CN105740061A (zh) | 一种gpu资源重建的方法、用户设备及系统 | |
CN108123967A (zh) | 一种集群系统的数据同步方法和系统 | |
CN110286852A (zh) | 双控构架分布式存储系统、数据读取方法、装置和存储介质 | |
CN112653576B (zh) | 基于Kylin系统的网卡识别处理方法、系统、终端及存储介质 | |
CN114448828A (zh) | 存储双活功能测试方法、系统、终端及存储介质 | |
CN101299205A (zh) | 基于表决的优先排队仲裁系统总线控制方法 | |
CN101686119A (zh) | 单板间通信的方法、装置、以及系统 | |
CN107329830A (zh) | 一种分布式集群系统优化的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220216 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Patentee after: Huawei Cloud Computing Technologies Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
TR01 | Transfer of patent right |