CN107707595B - 一种成员组变更方法及装置 - Google Patents
一种成员组变更方法及装置 Download PDFInfo
- Publication number
- CN107707595B CN107707595B CN201710161757.2A CN201710161757A CN107707595B CN 107707595 B CN107707595 B CN 107707595B CN 201710161757 A CN201710161757 A CN 201710161757A CN 107707595 B CN107707595 B CN 107707595B
- Authority
- CN
- China
- Prior art keywords
- group
- request
- cluster member
- motion
- transition
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0803—Configuration setting
- H04L41/0813—Configuration setting characterised by the conditions triggering a change of settings
- H04L41/0816—Configuration setting characterised by the conditions triggering a change of settings the condition being an adaptation, e.g. in response to network events
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/30—Profiles
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/51—Discovery or management thereof, e.g. service location protocol [SLP] or web services
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种成员组变更方法及装置,此方法包括:步骤1,接收针对初始集群成员组的变更请求,根据初始集群成员组和所述变更请求确定目标集群成员组,根据初始集群成员组和目标集群成员组设置过渡集群成员组,过渡集群成员组中包括第一组和第二组,第一组包括初始集群成员组中的所有成员,第二组包括目标集群成员组中的所有成员;步骤2,初始集群成员组执行一致性算法,将初始集群成员组更新为过渡集群成员组;步骤3,过渡集群成员组执行所述一致性算法,将过渡集群成员组更新为目标集群成员组。本发明可以在无需中止集群服务的情况下一次性完成一个成员组中多个成员的替换,可有效提高集群服务的智能性和有效性。
Description
技术领域
本发明涉及互联网技术领域,尤其涉及一种成员组变更方法及装置。
背景技术
Paxos算法是莱斯利·兰伯特(Leslie Lamport)为解决分布式系统一致性问题提出的一种基于消息传递的一致性算法。基于消息传递通信模型的分布式系统中的进程可能会因为错误而停止并且因为异常而重启,在网络传输中的消息可能会延迟、丢失或重复,在不考虑可能出现消息篡改即拜占庭错误的情况下,Paxos算法解决是在一个可能发生以上异常情况的分布式系统中如何就某个值达成一致的问题。
Paxos的参与者可以充当提议者(proposer),接受者(acceptor)和学习者(learner)三个角色中的至少一个角色。proposer它可以提出一个提案,一个提案信息包括提案编号n和提议的值(value);acceptor是提案的处理者,它有权决定是接受(accept)还是拒绝这个提案,若提案获得多数acceptors的接受,则称该提案被选定(chosen);learner只能学习已被选定的提案。Paxos通过满足安全性约束和活性约束来保证算法的正确性,活性约束就是最终有一个提案被选定,安全性约束:
1.只有被proposer提出的提案才能被acceptor选定;
2.在一次Paxos instance算法中只能有一个值被选定(chosen),同时
3.如果某个参与者认为某个提案被选定了,那么这个提案必须是真的被选定的那个。
Lamport就是不断的加强上述的3个约束来得到Paxos算法,特别是约束2,lamport在“Paxos make simple”论文中用大量的篇幅来加强约束2,从而得到Paxos的如下的2阶段提交的过程:
阶段1a.proposer确定提案的编号n,然后向acceptors发送prepare请求,此prepare请求中所述提案的编号n。
阶段1b.acceptor收到此请求后,判断此提案的编号n不小于它之前响应过的提案的编号,则acceptor响应通过该prepare请求,且返回之前通过编号最大的提案的value(如果存在的话),同时保证不会再通过任何编号小于n的任何提案。
阶段2a.如果proposer收到多数派个的acceptor对编号为n的prepare请求的响应,那么它就会发送一个包括value为编号为n的提案的accept请求给acceptors,此处v要么是phase1b响应中最大编号提案的value,要么是proposer这次paxos需要提交的值。
阶段2b.acceptor收到包括编号n的提案的accept请求,只要它还未对编号大于n的prepare请求作出响应,它就可以通过这个提案。
Paxos正是通过以上2阶段完成一次Paxos,确定一次Paxos提交一个value值。Lamport在他的论文中也证明了算法的正确性,但在实践中Paxos算法还有许多细节需要进一步的解决,如Paxos成员组变更问题。
目前为止,我们都假设集群的成员组配置是固定不变的。但是在实践中,由于机器的宕机导致成员下线,新旧成员的替换是不可避免的问题,那么在成员组配置信息发生变更之后,如何保持成员组配置信息的一致性,Lamport在论文中并没有给出具体的解决方案,但保持成员组配置信息在集群中一致是正确运行Paxos的前提。现在的方法包括以下两种:
方法一,stop-the-word方法
stop-the-word方法是将先暂停集群,修改所有成员的配置信息,然后再重启整个集群,这种方式能解决成员组配置信息一致性的问题,不会造成不同成员的配置信息不一致,但是同时透露出的问题也是明显的,就是在集群暂停过程中无法提供服务。对于现实中,服务不可用大部分情况下是不可忍受的。
方法二,一阶段成员变更方法
一阶段成员变更方法最早是raft论文提出的一个变更成员组的方法,该方法同样适用于Paxos,通过运行1次Paxos实例来变更成员配置信息,将需要变更之后的成员配置信息作为Paxos算法提案的value,使该提案在多数派acceptor中通过该value。该一阶段成员组变更算法有一个非常极端的限制,就是每次只能变更一个成员,也就意味着每次只能添加或者删除一个成员,如替换一个成员需要执行2次Paxos,先将成员从配置中删除,再将新成员添加到配置中。该算法同样可以保证成员组配置信息的一致性,因为一次变更一个成员可以保证变更之前的成员配置和变更之后的成员配置各自形成的多数派的交接都不为空,这样就保证了同时只能满两个成员配置的多数派中的一个,从而只能有个value能被选定。
现有技术的缺点包括:
1、stop-the-word方法通过暂停集群提供服务的方式修改配置,变更完成员配置后再提供服务,这种方法非常明显的缺点就是在变更成员配置过程中无法提供服务,对于可用性比较高的服务来说这是无法忍受的。
2、一阶段成员变更方法可以在提供服务的同时,变更成员配置信息,但是一次只能添加或者删除一个成员,意味着如果同时需要替换多个成员根本无法做到,只能一个一个的替换,在成员配置更变操作频繁的服务大大降低了其性能。
发明内容
为了解决上述技术问题,本发明提供了一种成员组变更方法及装置。
本发明提供的成员组变更方法包括:
步骤1,接收针对初始集群成员组的变更请求,根据所述初始集群成员组和所述变更请求确定目标集群成员组,根据所述初始集群成员组和所述目标集群成员组设置过渡集群成员组,所述过渡集群成员组中包括第一组和第二组,所述第一组包括所述初始集群成员组中的所有成员,所述第二组包括所述目标集群成员组中的所有成员;
步骤2,所述初始集群成员组执行一致性算法,将所述初始集群成员组更新为所述过渡集群成员组;
步骤3,所述过渡集群成员组执行所述一致性算法,将所述过渡集群成员组更新为所述目标集群成员组。
上述成员组变更方法还具有以下特点:
所述步骤2包括:所述初始集群成员组中接收到变更请求的成员设置第一请求提案,以预设递增规则设置此第一请求提案的编号,设置所述第一请求提案的值为所述过渡集群成员组,设置执行此次一致性算法的版本号,向所述初始集群成员组中所有作为接受者的成员发送至少一次请求,所述至少一次请求中携带所述版本号、所述第一请求提案的编号和所述第一请求提案的值;所述初始集群成员组执行所述一致性算法直至所述初始集群成员组的多数派通过所述第一请求提案。
上述成员组变更方法还具有以下特点:
所述步骤3包括:所述过渡集群成员组中的一成员设置第二请求提案,以预设递增规则设置此第二请求提案的编号,设置所述第二请求提案的值为目标集群成员组,设置执行此次一致性算法的版本号,向所述过渡集群成员组中所有作为接受者的成员发送至少一次请求,所述至少一次请求中携带所述版本号、所述第二请求提案的编号和所述第二请求提案的值;所述过渡集群成员组执行所述一致性算法直至所述过渡集群成员组的多数派通过所述第二请求提案。
上述成员组变更方法还具有以下特点:
所述步骤2中还包括:所述初始集群成员组执行所述一致性算法直至所述初始集群成员组的多数派通过所述第一请求提案后,接收到变更请求的成员向所述过渡集群成员组中所有成员发送携带版本号的提交通知请求,所述过渡集群成员组中作为学习者的成员判断此通知请求中的版本号大于其保存的当前版本号后,学习所述第一请求提案后更新其保存的当前版本号为通知请求中的版本号并更新保存的提案的值为所述第一请求提案的值,至此,所述过渡集群成员组成功被所述初始集群成员组选定。
上述成员组变更方法还具有以下特点:
所述步骤3中还包括:所述过渡集群成员组执行所述一致性算法直至所述过渡集群成员组的多数派通过所述第二请求提案后,设置第二请求提案的成员向所述过渡集群成员组中所有成员发送携带版本号的提交通知请求,所述过渡集群成员组中作为学习者的成员判断此通知请求中的版本号大于其保存的当前版本号后,学习所述第二请求提案后更新其保存的当前版本号为通知请求中的版本号并更新保存的提案的值为所述第二请求提案的值,至此,所述目标集群成员组成功被所述过渡集群成员组成功选定。
上述成员组变更方法还具有以下特点:
所述步骤2中还包括:所述初始集群成员组执行所述一致性算法后,所述初始集群成员组中接收变更请求的成员判断所述初始集群成员组的多数派是否通过所述第一请求提案,如果否,以预设递增规则设置所述第一请求提案的编号,将更新编号的第一请求提案发送至所述初始集群中所有成员,依照此方式执行,直至所述初始集群成员组的多数派通过所述第一请求提案;
上述成员组变更方法还具有以下特点:
所述步骤3中还包括:所述过渡集群成员组执行所述一致性算法后,所述过渡集群成员组中发送请求的成员判断所述过渡集群成员组的多数派是否通过所述第二请求提案,如果否,以预设递增规则设置所述第二请求提案的编号,将更新编号的第二请求提案发送至所述初始集群中所有成员,依照此方式执行,直至所述初始集群成员组的多数派通过所述第二请求提案。
上述成员组变更方法还具有以下特点:
所述变更请求中包括变更类型和变更类型对应的成员,所述变更类型包括增加和/或删除。
本发明提供的成员组变更装置,应用于服务器中,包括:
变更请求接收模块,用于在所属服务器是初始集群成员组的成员时,接收针对初始集群成员组的变更请求;
确定模块,用于根据所述初始集群成员组和所述变更请求确定目标集群成员组,根据所述初始集群成员组和所述目标集群成员组设置过渡集群成员组,所述过渡集群成员组中包括第一组和第二组,所述第一组包括所述初始集群成员组中的所有成员,所述第二组包括所述目标集群成员组中的所有成员;
执行模块,用于执行一致性算法直至所述初始集群成员组更新为所述过渡集群成员组;还用于在所属服务器是所述过渡集群成员组的成员时,再次执行所述一致性算法直至所述过渡集群成员组更新为所述目标集群成员组。
上述成员组变更装置还具有以下特点:
所述执行模块包括第一单元和第二单元;
所述第一单元,用于在所属服务器为所述初始集群成员组中接收到变更请求的成员时,设置第一请求提案,以预设递增规则设置此第一请求提案的编号,设置所述第一请求提案的值为所述过渡集群成员组,设置执行此次一致性算法的版本号,向所述初始集群成员组中所有作为接受者的成员发送至少一次请求,所述至少一次请求中携带所述版本号、所述第一请求提案的编号和所述第一请求提案的值;还用于在收到所述初始集群成员组中其它成员对所述请求的响应后,执行所述一致性算法中作为提案人角色的部分;
所述第二单元,用于在所属服务器为所述初始集群成员组中除了接收到变更请求的成员的其它成员时,在接收到所述初始集群成员组中作为提案人角色的成员发送的至少一次请求后,执行所述一致性算法中作为接受者角色的部分。
上述成员组变更装置还具有以下特点:
所述执行模块包括第一单元和第二单元;
所述第一单元,用于在所属服务器为所述过渡集群成员组中作为提案人角色的成员时,设置第二请求提案,以预设递增规则设置此第二请求提案的编号,设置所述第二请求提案的值为所述目标集群成员组,设置执行此次一致性算法的版本号,向所述过渡集群成员组中所有作为接受者的成员发送至少一次请求,所述至少一次请求中携带所述版本号、所述第二请求提案的编号和所述第二请求提案的值;还用于在收到所述过渡集群成员组中其它成员对所述请求的响应后,执行所述一致性算法中作为提案人角色的部分;
所述第二单元,用于在所属服务器为所述过渡集群成员组中除了所述发送所述至少一次请求的成员的其它成员时,在接收到所述过渡集群成员组中作为提案人角色的成员发送的至少一次请求后,执行所述一致性算法中作为接受者角色的部分。
上述成员组变更装置还具有以下特点:
所述第一单元,还用于在所属服务器为所述初始集群成员组中作为提案人角色的成员时,在所述初始集群成员组的多数派通过所述第一请求提案后,向所述过渡集群成员组中所有成员发送携带版本号的提交通知请求;
所述第二单元,还用于在所属服务器为所述过渡集群成员组中作为学习者的成员时,判断此通知请求中的版本号大于其保存的当前版本号后,学习所述第一请求提案后更新其保存的当前版本号为通知请求中的版本号并更新保存的提案的值为所述第一请求提案的值。
上述成员组变更装置还具有以下特点:
所述第一单元,还用于在所属服务器为所述过渡集群成员组中作为提案人角色的成员时,在所述过渡集群成员组的多数派通过所述第二请求提案后,向所述过渡集群成员组中所有成员发送携带版本号的提交通知请求;
所述第二单元,还用于在所属服务器为所述过渡集群成员组中作为学习者的成员时,判断此通知请求中的版本号大于其保存的当前版本号后,学习所述第二请求提案后更新其保存的当前版本号为通知请求中的版本号并更新保存的提案的值为所述第二请求提案的值。
本发明可以在无需中止集群服务的情况下一次性完成一个成员组中多个成员的替换,可有效提高集群服务的智能性和有效性。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是实施例中成员组变更方法的流程图;
图2是实施例中成员组变更装置的结构图。
图3是具体实施例中成员组变更的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
图1是实施例中成员组变更方法的流程图;此方法包括:
步骤101,接收针对初始集群成员组的变更请求,根据初始集群成员组和变更请求确定目标集群成员组,根据初始集群成员组和目标集群成员组设置过渡集群成员组,过渡集群成员组中包括第一组和第二组,第一组包括初始集群成员组中的所有成员,第二组包括目标集群成员组中的所有成员;
步骤102,初始集群成员组执行一致性算法,将初始集群成员组更新为过渡集群成员组;
步骤103,过渡集群成员组执行所述一致性算法,将过渡集群成员组更新为目标集群成员组。
其中,步骤102包括:初始集群成员组中接收到变更请求的成员设置第一请求提案,以预设递增规则设置此第一请求提案的编号,设置第一请求提案的值为过渡集群成员组,设置执行此次一致性算法的版本号,向初始集群成员组中所有作为接受者的成员发送至少一次请求,至少一次请求中携带版本号、第一请求提案的编号和第一请求提案的值;初始集群成员组执行一致性算法直至初始集群成员组的多数派通过第一请求提案。其中,预设递增规则包括:提案的编号为成员标识和时间戳的组合,时间戳随时间推移而增加。
与上述同理,步骤103包括:过渡集群成员组中的一成员设置第二请求提案,以预设递增规则设置此第二请求提案的编号,设置第二请求提案的值为目标集群成员组,设置执行此次一致性算法的版本号,;向过渡集群成员组中所有作为接受者的成员发送至少一次请求,至少一次请求中携带版本号、第二请求提案的编号和第二请求提案的值;过渡集群成员组执行一致性算法直至过渡集群成员组的多数派通过第二请求提案。
在无法一次通过提案的情况下,需要多次发送更新提案的编号并多次发送提案。具体的,步骤102中还包括:初始集群成员组执行一致性算法后,初始集群成员组中接收变更请求的成员判断初始集群成员组的多数派是否通过第一请求提案,如果否,以预设递增规则设置第一请求提案的编号,将更新编号的第一请求提案发送至初始集群中所有成员,依照此方式执行,直至初始集群成员组的多数派通过第一请求提案。步骤103中还包括:过渡集群成员组执行一致性算法后,过渡集群成员组的第一成员判断过渡集群成员组的多数派是否通过第二请求提案,如果否,以预设递增规则设置第二请求提案的编号,将更新编号的第二请求提案发送至初始集群中所有成员,依照此方式执行,直至初始集群成员组的多数派通过第二请求提案。
本方法中还包括学习的过程。步骤2中还包括:初始集群成员组执行一致性算法直至初始集群成员组的多数派通过第一请求提案后,接收到变更请求的成员向过渡集群成员组中所有成员发送携带版本号的通知请求即为commit请求,过渡集群成员组中作为学习者的成员判断此通知请求中的版本号大于其保存的当前版本号后,学习第一请求提案后更新其保存的当前版本号为通知请求中的版本号并更新保存的提案的值为第一请求提案的值,至此,过渡集群成员组成功被初始集群成员组选定。步骤103中还包括:过渡集群成员组执行一致性算法直至过渡集群成员组的多数派通过第二请求提案后,设置第二请求提案的成员向过渡集群成员组中所有成员发送携带版本号的通知请求即为commit请求,过渡集群成员组中作为学习者的成员判断此通知请求中的版本号大于其保存的当前版本号后,学习第二请求提案后更新其保存的当前版本号为通知请求中的版本号并更新保存的提案的值为第二请求提案的值,至此,目标集群成员组成功被过渡集群成员组成功选定。
本方法中,变更请求中包括变更类型和变更类型对应的成员,变更类型包括增加和/或删除。
本方法中的一致性算法典型的为PAXOS算法。
图2是实施例中成员组变更装置的结构图,此装置应用于服务器中,包括:
变更请求接收模块,用于在所属服务器是初始集群成员组的成员时,接收针对初始集群成员组的变更请求;
确定模块,用于根据初始集群成员组和变更请求确定目标集群成员组,根据初始集群成员组和目标集群成员组设置过渡集群成员组,过渡集群成员组中包括第一组和第二组,第一组包括初始集群成员组中的所有成员,第二组包括目标集群成员组中的所有成员;
执行模块,用于执行一致性算法直至初始集群成员组更新为过渡集群成员组;还用于在所属服务器是过渡集群成员组的成员时,再次执行一致性算法直至过渡集群成员组更新为目标集群成员组。
执行模块包括第一单元和第二单元。
在服务器为初始集群成员组中接收到变更请求的成员时,此服务器的第一单元用于在所属服务器为初始集群成员组中接收到变更请求的成员时,设置第一请求提案,以预设递增规则设置此第一请求提案的编号,设置第一请求提案的值为过渡集群成员组,设置执行此次一致性算法的版本号,向初始集群成员组中所有作为接受者的成员发送至少一次请求,至少一次请求中携带版本号、第一请求提案的编号和第一请求提案的值;还用于在收到初始集群成员组中其它成员对请求的响应后,执行一致性算法中作为提案人角色的部分;
在服务器为初始集群成员组中接收到变更请求的成员时,此服务器的第二单元用于在所属服务器为初始集群成员组中除了接收到变更请求的成员的其它成员时,在接收到初始集群成员组中作为提案人角色的成员发送的至少一次请求后,执行一致性算法中作为接受者角色的部分。
在无法一次通过提案的情况下,需要多次发送更新提案的编号并多次发送提案。第一单元用于在所属服务器为过渡集群成员组中作为提案人角色的成员时,设置第二请求提案,以预设递增规则设置此第二请求提案的编号,设置第二请求提案的值为目标集群成员组,设置执行此次一致性算法的版本号,向过渡集群成员组中所有作为接受者的成员发送至少一次请求,至少一次请求中携带版本号、第二请求提案的编号和第二请求提案的值;还用于在收到过渡集群成员组中其它成员对请求的响应后,执行一致性算法中作为提案人角色的部分。第二单元用于在所属服务器为过渡集群成员组中除了发送至少一次请求的成员的其它成员时,在接收到过渡集群成员组中作为提案人角色的成员发送的至少一次请求后,执行一致性算法中作为接受者角色的部分。
对应于本方法中学习的过程。所属服务器为初始集群成员组中作为提案人角色的成员时,第一单元还用于在所属服务器为初始集群成员组中作为提案人角色的成员时,在初始集群成员组的多数派通过第一请求提案后,向过渡集群成员组中所有成员发送携带版本号的commit请求。第二单元还用于在所属服务器为过渡集群成员组中作为学习者的成员时,判断此通知请求中的版本号大于其保存的当前版本号后,学习第一请求提案后更新其保存的当前版本号为通知请求中的版本号并更新保存的提案的值为第一请求提案的值。
对应于本方法中学习的过程。所属服务器为过渡集群成员组中作为提案人角色的成员。第一单元还用于在所属服务器为过渡集群成员组中作为提案人角色的成员时,在过渡集群成员组的多数派通过第二请求提案后,向过渡集群成员组中所有成员发送携带版本号的commit请求。第二单元还用于在所属服务器为过渡集群成员组中作为学习者的成员时,判断此通知请求中的版本号大于其保存的当前版本号后,学习第二请求提案后更新其保存的当前版本号为通知请求中的版本号并更新保存的提案的值为第二请求提案的值。
具体实施例
图3是具体实施例中成员组变更的示意图。如图3所示,群成员组C_old中包括成员a,b,c。成员a,b,c中均保存有此集群中的成员列表。成员a接收到变更请求,此变更请求中包括两部分:
第一部分,变更类型为增加,变更目标为d,e。
第二部分,变更类型为删除,变更目标为a,b。
集群成员组C_old变更后的目标集群为C_new,C_new中包括成员c,d,e。
设置过渡集群成员组C_middle为{{a,b,c},{c,d,e}}。
设置成员a,b,c,d,e对应的标识分别为:01,02,03,04,05。
具体执行部分包括以下内容:
成员a响应过的最后一个请求提案的编号为1400000010_01,成员b响应过的最后一个请求提案的编号为1400000009_02,成员c应过的最后一个请求提案的编号1400000008_03。提案的编号包括以秒为单位从一固定历史时间到当前时间的秒数和成员标识。成员进行编号比较时,时间戳不同时,比较时间戳的大小作编号比较结果,在时间戳相同时,比较标识的大小作为编号比较结果。
成员a作为proposer运行Paxos算法,确定第一请求提案,确定此请求提案的编号为1400000011_01,确定此请求提案的值为C_middle。成员a确定执行此次Paxos算法的版本号例如为T。成员a向C_old中所有成员发送prepare请求,此prepare请求中携带版本号T和第一请求提案的编号。
C_old中作为acceptor的所有成员收到此prepare请求,例如所有成员均作为acceptor。成员a收到此prepare请求后,判断此prepare请求中携带的编号为1400000011_01,大于此成员响应过的最后一个请求提案的编号1400000010_01,并且判断prepare请求中的版本号大于其保存的版本号,则通过此提案,返回对prepare请求的响应,并将响应过的最后一个请求提案的编号更新为1400000011_01,将保存的版本号更新为T。成员b收到此prepare请求后,判断此prepare请求中携带的编号1400000011_01大于此成员响应过的最后一个请求提案的编号1400000009_02,并且判断prepare请求中的版本号大于其保存的版本号,则通过此提案,返回对prepare请求的响应,并将响应过的最后一个请求提案的编号更新为1400000011_01,将保存的版本号更新为T。成员c收到此prepare请求后,判断此prepare请求中携带的编号为1400000011_01大于此成员响应过的最后一个请求提案的编号140000008_03,并且判断prepare请求中的版本号大于其保存的版本号,则通过此提案,返回对prepare请求的响应,并将响应过的最后一个请求提案的编号更新为1400000011_01。
成员a收到C_old中多数派的对prepare请求的响应后,向作为acceptor的成员发送accepte请求,在此accepte请求中携带版本号T、第一请求提案的编号1400000011_01和第一请求提案的值C_middle。C_old中作为acceptor的成员收到此accepte请求后,判断当前accepte请求的版本号大于其保存的版本号,而且还未对编号大于1400000011_01的prepare请求作出响应,就对此accepte请求作出响应,并更新其保存的版本号为accepte请求中的版本号。
成员a收到C_old中多数派的对accepte请求的响应后,确定C_old中多数派通过此第一请求提案。
成员a向C_middle中所有成员发送commit请求,C_middle中作为学习者的成员学习第一请求提案后,至此C_middle成功被C_old选定。
使用与以上同理的方式执行C_middle至C_new的更新过程。
上述第一次Paxos算法运行成功后,仍然选用成员a作为第一成员运行Paxos算法。成员a作为proposer第二次运行Paxos算法,确定第二请求提案,确定此请求提案的编号为1400000012_01,确定此请求提案的值为C_new。成员a确定执行此次Paxos算法的版本号为T+1。成员a向C_middle中所有成员发送prepare请求,此prepare请求中携带版本号T+1和第二请求提案的编号。
C_old中作为acceptor的所有成员收到此prepare请求,例如所有成员均作为acceptor。成员a收到此prepare请求后,判断此prepare请求中携带的编号为1400000012_01,大于此成员响应过的最后一个请求提案的编号1400000011_01,并且判断prepare请求中的版本号大于其保存的版本号,则通过此提案,返回对prepare请求的响应,并将响应过的最后一个请求提案的编号更新为1400000012_01,将保存的版本号更新为T+1。成员b收到此prepare请求后,判断此prepare请求中携带的编号1400000012_01大于此成员响应过的最后一个请求提案的编号1400000011_01,并且判断prepare请求中的版本号大于其保存的版本号,则通过此提案,返回对prepare请求的响应,并将响应过的最后一个请求提案的编号更新为1400000012_01,将保存的版本号更新为T+1。成员c收到此prepare请求后,判断此prepare请求中携带的编号为1400000012_01大于此成员响应过的最后一个请求提案的编号1400000011_01,并且判断prepare请求中的版本号大于其保存的版本号,则通过此提案,返回对prepare请求的响应,并将响应过的最后一个请求提案的编号更新为1400000012_01。
成员a收到C_middle中多数派(C_middle的多数派为C_old多数派和C_new的多数派)的对prepare请求的响应后,向作为acceptor的成员发送accepte请求,在此accepte请求中携带版本号T+1、第二请求提案的编号1400000012_01和第二请求提案的值C_new。C_middle中作为acceptor的成员收到此accepte请求后,判断当前accepte请求中的版本号大于其保存的版本号,而且还未对编号大于1400000012_01的prepare请求作出响应,就对此accepte请求作出响应,并更新其保存的版本号为accepte请求中的版本号。
成员a收到C_middle中多数派的对accepte请求的响应后,确定C_middle中多数派通过此第二请求提案。
成员a向C_middle中所有成员发送commit请求,C_new中作为学习者的成员学习第二请求提案后,至此C_new成功被C_middle选定。
在整个变更的过程中任意一步都可以中断,都不影响集群提供正常的服务,由于不要求C-old和C-new有交集,所有可以同时变更多个成员,而且算法的一致性由Paxos本身来保证。
本发明可以在无需中止集群服务的情况下一次性完成一个成员组中多个成员的替换,可有效提高集群服务的智能性和有效性。
上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本发明的保护范围之内。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现,相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的物品或者设备中还存在另外的相同要素。
以上实施例仅用以说明本发明的技术方案而非限制,仅仅参照较佳实施例对本发明进行了详细说明。本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的权利要求范围当中。
Claims (9)
1.一种成员组变更方法,其特征在于,包括:
步骤1,接收针对初始集群成员组的变更请求,根据所述初始集群成员组和所述变更请求确定目标集群成员组,根据所述初始集群成员组和所述目标集群成员组设置过渡集群成员组,所述过渡集群成员组中包括第一组和第二组,所述第一组包括所述初始集群成员组中的所有成员,所述第二组包括所述目标集群成员组中的所有成员;
步骤2,所述初始集群成员组执行一致性算法,将所述初始集群成员组更新为所述过渡集群成员组;
步骤3,所述过渡集群成员组执行所述一致性算法,将所述过渡集群成员组更新为所述目标集群成员组;
所述步骤2包括:所述初始集群成员组中接收到变更请求的成员设置第一请求提案,设置所述第一请求提案的值为所述过渡集群成员组,所述初始集群成员组执行所述一致性算法直至所述初始集群成员组的多数派通过所述第一请求提案;所述初始集群成员组执行所述一致性算法直至所述初始集群成员组的多数派通过所述第一请求提案后,接收到变更请求的成员向所述过渡集群成员组中所有成员发送携带版本号的提交通知请求,所述过渡集群成员组中作为学习者的成员判断此通知请求中的版本号大于其保存的当前版本号后,学习所述第一请求提案后更新其保存的当前版本号为通知请求中的版本号并更新保存的提案的值为所述第一请求提案的值,至此,所述过渡集群成员组成功被所述初始集群成员组选定;
所述步骤3包括:所述过渡集群成员组中的一成员设置第二请求提案,设置所述第二请求提案的值为目标集群成员组,所述过渡集群成员组执行所述一致性算法直至所述过渡集群成员组的多数派通过所述第二请求提案;所述初始集群成员组执行所述一致性算法直至所述初始集群成员组的多数派通过所述第一请求提案后,接收到变更请求的成员向所述过渡集群成员组中所有成员发送携带版本号的提交通知请求,所述过渡集群成员组中作为学习者的成员判断此通知请求中的版本号大于其保存的当前版本号后,学习所述第一请求提案后更新其保存的当前版本号为通知请求中的版本号并更新保 存的提案的值为所述第一请求提案的值,至此,所述过渡集群成员组成功被所述初始集群成员组选定。
2.如权利要求1所述的成员组变更方法,其特征在于,
所述步骤2包括:以预设递增规则设置此第一请求提案的编号,设置执行此次一致性算法的版本号,向所述初始集群成员组中所有作为接受者的成员发送至少一次请求,所述至少一次请求中携带所述版本号、所述第一请求提案的编号和所述第一请求提案的值。
3.如权利要求1所述的成员组变更方法,其特征在于,
所述步骤3包括:以预设递增规则设置此第二请求提案的编号,设置执行此次一致性算法的版本号,向所述过渡集群成员组中所有作为接受者的成员发送至少一次请求,所述至少一次请求中携带所述版本号、所述第二请求提案的编号和所述第二请求提案的值。
4.如权利要求2所述的成员组变更方法,其特征在于,
所述步骤2中还包括:所述初始集群成员组执行所述一致性算法后,所述初始集群成员组中接收变更请求的成员判断所述初始集群成员组的多数派是否通过所述第一请求提案,如果否,以预设递增规则设置所述第一请求提案的编号,将更新编号的第一请求提案发送至所述初始集群中所有成员,依照此方式执行,直至所述初始集群成员组的多数派通过所述第一请求提案。
5.如权利要求3所述的成员组变更方法,其特征在于,
所述步骤3中还包括:所述过渡集群成员组执行所述一致性算法后,所述过渡集群成员组中发送请求的成员判断所述过渡集群成员组的多数派是否通过所述第二请求提案,如果否,以预设递增规则设置所述第二请求提案的编号,将更新编号的第二请求提案发送至所述初始集群中所有成员,依照此方式执行,直至所述初始集群成员组的多数派通过所述第二请求提案。
6.如权利要求1所述的成员组变更方法,其特征在于,
所述变更请求中包括变更类型和变更类型对应的成员,所述变更类型包括增加和/或删除。
7.一种成员组变更装置,其特征在于,应用于服务器中,包括:
变更请求接收模块,用于在所属服务器是初始集群成员组的成员时,接收针对初始集群成员组的变更请求;
确定模块,用于根据所述初始集群成员组和所述变更请求确定目标集群成员组,根据所述初始集群成员组和所述目标集群成员组设置过渡集群成员组,所述过渡集群成员组中包括第一组和第二组,所述第一组包括所述初始集群成员组中的所有成员,所述第二组包括所述目标集群成员组中的所有成员;
执行模块,用于执行一致性算法直至所述初始集群成员组更新为所述过渡集群成员组;还用于在所属服务器是所述过渡集群成员组的成员时,再次执行所述一致性算法直至所述过渡集群成员组更新为所述目标集群成员组;
所述执行模块包括第一单元和第二单元;
所述第一单元,用于在所属服务器为所述初始集群成员组中接收到变更请求的成员时,设置第一请求提案,设置所述第一请求提案的值为所述过渡集群成员组,在收到所述初始集群成员组中其它成员对所述请求的响应后,执行所述一致性算法中作为提案人角色的部分,还用于在所属服务器为所述初始集群成员组中作为提案人角色的成员时,在所述初始集群成员组的多数派通过所述第一请求提案后,向所述过渡集群成员组中所有成员发送携带版本号的提交通知请求;
所述第二单元,用于在所属服务器为所述初始集群成员组中除了接收到变更请求的成员的其它成员时,在接收到所述初始集群成员组中作为提案人角色的成员发送的至少一次请求后,执行所述一致性算法中作为接受者角色的部分;还用于在所属服务器为所述过渡集群成员组中作为学习者的成员时,判断此通知请求中的版本号大于其保存的当前版本号后,学习所述第一请求提案后更新其保存的当前版本号为通知请求中的版本号并更新保存的提案的值为所述第一请求提案的值;
并且,
所述第一单元,还用于在所属服务器为所述过渡集群成员组中作为提案 人角色的成员时,设置第二请求提案,设置所述第二请求提案的值为所述目标集群成员组,还用于在收到所述过渡集群成员组中其它成员对所述请求的响应后,执行所述一致性算法中作为提案人角色的部分;还用于在所属服务器为所述过渡集群成员组中作为提案人角色的成员时,在所述过渡集群成员组的多数派通过所述第二请求提案后,向所述过渡集群成员组中所有成员发送携带版本号的提交通知请求;
所述第二单元,还用于在所属服务器为所述过渡集群成员组中除了所述发送所述至少一次请求的成员的其它成员时,在接收到所述过渡集群成员组中作为提案人角色的成员发送的至少一次请求后,执行所述一致性算法中作为接受者角色的部分;还用于在所属服务器为所述过渡集群成员组中作为学习者的成员时,判断此通知请求中的版本号大于其保存的当前版本号后,学习所述第二请求提案后更新其保存的当前版本号为通知请求中的版本号并更新保存的提案的值为所述第二请求提案的值。
8.如权利要求7所述的成员组变更装置,其特征在于,
所述第一单元,还用于以预设递增规则设置此第一请求提案的编号,设置执行此次一致性算法的版本号,向所述初始集群成员组中所有作为接受者的成员发送至少一次请求,所述至少一次请求中携带所述版本号、所述第一请求提案的编号和所述第一请求提案的值。
9.如权利要求7所述的成员组变更装置,其特征在于,
所述执行模块包括第一单元和第二单元;
所述第一单元,还用于以预设递增规则设置此第二请求提案的编号设置执行此次一致性算法的版本号,向所述过渡集群成员组中所有作为接受者的成员发送至少一次请求,所述至少一次请求中携带所述版本号、所述第二请求提案的编号和所述第二请求提案的值。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710161757.2A CN107707595B (zh) | 2017-03-17 | 2017-03-17 | 一种成员组变更方法及装置 |
PCT/CN2018/078989 WO2018166474A1 (zh) | 2017-03-17 | 2018-03-14 | 一种成员组变更方法、装置、介质及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710161757.2A CN107707595B (zh) | 2017-03-17 | 2017-03-17 | 一种成员组变更方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107707595A CN107707595A (zh) | 2018-02-16 |
CN107707595B true CN107707595B (zh) | 2018-06-15 |
Family
ID=61169548
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710161757.2A Active CN107707595B (zh) | 2017-03-17 | 2017-03-17 | 一种成员组变更方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN107707595B (zh) |
WO (1) | WO2018166474A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107707595B (zh) * | 2017-03-17 | 2018-06-15 | 贵州白山云科技有限公司 | 一种成员组变更方法及装置 |
CN111930840B (zh) * | 2020-08-06 | 2024-09-13 | 平安科技(深圳)有限公司 | 基于Paxos算法的共识机制优化方法、系统以及区块链网络 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5491835A (en) * | 1994-02-18 | 1996-02-13 | Motorola, Inc. | Method for maintaining audience continuity of a communication group call |
CN1794834A (zh) * | 2005-09-26 | 2006-06-28 | 华为技术有限公司 | 一种创建群组和添加群组成员的方法 |
CN101072390A (zh) * | 2006-05-12 | 2007-11-14 | 中兴通讯股份有限公司 | 一种数字集群系统的动态群组管理方法 |
CN101090531A (zh) * | 2007-08-01 | 2007-12-19 | 中兴通讯股份有限公司 | 一种集群通信系统中网络侧实时触发群组信息同步的方法 |
CN101272341A (zh) * | 2008-05-27 | 2008-09-24 | 杭州华三通信技术有限公司 | 分布式架构下实现硬件组播的方法、装置、分布式系统和路由设备 |
CN101540957A (zh) * | 2008-03-19 | 2009-09-23 | 中兴通讯股份有限公司 | 一种具有权限的集群终端及其实现群组成员管理的方法 |
CN101674662A (zh) * | 2008-09-11 | 2010-03-17 | 中兴通讯股份有限公司 | 数字集群系统中临时组的建立方法 |
CN102075456A (zh) * | 2011-02-25 | 2011-05-25 | 中国科学院计算技术研究所 | 分布式域管理系统中的群组建立及成员添加方法 |
CN102083008A (zh) * | 2009-11-27 | 2011-06-01 | 中兴通讯股份有限公司 | 一种集群终端自建组成员动态管理的方法和系统 |
CN102833692A (zh) * | 2011-06-15 | 2012-12-19 | 中兴通讯股份有限公司 | 数字集群系统中用户管理群组的方法及服务器 |
CN103916426A (zh) * | 2012-12-31 | 2014-07-09 | 北京新媒传信科技有限公司 | 一种paxos实例更新方法、设备及系统 |
CN104483828A (zh) * | 2014-12-04 | 2015-04-01 | 中国航空工业集团公司第六三一研究所 | 一种分布式容错计算机成员一致性保证方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7076645B2 (en) * | 2003-06-25 | 2006-07-11 | Nokia Inc. | Method of rebooting a multi-device cluster while maintaining cluster operation |
US20050289228A1 (en) * | 2004-06-25 | 2005-12-29 | Nokia Inc. | System and method for managing a change to a cluster configuration |
JP5571667B2 (ja) * | 2008-08-18 | 2014-08-13 | エフ5 ネットワークス、インコーポレイテッド | 可用性を維持しながらネットワークトラフィック管理装置をアップグレードする方法 |
CN102882927B (zh) * | 2012-08-29 | 2016-12-21 | 华南理工大学 | 一种云存储数据同步框架及其实现方法 |
CN104601622B (zh) * | 2013-10-31 | 2018-04-17 | 国际商业机器公司 | 一种部署集群的方法和系统 |
CN106302700B (zh) * | 2016-08-11 | 2019-09-24 | 浪潮(北京)电子信息产业有限公司 | 基于paxos算法的分布式系统一致性更新方法及系统 |
CN107707595B (zh) * | 2017-03-17 | 2018-06-15 | 贵州白山云科技有限公司 | 一种成员组变更方法及装置 |
-
2017
- 2017-03-17 CN CN201710161757.2A patent/CN107707595B/zh active Active
-
2018
- 2018-03-14 WO PCT/CN2018/078989 patent/WO2018166474A1/zh active Application Filing
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5491835A (en) * | 1994-02-18 | 1996-02-13 | Motorola, Inc. | Method for maintaining audience continuity of a communication group call |
CN1794834A (zh) * | 2005-09-26 | 2006-06-28 | 华为技术有限公司 | 一种创建群组和添加群组成员的方法 |
CN101072390A (zh) * | 2006-05-12 | 2007-11-14 | 中兴通讯股份有限公司 | 一种数字集群系统的动态群组管理方法 |
CN101090531A (zh) * | 2007-08-01 | 2007-12-19 | 中兴通讯股份有限公司 | 一种集群通信系统中网络侧实时触发群组信息同步的方法 |
CN101540957A (zh) * | 2008-03-19 | 2009-09-23 | 中兴通讯股份有限公司 | 一种具有权限的集群终端及其实现群组成员管理的方法 |
CN101272341A (zh) * | 2008-05-27 | 2008-09-24 | 杭州华三通信技术有限公司 | 分布式架构下实现硬件组播的方法、装置、分布式系统和路由设备 |
CN101674662A (zh) * | 2008-09-11 | 2010-03-17 | 中兴通讯股份有限公司 | 数字集群系统中临时组的建立方法 |
CN102083008A (zh) * | 2009-11-27 | 2011-06-01 | 中兴通讯股份有限公司 | 一种集群终端自建组成员动态管理的方法和系统 |
CN102075456A (zh) * | 2011-02-25 | 2011-05-25 | 中国科学院计算技术研究所 | 分布式域管理系统中的群组建立及成员添加方法 |
CN102833692A (zh) * | 2011-06-15 | 2012-12-19 | 中兴通讯股份有限公司 | 数字集群系统中用户管理群组的方法及服务器 |
CN103916426A (zh) * | 2012-12-31 | 2014-07-09 | 北京新媒传信科技有限公司 | 一种paxos实例更新方法、设备及系统 |
CN104483828A (zh) * | 2014-12-04 | 2015-04-01 | 中国航空工业集团公司第六三一研究所 | 一种分布式容错计算机成员一致性保证方法 |
Non-Patent Citations (1)
Title |
---|
基于消息传递的paxos算法研究;许子灿,吴荣泉;《计算机工程》;20111130;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN107707595A (zh) | 2018-02-16 |
WO2018166474A1 (zh) | 2018-09-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3340055A1 (en) | Communicating state information in distributed operating systems | |
US9588851B2 (en) | Locality based quorums | |
EP3340054A1 (en) | Maintaining coherency in distributed operating systems for network devices | |
US20220224610A1 (en) | Heartbeat information sending method and apparatus, and heartbeat sending node | |
AU2015279787B2 (en) | Multi-database log with multi-item transaction support | |
CN113590576A (zh) | 数据库参数调整方法、装置、存储介质以及电子设备 | |
CN112148798A (zh) | 应用于分布式系统的数据处理方法及装置 | |
CN109542851A (zh) | 文件更新方法、装置及系统 | |
CN107707595B (zh) | 一种成员组变更方法及装置 | |
US20220121627A1 (en) | Systems, methods, and media for implementing conflict-free replicated data types in in-memory data structures | |
CN106878083B (zh) | 一种节点选举方法及装置 | |
JP4459999B2 (ja) | 投票を活用した無停止サービスシステム及びそのシステムにおける情報更新及び提供方法 | |
CN113630455A (zh) | 一种适用于物联网的Raft共识方法 | |
CN109525678A (zh) | 区块链网络系统以及相应的节点设备发现方法 | |
CN104468722A (zh) | 一种航管训练系统中训练数据分类存储的方法 | |
CN107147708A (zh) | 一种对等网络冗余数据平衡方法和系统 | |
US8005787B2 (en) | Data replication method | |
EP4237962B1 (en) | Checking state consistency in a log replication configuration | |
CN105357222B (zh) | 一种分布式Session管理中间件 | |
Du et al. | Leader confirmation replication for millisecond consensus in private chains | |
JP2002014861A (ja) | ファイルレプリケーションシステム、ファイルレプリケーション制御方法及び記憶媒体 | |
Mocanu et al. | Bringing paxos consensus in multi-agent systems | |
CN118227579A (zh) | 一种跨域集群数据的处理方法、装置、设备及介质 | |
CN116226097B (zh) | 一种区块链数据在线迁移方法 | |
PETRESCU | Leader Election in a Cluster using Zookeeper |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100015 5 floor, block E, 201 IT tower, electronic city, 10 Jiuxianqiao Road, Chaoyang District, Beijing. Patentee after: Guizhou Baishan cloud Polytron Technologies Inc Address before: 100015 5 floor, block E, 201 IT tower, electronic city, 10 Jiuxianqiao Road, Chaoyang District, Beijing. Patentee before: Guizhou white cloud Technology Co., Ltd. |