一种分布式仲裁集群中动态改变集群规模的方法及装置与流程

文档序号:12729943阅读:274来源:国知局
一种分布式仲裁集群中动态改变集群规模的方法及装置与流程

本申请涉及计算机技术领域,特别涉及一种分布式仲裁集群中动态改变集群规模的方法及装置。



背景技术:

在多处理系统中,多个设备或模块可能同时申请对总线的使用权,为避免产生总线冲突,需由总线仲裁机构合理地控制和管理系统中需要占用总线的申请者,在多个申请者同时提出总线请求时,以一定的仲裁方法判断应获得对总线使用权的申请者。仲裁方法可分为集中式仲裁和分布式仲裁。集中式仲裁利用单个仲裁器分配多个处理机的请求。在分布式仲裁中,每个仲裁节点都有自己的仲裁器。仲裁节点可以简称为节点。

分布式仲裁所在的系统可以称为分布式系统,分布式系统包含若干个节点,这若干个节点形成仲裁集群。仲裁集群可以整合资源,作为一个整体对外提供服务。仲裁集群中最多只允许有一个主节点。目前,有多种仲裁算法选取主节点,例如Fast Leader选举算法、Raft选举算法等。

在分布式系统运行过程中,用户可能需要动态改变仲裁集群的规模,即加入节点或删除节点。目前,分布式系统中的仲裁集群一般不支持规模的变更;或者限制性的支持规模变更;或者,在规模变更过程中出现“双主”或者“多主”或者“无主”的问题,其中,“双主”是指两个主节点,“多主”是指两个以上主节点,“无主”是指没有主节点。



技术实现要素:

本申请实施例提供一种分布式仲裁集群中动态改变集群规模的方法及装置,用以解决在动态变更分布式仲裁集群规模的过程中出现双主、多主或无主的问题。

本申请实施例提供的具体技术方案如下:

第一方面,提供一种分布式仲裁集群中动态改变集群规模的方法,所述分布式仲裁集群中包括主节点,通过在集群中所有节点同意变更操作之后,判断是否能够维持自身主节点的身份,其中,维持主节点的条件为包括自身在内的一半节点维持主从节点之间的信号连接,主节点在确定能够维持主节点的身份之后,再固化改变集群规模的操作。这样能够保证在改变集群规模的过程中保持主节点角色不变,且独立设置维持主的条件,与升主条件分离,增强了系统的可用性,且保证在系统扩容过程中不会失主。

在一个可能的设计中,所述主节点接收改变集群规模的指令,确定所述分布式仲裁集群在改变集群规模后包括的M个节点,M为正整数,所述M个节点中包括所述主节点和(M-1)个从节点,所述主节点将所述指令转发至(M-1)个从节点,并接收所述(M-1)个从节点返回的确认响应,所述确认响应用于表征同意所述改变集群规模,若在一个心跳周期内,所述主节点接收到L个从节点发送的心跳信息,则执行所述改变集群规模的操作,L为正整数。这样,能够实现单节点扩容、多节点扩容和缩容等各种不同的应用场景,在各个改变集群规模的应用场景中均不会出现无主或多主的情况。

在一个可能的设计中,所述主节点接收改变集群规模的指令,可以通过以下方式实现:所述主节点接收增加第一节点的指令,或者,所述主节点接收删除第二节点的指令,其中,所述第二节点为与所述主节点不同的节点,所述分布式仲裁集群中不包括所述第一节点、且包括所述第二节点。

在一个可能的设计中,任一节点包含权限属性,所述权限属性用于表征节点是否具有被选举权限,所述权限属性允许动态调整,其中,在执行所述改变集群规模的操作之前,所述第一节点的权限属性为不具有被选举权限。避免在增加第一节点后出现无主或多主的情况。

在一个可能的设计中,在所述主节点接收删除第二节点的指令之前,所述第二节点与所述M个节点的通信连接状态为断开;或者,在所述主节点接收删除第二节点的指令之前,所述第二节点的权限属性设置为不具有被选举权限。避免删除的第二节点为主节点时,导致分布式系统出现故障。

在一个可能的设计中,所述主节点包含配置信息,所述配置信息包括升主条件和维持主条件;所述升主条件为:在所述分布式仲裁集群中包括N个节点时,K个节点同意所述主节点升主,其中,K、N均为正整数;所述维持主条件为:在所述分布式仲裁集群中包括N个节点时,在一个心跳周期内,所述主节点接收到P个从节点的心跳信息,其中,P、N均为正整数。将升主条件和维持主条件隔离开,增强系统的可用性,且保证扩容过程中不会失主。

第二方面,提供一种分布式仲裁集群中动态改变集群规模的装置,该装置具有实现上述第一方面和第一方面的任一种可能的设计中主节点行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。

在一个可能的设计中,该装置的结构包括收发器、存储器和处理器,其中,所述存储器用于存储一组程序,所述处理器用于调用所述存储器存储的程序以执行如上述第一方面和第一方面的任一种可能的设计中所述的方法。

第三方面,提供一种分布式仲裁集群,所述分布式仲裁集群中包括如上述第一方面和第一方面的任一种可能的设计中的主节点。

第四方面,提供了一种计算机存储介质,用于储存为上述方面所述的主节点所用的计算机软件指令,其包含用于执行上述方面所设计的程序。

附图说明

图1为本申请实施例中分布式仲裁集群的架构示意图;

图2为本申请实施例中分布式仲裁集群中动态改变集群规模的方法流程示意图;

图3为本申请实施例中单节点扩容的扩容流程示意图;

图4为本申请实施例中多节点扩容的扩容流程示意图;

图5为本申请实施例中缩容的流程示意图之一;

图6为本申请实施例中缩容的流程示意图之二;

图7为本申请实施例中分布式仲裁集群中动态改变集群规模的装置结构示意图之一;

图8为本申请实施例中分布式仲裁集群中动态改变集群规模的装置结构示意图之二。

具体实施方式

下面将结合附图,对本申请实施例进行详细描述。

本申请实施例可以应用于分布式系统,可以但不限于应用于分布式仲裁集群,以下描述中,分布式仲裁集群可以简称为集群。在分布式系统中,用户需要动态变更仲裁集群的规模,本申请实施例通过在集群中所有节点同意变更操作之后,判断是否能够维持自身主节点的身份,其中,维持主节点的条件为包括自身在内的一半节点维持主从节点之间的信号连接,主节点在确定能够维持主节点的身份之后,再固化改变集群规模的操作。这样能够保证在改变集群规模的过程中保持主节点角色不变,且独立设置维持主的条件,与升主条件分离,增强了系统的可用性,且保证在系统扩容过程中不会失主。

如图1所示,本申请实施例中分布式仲裁集群100的规模可以包括一个节点,或者包括两个或两个以上节点。分布式仲裁集群100中包括一个主节点101。如果集群规模大于等于两个节点,则分布式仲裁集群100中除了包括一个主节点101,还包括至少一个从节点102。分布式仲裁集群100可以整合资源,作为一个整体对外提供服务。分布式仲裁集群100中最多只允许有一个主节点101。

主节点101是各个节点选举获得的,例如,选取主节点的仲裁算法可以包括Fast Leader选举算法、Raft选举算法,本申请不作限定。

本申请实施例中,分布式仲裁集群100中的每个节点都配置一些本地属性,包括:节点的身份标识(即ID),该身份标识具有唯一性,即一个节点对应一个唯一的身份标识;通信地址,例如网际协议(Internet Protocol,IP)地址,用于与其他节点进行通信所依据的地址;权限属性,该权限属性用于表征节点是否具有被选举权限,具有被选举权限的节点在投票选主节点时能够投票给自身,而没有被选举权限的节点在投票选主节点时不能投票给自身,通过权限属性的设置可以控制节点是否能够升主,以及控制节点的身份从主节点降为从节点。权限属性允许动态调整。

主节点101还包含一些配置信息,配置信息包括升主条件和维持主条件;

其中,升主条件为:在分布式仲裁集群中包括N个节点时,K个节点同意主节点升主,其中,K、N均为正整数;

维持主条件为:在分布式仲裁集群中包括N个节点时,在一个心跳周期内,主节点接收到P个从节点的心跳信息,其中,P、N均为正整数。

可选的,每一个节点均包含上述配置信息。

总结来说,只有大于集群规模一半的节点(包括自己)投票,才能保证升主;在应用过程中,丢失不超过集群规模一半的节点(不包括自己)的心跳,才能维持主。

在实际应用中,主节点101与从节点102之间会通过发送心跳信息来确定主从关系,主节点101会按照心跳周期周期性地向所有从节点102发送心跳信息,从节点102也会周期性的向主节点101回复心跳信息,各个从节点102之间不发送心跳信息。主节点101通过心跳信息可以判断从节点102是否与自身保持主从关系。

基于图1所示的分布式仲裁集群的架构,如图2所示,本申请实施例提供的分布式仲裁集群中动态改变集群规模的方法流程如下所述。

步骤201:主节点接收改变集群规模的指令,确定分布式仲裁集群在改变集群规模后包括的M个节点。

M为正整数,M个节点中包括主节点和(M-1)个从节点。

主节点所接收到的改变集群规模的指令可能是扩容的指令,也可能是缩容的指令。扩容是指在原有集群中增加节点,缩容是指删除集群中的节点。该指令在一次执行过程中智能增加或删除一个节点。

例如,主节点接收增加第一节点的指令,或者,主节点接收删除第二节点的指令,其中,第二节点为与主节点不同的节点;

其中,分布式仲裁集群中不包括第一节点、且包括第二节点。即,第一节点是集群外的一个节点,第二节点是集群内的一个节点。

若指令为增加第一节点的指令,则M为扩容后的集群规模,若指令为删除第二节点的指令,则M为缩容后的集群规模,即删除第二节点后集群中的节点数量。

步骤202:主节点将指令转发至(M-1)个从节点,并接收(M-1)个从节点返回的确认响应。

其中,确认响应用于表征同意改变集群规模。

具体地,主节点在接收到指令时,需要请求各个节点是否同意改变集群规模的操作。在收到所有节点的确认响应后,确定所有节点均同意改变集群规模的操作。如果主节点在转发指令后,未接收到其中某个节点返回的确认响应,则说明该节点脱离集群,或者,不同意改变集群规模的操作,则主节点不进行后续操作,这样能够保证分布式系统的安全性。

步骤203:若在一个心跳周期内,主节点接收到L个从节点发送的心跳信息,则执行改变集群规模的操作,L为正整数。

在收到各个节点的确认响应后,主节点需要保证自身能够满足维持主的条件,在确定自身能够满足维持主的条件时,才执行改变集群规模的操作,例如,向磁盘写入增加节点的信息,或者,向磁盘写入删除节点的信息。

具体来说,如果指令为增加第一节点的指令,则在向磁盘写入增加第一节点之前,第一节点的权限属性为不具有被选举权限,在向磁盘写入增加第一节点之后,第一节点的权限属性为具有被选举权限。

这样,针对单节点扩容为两个节点,能够保证不会出现无主的问题。例如,若原集群中只包含一个节点,该节点为主节点。主节点接收增加第一节点的节点的指令,确认M=2,由于第一节点的权限属性为不具有被选举权限,因此,在第一节点加入集群后,主节点不变。否则,若第一节点没有设置权限属性,则第一节点在加入集群后,会出现无主的情况。

如果指令为删除第二节点的指令,则在主节点接收删除第二节点的指令之前,第二节点与M个节点的通信连接状态为断开,例如,第二节点与M个节点之间处于网络隔离状态,又例如,第二节点下电;

或者,在主节点接收删除第二节点的指令之前,第二节点的权限属性设置为不具有被选举权限。

这样,若第二节点在原集群中为主节点,则为了防止删除第二节点后,集群会出现无主的问题,先保证第二节点与M个节点的通信连接状态为断开,那么,M个节点会重新选取新的主节点,新的主节点接收删除第二节点的指令后,向(M-1)个从节点以及第二节点发送指令,在收到(M-1)个从节点返回的确认响应即可,而不需要接收第二节点的反馈信息。

下面结合具体的应用场景对本申请实施例作进一步详细说明。

场景一、单节点扩容为双节点。原节点用节点1表示,增加节点用节点2表示。

如图3所示,单节点扩容的扩容流程具体为:

步骤301、节点1接收增加节点2的扩容指令。

步骤302、节点1向节点2发送扩容请求。

在扩容加入请求中携带当前集群中的节点列表,以及节点列表中每个节点的本地属性。

步骤303、节点2向节点1返回确认响应。

确认响应表征同意加入集群。

步骤304、节点1判定满足维持主节点的条件,将集群中加入节点2的事务写入磁盘。

步骤305、节点1指示节点2将集群中加入节点2的事务写入磁盘。

其中,节点1的配置信息中包括升主条件和维持主条件,具体条件与上述实施例中描述一致,在此不再赘述。节点2在加入集群之前,权限属性被配置为不具有被选举权限,因此,在加入集群时才不会出现无主的情况。

场景二、多节点扩容。原集群有n个节点,用节点1……节点n表示,n≥2,n为正整数,节点1为主节点,增加节点用节点(n+1)表示。

如图4所示,多节点扩容的扩容流程具体为:

步骤401、节点1接收增加节点(n+1)的扩容指令。

步骤402、节点1向节点2~节点n和节点(n+1)发送扩容请求。

在向节点2~节点n发送的扩容请求中携带节点(n+1)的本地属性,在向节点(n+1)发送的扩容请求中携带当前集群的及节点列表以及节点1向节点2~节点n的本地属性。

步骤403、节点1接收节点2~节点n和节点(n+1)返回的确认响应。

步骤404、在一个心跳周期内,节点1判定满足维持主节点的条件,即判定能够接收到不小于个从节点发送的心跳信息,则将将集群中加入节点(n+1)的事务写入磁盘。

举例来说,如果n=4,扩容以后的集群规模为n+1=5,在一个心跳周期内,节点1能够接收到不小于2个从节点发送的心跳信息,就可以满足维持主节点的条件。

步骤405、节点1指示节点2~节点n和节点(n+1),将集群中加入节点(n+1)的事务写入磁盘。

其中,节点1的配置信息中包括升主条件和维持主条件,具体条件与上述实施例中描述一致,在此不再赘述。节点(n+1)在加入集群之前,权限属性被配置为不具有被选举权限,在步骤405之后,节点(n+1)的权限属性被配置为具有被选举权限。

基于维持主的条件,能够实现动态改变集群规模,且适用于各种可能的条件。例如,当扩容后的集群规模为偶数,且扩容后的集群被网络分裂为两个部分,两部分包括的节点数目相同,这种情况下,主节点仍能够维持主节点的身份。

场景三、缩容。原集群有n个节点,用节点1……节点n表示,n≥2,n为正整数,节点1为主节点,删除节点为节点n,节点n为从节点。

如图5所示,缩容的流程具体为:

步骤501、节点1接收删除节点n的缩容指令。

步骤502、节点1向节点2~节点n分别发送缩容请求。

在缩容请求中携带被删除的节点n的本地属性。

步骤503、节点1接收节点2~节点(n-1)分别返回的确认响应。

步骤504、在一个心跳周期内,节点1判定满足维持主节点的条件,即判定能够接收到不小于个从节点发送的心跳信息,则将将集群中删除节点n的事务写入磁盘。

步骤505、节点1指示节点2~节点(n-1),将集群中删除节点(n-1)的事务写入磁盘。

场景四、缩容。原集群有n个节点,用节点1……节点n表示,n≥2,n为正整数,节点2为原集群的主节点,删除节点为节点2。

在确定删除节点2时,将节点2与集群进行网络隔离或者下电,或者将节点2的权限属性配置为不具有被选举权限。

触发集群重新选主,例如重新选举节点1为主节点。

如图6所示,缩容的流程具体为:

步骤601、节点1接收删除节点2的缩容指令。

步骤602、节点1向节点3~节点n分别发送缩容请求。

在缩容请求中携带被删除的节点2的本地属性。

步骤603、节点1接收节点3~节点n分别返回的确认响应。

步骤604、在一个心跳周期内,节点1判定满足维持主节点的条件,即判定能够接收到不小于个从节点发送的心跳信息,则将将集群中删除节点2的事务写入磁盘。

步骤605、节点1指示节点3~节点n,将集群中删除节点2的事务写入磁盘。

基于与图2所示的方法的同一构思,如图7所示,本申请实施例还提供了一种分布式仲裁集群中动态改变集群规模的装置700,分布式仲裁集群中动态改变集群规模的装置700为分布式仲裁集群中的主节点,分布式仲裁集群中动态改变集群规模的装置700包括:

接收单元701,用于接收改变集群规模的指令,确定分布式仲裁集群在改变集群规模后包括的M个节点,M为正整数,M个节点中包括主节点和(M-1)个从节点;

发送单元702,用于将指令转发至(M-1)个从节点,并接收(M-1)个从节点返回的确认响应,确认响应用于表征同意改变集群规模;

处理单元703,用于若在一个心跳周期内,确定接收单元接收到L个从节点发送的心跳信息,则执行改变集群规模的操作,L为正整数。

可选的,接收单元701用于:

接收增加第一节点的指令,或者,接收删除第二节点的指令,第二节点为与主节点不同的节点;

其中,分布式仲裁集群中不包括第一节点、且包括第二节点。

可选的,任一节点包含权限属性,权限属性用于表征节点是否具有被选举权限,权限属性允许动态调整;

其中,在执行改变集群规模的操作之前,第一节点的权限属性为不具有被选举权限。

可选的,在主节点接收删除第二节点的指令之前,第二节点与M个节点的通信连接状态为断开;或者,

在主节点接收删除第二节点的指令之前,第二节点的权限属性设置为不具有被选举权限。

可选的,还包含配置信息,配置信息包括升主条件和维持主条件;

升主条件为:在分布式仲裁集群中包括N个节点时,K个节点同意主节点升主,其中,K、N均为正整数;

维持主条件为:在分布式仲裁集群中包括N个节点时,在一个心跳周期内,主节点接收到P个从节点的心跳信息,其中,P、N均为正整数。

基于与图2所示的方法的同一构思,如图8所示,本申请实施例还提供了一种分布式仲裁集群中动态改变集群规模的装置800,包括收发器801、处理器802、存储器803和总线804,收发器801、处理器802、存储器803均与总线804连接,其中,所述存储器803中存储一组程序,所述处理器802用于调用所述存储器803中存储的程序,执行以下操作:

通过收发器801接收改变集群规模的指令,确定分布式仲裁集群在改变集群规模后包括的M个节点,M为正整数,M个节点中包括主节点和(M-1)个从节点;

通过收发器801将指令转发至(M-1)个从节点,并接收(M-1)个从节点返回的确认响应,确认响应用于表征同意改变集群规模;

若在一个心跳周期内,确定接收单元接收到L个从节点发送的心跳信息,则执行改变集群规模的操作,L为正整数。

可选的,收发器801用于:

接收增加第一节点的指令,或者,接收删除第二节点的指令,第二节点为与主节点不同的节点;

其中,分布式仲裁集群中不包括第一节点、且包括第二节点。

可选的,任一节点包含权限属性,权限属性用于表征节点是否具有被选举权限,权限属性允许动态调整;

其中,在执行改变集群规模的操作之前,第一节点的权限属性为不具有被选举权限。

可选的,在主节点接收删除第二节点的指令之前,第二节点与M个节点的通信连接状态为断开;或者,

在主节点接收删除第二节点的指令之前,第二节点的权限属性设置为不具有被选举权限。

可选的,还包含配置信息,配置信息包括升主条件和维持主条件;

升主条件为:在分布式仲裁集群中包括N个节点时,K个节点同意主节点升主,其中,K、N均为正整数;

维持主条件为:在分布式仲裁集群中包括N个节点时,在一个心跳周期内,主节点接收到P个从节点的心跳信息,其中,P、N均为正整数。

处理器802可以是中央处理器(central processing unit,CPU),网络处理器(network processor,NP)或者CPU和NP的组合。

处理器802还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。

存储器803可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器803也可以包括非易失性存储器(non-volatile memory),例如快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);存储器803还可以包括上述种类的存储器的组合。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。

显然,本领域的技术人员可以对本申请实施例进行各种改动和变型而不脱离本申请实施例的精神和范围。这样,倘若本申请实施例的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1