一种分布式集群脑裂的处理方法、装置及设备与流程

文档序号:14635002发布日期:2018-06-08 19:36阅读:934来源:国知局
一种分布式集群脑裂的处理方法、装置及设备与流程

本发明涉及分布式集群领域,尤其涉及一种分布式集群脑裂的处理方法、装置及设备。



背景技术:

在高可用的分布式集群中,会存在互为备份的两个集群,两个集群在处于连接状态时,由其中的一个集群为用户提供服务,另一个集群作为备份集群,彼此通过心跳链路达成主备协商。但是,当两个集群出现心跳链路故障时,两个集群中只可以有一个为存活状态,即只可以由其中的一个集群为用户提供服务,若二者都为存活状态,同时为用户提供服务,而且二者无法进行数据的同步,就表示出现了脑裂的状况,这种情况会导致用户数据的混乱,具体的,可能会出现两个集群中存储的用户数据不一致的情况,因此就无法得知到底哪个集群存储的用户数据是有效的数据。

现有技术中,提供了很多解决脑裂的方法,但是很多方法都未解决如何无分歧的选择活动的集群为用户提供服务,并且,对于投票者和使用者投票不一致时,可能会导致投票结果不可用,并且当非投票的一方若出现故障时,也无法得知投票结果,从而导致脑裂的发生。



技术实现要素:

有鉴于此,本发明实施例公开了一种分布式集群脑裂的处理方法、装置及设备,解决了现有技术中,无法无分歧的选择活动的集群为用户提供服务,对于投票者和使用者投票不一致时,可能会导致投票结果不可用,并且当非投票的一方若出现故障时,也无法得知投票结果,从而导致脑裂发生的问题。

本发明实施例提供了一种分布式集群脑裂的处理方法,所述方法可以包括:

当分布式系统中相互连接的两个业务集群之间无法感知到对方的运行状态时,所述两个业务集群切换为只读模式;

判断所述两个业务集群与数据库之间的连接是否正常,并依据所述两个业务集群与所述数据库之间的连接是否正常的判断结果,从所述两个业务集群中确定至多一个具有发起投票权利的业务集群;

所述具有发起投票权利的业务集群向投票者集合发起投票;其中,所述投票者集合为依据预设的选择规则从使用终端和/或仲裁终端中确定的;所述使用终端为通过连接所述两个业务集群中任何一个进行网络操作的终端,所述仲裁终端为网络节点中除所述使用终端之外的服务器;

判断发起投票的业务集群是否在预设的时间内获得了预定的票数;

若所述发起投票的业务集群在预设的时间内获得了预定的票数,将所述发起投票的业务集群由只读模式切换为正常服务模式,将投票结果通知所述两个集群中未发起投票的业务集群。

可选的,依据所述两个业务集群与所述数据库之间的连接是否正常的判断结果,从所述两个业务集群中确定至多一个具有发起投票权利的业务集群,包括:

若所述两个业务集群与所述数据库的连接均正常,所述两个业务集群中每个业务集群分别检测其它业务集群是否发起了投票;

当所述两个业务集群中的第一业务集群未检测到其它业务集群发起了投票,所述第一业务集群具有发起投票的权利;

若所述两个业务集群中只有一个与所述数据库的连接正常,则与所述数据库连接正常的业务集群具有发起投票的权利;

若所述两个业务集群与所述数据库的连接均不正常,所述两个业务集群均不具有发起投票的权利。

可选的,所述具有发起投票权利的业务集群向投票者集合发起投票,包括:

发起投票的业务集群在所述数据库中写入投票记录和时间戳。

可选的,所述若所述两个业务集群与所述数据库的连接均正常,所述两个业务集群中每个业务集群分别检测其它业务集群是否发起了投票,包括:

所述两个业务集群中的第一业务集群在所述数据库中查询其它的投票记录和时间戳;

当所述其它业务集群的投票记录和时间戳存在且当前时间未超出从所述时间戳开始的预设时间时,所述其它业务集群发起了投票;

当所述其它业务集群的投票记录不存在,或者所述其它业务集群的投票记录和时间戳存在且当前时间超出从所述时间戳开始的预设时间时,所述其它业务集群没有发起投票。

可选的,依据预设的选择规则,从使用终端和/或仲裁终端确定所述投票者集合,包括:

判断所述使用终端中满足预设条件的使用终端的数量是否达到了预设的投票者集合的数量;

若满足预设条件的使用终端的数量超过了预设的投票者集合的数量,则从所述使用终端中确定投票者集合中的投票者;

若满足预设条件的使用终端的数量未超过预设的投票者集合的数量,从满足预设条件的仲裁终端中选择仲裁终端以和所述满足预设条件的使用终端一起确定所述投票者集合。

可选的,所述预设条件为:

使用终端在线时间超过预设的时间且状态稳定。

可选的,所述将投票结果通知所述两个集群中未发起投票的业务集群,包括:

将所述投票结果写入所述数据库;

所述未发起投票的业务集群从所述数据库中读取所述投票结果。

可选的,所述将投票结果通知所述两个集群中未发起投票的业务集群,包括:

将所述投票结果发送给连接到所述发起投票的业务集群的使用终端和/或仲裁终端;

当所述使用终端和/或仲裁终端与所述未发起投票的业务集群相连接时,将所述投票结果发送给所述未发起投票的业务集群。

可选的,所述判断发起投票的业务集群是否在预设的时间内获得了预定的票数后,还包括:

若发起投票的业务集群未在预设的时间内获得预定的票数,所述两个业务集群中未发起投票的业务集群发起投票并返回执行判断发起投票的业务集群是否在预设的时间内获得了预定的票数。

可选的,所述预定的票数为所述投票者集合中半数以上的票数。

可选的,发起投票的业务集群获得的票数是所述投票者投票的加权和。

可选的,所述投票者的权重根据其重要性而改变。

可选的,不具有发起投票权利的业务集群不发起投票。

本发明实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现所述分布式集群脑裂的处理方法。

本发明实施例提供了一种分布式集群脑裂的处理设备,所述分布式集群设备包括:存储器,其用于存储程序;处理器,其用于运行所述程序,当所述处理器运行所述程序时,所述处理器实现了本发明所述的分布式集群脑裂的处理方法。

本实施例中,当相互连接的两个业务集群之间无法感知到对方的运行状态时,将这两个业务集群切换为只读模式,根据两个业务集群与数据库之间是否能正常连接的结果确定至多一个具有发起投票权利的业务集群发起投票,而不具有发起投票权利的业务集群不发起投票,具有发起投票权利的业务集群向所述投票者集合发起投票,若在预设的时间内获得了预定的票数,将发起投票的业务集群由只读模式切换为正常服务模式,将投票结果通知这两个集群中未发起投票的业务集群,并停止未发起投票的业务集群的工作。这样,在保证数据可以进行读取的情况下,还完全的避免了脑裂的发生;并且,由于投票者集合中投票者是以使用终端为优先原则确定的,因此投票结果更加贴近实际的使用情况;除此之外,投票结果采用多路径传递的结果,即使未发起投票的一方部份链路出现故障也能获知投票结果。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其它的附图。

图1为本发明实施例提供的一种分布式集群脑裂的处理方法的流程示意图;

图2为本发明实施例提供的一种确定具有投票权利的业务集群的方法的流程示意图;

图3为本发明实施例提供的分布式集群中集群发起投票的示意图;

图4为本发明实施例提供的分布式集群中投票完成后告知另外一集群的示意图;

图5为本发明实施例提供的一种分布式集群脑裂的处理装置的结构示意图;

图6为本发明实施例提供的一种分布式集群脑裂的处理设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

参考图1,示出了本发明实施例一种分布式集群脑裂的处理方法的流程示意图,在本实施例中,所述方法可以包括:

S101:当分布式系统中相互连接的两个业务集群之间无法感知到对方的运行状态时,所述两个业务集群切换为只读模式;

本实施例中,在高可用的分布式集群中,可以存在相互连接的两个业务集群,其中,相互连接的多个业务集群之间可以通过某种机制感知对方的状态,例如可以通过心跳链路的方式感知对方是否处于正常运行状态,当出现心跳链路故障,即相互连接的两个业务集群之间无法感知到对方的运行状态,除此之外,当两个业务集群中任何一方出现宕机的情况,这两个业务集群也无法再感知到对方的运行状态。其中,进一步说,相互连接的两个业务集群还可以为互为备份的两个业务集群。

本实施例中,所述只读模式可以理解为使用终端只可以通过业务集群从数据库中读取数据,但是不能在数据库中写入数据,例如不能在数据库中进行数据的增加、修改等。在只读模式下,集群可以在代理入口处进行业务种类的过滤,将除数据读取业务之外的其它业务过滤掉,即只接受读取数据的业务,不接受除数据读取业务之外的其它业务;或者还可以在数据库写入服务中进行限制,即不执行数据库写入数据的业务。

S102:判断所述两个业务集群与数据库之间的连接是否正常,依据所述两个业务集群与所数据库之间的连接是否正常的判断结果,从所述两个业务集群中确定至多一个具有发起投票权利的业务集群;

本实施例中,需要说明的是,具有发起投票权利的业务集群可以发起投票,不具有发起投票权利的业务集群不可以发起投票。

本实施例中,判断相互连接的两个业务集群与数据库之间的连接是否正常,可以理解为判断这两个业务集群是否能够正常的读写数据库,具体的可以为,判断所述两个业务集群是否能够正常的读取数据库中的数据,并且判断所述两个业务集群是否能够正常的在数据库中写入数据。

本实施例中,为了保证不出现脑裂的情况,同一时间只可以确定至多一个具有发起投票权利的业务集群,参考图2,作为示例,S102具体可以包括:

S201:若所述两个业务集群与所述数据库的连接均正常,所述两个业务集群中每个业务集群分别检测其它业务集群是否发起了投票;

本实施例中,发起投票的业务集群需要在数据库中写入投票记录和时间戳,以使任何一个业务集群可以根据其它业务集群的投票记录和时间戳判断业务集群是否发起了投票,具体的S201可以包括:

所述两个业务集群中的第一业务集群在所述数据库中查询其它业务集群的投票记录和时间戳;

当所述其它业务集群的投票记录和时间戳存在且当前时间未超出从所述时间戳开始的预设时间时,所述其它业务集群发起了投票;

当所述其它业务集群的投票记录不存在,或者所述其它业务集群的投票记录和时间戳存在且当前时间超出从所述时间戳开始的预设时间时,所述其它业务集群没有发起投票。

距离说明:若相互连接的两个业务集群包括:集群A和集群B,则当第一集群为集群A时,其它集群为集群B;若第一集群为集群B时,其它集群为集群A。

其中,所述时间戳中包括业务集群的自身状态,自身运行状态可以包括:业务集群的健康状态即业务集群是否处于存活的状态、是否发起了投票等。因此,所述两个业务集群可以通过数据库得知其它的业务集群是否发起了投票。

S202:当所述两个业务集群中的第一业务集群未检测到其它业务集群发起了投票,所述第一业务集群具有发起投票的权利;

本实施例中,所述两个业务集群与所述数据库之间的连接均正常时,表示两个业务集群均可以从所述数据库中获取到对方的运行状态,当其中,一个业务集群检测到与该业务集群相连接的其他业务集群未发起投票,则该业务集群具有发起投票的权利,若是与该业务集群相连接的其他业务集群已经发起了投票,则当前状态下该业务集群不具有发起投票的权利。

S203:若所述两个业务集群中只有一个与所述数据库的连接正常,则与所述数据库连接正常的业务集群具有发起投票的权利;

本实施例中,若所述两个业务集群中只有一个与所述数据的连接正常,则表示另外一个与所述数据库连接不正常的业务集群,无法从所述数据库中获取到与该业务集群相互连接的业务集群的状态,并且与所述数据库正常连接的业务集群也无法向所述数据库发送该业务集群的运行状态,因此与数据库正常连接的业务集群具有发起投票的权利,而无法与所述数据库正常连接的业务集群不具有投票的权利。

举例说明:假设互相连接的两个业务集群为集群A和集群B,则若集群可以和数据库正常连接,集群B不可以和数据库正常连接,在该状态下,集群B无法从数据库中获取集群A的运行状态,同时集群B也无法向数据库发送运行状态。

S204:若所述两个业务集群与所述数据库的连接均不正常,所述两个业务集群均不具有发起投票的权利。

本实施例中,当相互连接的两个业务集群均无法与所述数据库正常连接时,表示这两个业务集群均无法从所述数据库中获取到对方的运行状态,这两个业务集群也无法正常执行业务。此时,二者均不具有发起投票的权利,即二者均不可以发起投票。

S103:所述具有发起投票权利的业务集群向投票者集合发起投票;其中,所述投票者集合为依据预设的选择规则从使用终端和/或仲裁终端中确定的;所述使用终端为通过连接所述两个业务集群中任何一个进行网络操作的终端,所述仲裁终端为网络节点中除所述使用终端之外的服务器;

本实施例中,在S102中只确定出了至多一个具有发起投票权利的业务集群,即只有至多一个具有发起投票权利的业务集群可以发起投票,当确定出了一个具有发起投票权利的业务集群时,所述具有发起投票权利的业务集群向预设的投票者集合发起投票。

举例说明:如图3所示,相互连接的两个业务集群为集群A和集群B,当集群A和集群B出现心跳链路故障,即双方无法感知到对方的运行状态时,首先判断出集群A与数据库的连接以及集群B与数据库之间的连接是否是正常的;若集群A和集群B均可以与数据库正常连接,则集群A和集群B均具有发起投票的权利;然后,集群A和集群B分别判断对方是否已经发起了投票,若集群B检测到集群A还未发起投票,则集群B为具有发起投票权利的集群,然后集群B可以向预设的投票者集合发起投票。其中,确定投票者集合时,若User5和User6不经常在线的使用者,则认为User5和User6是无投票权利的使用者,因此不属于投票者集合考虑的范围,从图中可以看出确定出的投票者集合为User1、User2、User3、User4、Abiter1、Abiter2和Abiter3,但是投票者集合中User3可能出现了单点故障,因此无法进行投票,但是即使有少量的使用终端无法进行投票,不影响投票的结果。

本实施例中,对于投票者集合中的投票者可以是预配置的,例如可以是技术人员预先设置的,也可以是根据使用者的情况动态选取的;但是,无论是哪一种情况,都需要遵循使用者优先的原则,具体的,S103中依据预设的选择规则,从使用终端和仲裁终端确定所述投票者集合,包括:

判断所述使用终端中满足预设条件的使用终端的数量是否达到了预设的投票者集合的数量;

若满足预设的条件的使用者终端的数量超过了预设的投票者集合的数量,则从所述使用终端中确定投票者集合中的投票者;

若满足预设条件的使用终端的数量未超过预设的投票者集合的数量,从满足预设条件的和仲裁终端中选择仲裁终端以和所述满足预设条件的使用终端一起确定所述投票者集合。

本实施例中,需要说明的是,所述预设的条件可以为使用终端在线时间超过预设的时间且状态稳定。例如,可以理解为,使用终端经常在线且状态稳定,其中所述经常在线可以理解为经常通过S101中提到的相互连接的两个业务集群进行网络操作,例如公安系统的固定采集站、银行的服务器等。

本实施例中,当使用终端在线时间超过预设的时间且状态稳定的数量较多,可以从使用终端确定投票者集合;当使用终端在线时间超过预设时间且状态稳定的数量较少时,对于投票者集合确定,可以一部分从使用者终端中确定,一部分从仲裁终端中确定;当不包含在线时间超过预设时间且状态稳定的使用终端时,所有投票者集合均可以从仲裁终端中确定。因此,使用终端中即使有部分发生故障,也不影响本实施例的执行,也就是说即使有部分使用终端发生故障,业务集群仍然可以发起投票。

本实施例中,需要说明的是,所述使用终端可以为通过连接以上提到的这两个业务集群中的任何一个进行网络操作的终端,例如,可以理解为使用终端登录这两个业务集群中的任何一个,被所述使用终端登录的业务集群提供网络服务的终端。除此之外,网络节点中还包括很多经常在线的服务器,但是这些服务器无须连接到这两个业务集群中的任何一个进行网络操作,这样的服务器可以为仲裁者终端,投票者集合中的投票者也可以从仲裁者终端中确定。

S104:判断发起投票的业务集群是否在预设的时间内获得了预定的票数。

本实施例中,预定的票数可以为投票者集合中的大部分票数,更具体的,作为示例,可以为投票者集合中半数以上的票数。并且,投票者集合中投票者的数量可以为奇数也可以为偶数,当发起投票后,只要发起投票的业务集群在预设的时间内获取到了所述投票者集合中半数以上的票数即可认定为投票成功。

具体的,发起投票的业务集群获得的票数是所述投票者投票的加权和,并且,所述投票者的权重根据重要性而改变,这里所说的重要性为投票者的重要性。

在实际应用中,具有发起投票权利的业务集群发起了投票后,投票者中可能有一些会出现故障,这些出现故障的业务集群就不再参与投票,但只要出现故障的业务集群大于投票者集合中半数以上,就不会对投票结果产生影响。

S105:若所述发起投票的业务集群在预设的时间内获得了预定的票数,将所述发起投票的业务集群由只读模式切换为正常服务模式,将投票结果通知所述两个集群中未发起投票的业务集群。

举例说明:如图3所示,若集群B发起了投票,并且在预设的时间内获得了投票者集合中半数以上的票数,则表示投票成功,此时,可以认为集群B为主集群,而集群A为集群B的备份集群,或者可以理解为,B发起投票成功后,B为使用终端提供正常服务的集群,而A此时要停止服务。

本实施例中,对于正常服务模式,可以理解为,此时发起投票成功的集群可以正常的连接使用终端,并为使用终端提供网络服务,并且可以在数据库中执行读写的操作。

本实施例中,将投票结果通知所述两个集群中未发起投票的业务集群具体可以包括以下两种实施方式:

实施方式一:将所述投票结果写入所述数据库;所述未发起投票的业务集群从所述数据库中读取所述投票结果。

实施方式二:将所述投票结果发送给连接到所述发起投票的业务集群的使用终端和/或仲裁终端;当所述使用终端和/或仲裁终端与所述未发起投票的业务集群相连接时,将所述投票结果发送给所述未发起投票的业务集群。

本实施例中,将投票结果发送给连接到发起投票的业务集群的投票者和除投票者之外的使用终端中,其中,投票者为发起投票的业务集群进行投票的使用终端和/或仲裁终端。

本实施例中,执行将投票结果通知相互连接的两个集群中未发起投票的业务集群的操作时,可以执行实施方式一的方案也可以执行实施方式二的方案,除此之外,还可以同时执行实施方式一和实施方式二。但本实施例中,优选的实施方式为:既执行实施方式一也执行实施方式二。这样,当未发起投票的业务集群能够连接上服务器时,可以通过读取服务器中发起投票的业务集群的运行状态,获知投票的结果,即使未发起投票的一方在无法与所述数据库正常连接时,也可以从未发起投票的业务集群连接上的使用终端中获知对方的投票结果。

举例说明:如图4所示,若集群B为发起投票的业务集群,集群A为未发起投票的业务集群,投票结束后,集群B可以将投票结果告知数据库和连接到集群B的投票者以及除投票者之外的使用终端,其中,User1、User2、User3、User4、Arbiter1、Arbiter2和Arbiter3为投票者,而User5和User6为无投票权的使用终端,例如可以为除投票者之外的使用终端,其中User3可能为未与集群B相连接的使用终端,而未与集群B进行连接的原因可能为出现了单点故障,或者是出现了网络故障,然后,可以由接收到投票结果的数据库、投票者或除投票者之外的使用终端将所述投票结果告知集群A。但是,若是发起投票的一方投票超时,即发起投票的业务集群未在预设的时间内获得所述投票者集合中半数以上的票数,所述两个业务集群中未发起投票业务集群向预设的投票者集合发起投票,并返回执行S104。需要说明的是,两个业务集群中未发起投票的业务集群可以发起投票的前提为未发起投票的业务集群可以与数据库进行正常的连接。

本实施例中,当相互连接的两个业务集群之间无法感知到对方的运行状态时,将这两个业务集群切换为只读模式,根据两个业务集群与数据库之间是否能正常连接的结果确定至多一个具有发起投票权利的业务集群发起投票,而不具有发起投票权利的业务集群不发起投票,具有发起投票权利的业务集群向所述投票者集合发起投票,若在预设的时间内获得了预定的票数,将发起投票的业务集群由只读模式切换为正常服务模式,将投票结果通知这两个集群中未发起投票的业务集群,并停止未发起投票的业务集群的工作。这样,在保证数据可以进行读取的情况下,还完全的避免了脑裂的发生;并且,由于投票者集合中投票者是以使用终端为优先原则确定的,因此投票结果更加贴近实际的使用情况;除此之外,投票结果采用多路径传递的结果,即使未发起投票的一方部份链路出现故障也能获知投票结果。

参考图5,示出了本发明实施例提供的一种分布式集群脑裂的处理装置的结构示意图,所述装置可以包括:

第一模式切换单元501,用于当分布式系统中相互连接的两个业务集群之间无法感知到对方的运行状态时,将所述两个业务集群切换为只读模式;

第一判断单元502,用于判断所述两个业务集群与数据库之间的连接是否正常;

第一确定单元503,用于依据所述两个业务集群与所述数据库之间的连接是否正常的判断结果,从所述两个业务集群中确定至多一个具有发起投票权利的业务集群;

第一发起投票单元504,用于所述具有发起投票权利的业务集群向投票者集合发起投票;其中,所述投票者集合为依据预设的选择规则,从使用终端和/或仲裁终端中确定的;所述使用终端为通过连接所述两个业务集群中任何一个进行网络操作的终端,所述仲裁终端为网络节点中除所述使用终端之外的服务器;

第二判断单元505,用于判断发起投票的业务集群是否在预设的时间内获得了预定的票数;

第二模式切换单元506,用于若所述发起投票的业务集群在预设的时间内获得了预定的票数,将所述发起投票的业务集群由只读模式切换为正常服务模式;

通知单元507,用于若所述发起投票的业务集群在预设的时间内获得了预定的票数,将投票结果通知所述两个集群中未发起投票的业务集群。

可选的,所述第一确定单元包括:

检测子单元,用于若所述两个业务集群与所述数据的连接均正常,所述两个业务集群中每个业务集群分别检测其它业务集群是否发起了投票;

第一确定子单元,用于当所述两个业务集群中的第一业务集群未检测到其它业务集群发起了投票,确定所述第一业务集群具有发起投票的权利;

第二确定子单元,用于若所述两个业务集群中只有一个与所述数据库的连接正常,则确定与所述数据库连接正常的业务集群具有发起投票的权利;

第三确定子单元,用于若所述两个业务集群与所述数据库的连接均不正常,则确定所述两个业务集群均不具有发起投票的权利。

可选的,所述第一发起投票单元包括:

写入单元,用于在所述数据库中写入投票记录和时间戳

可选的,所述检测子单元,包括:

查询子单元,用于在所述数据库中查询业务集群的投票记录和时间戳;

判定子单元,用于当所述其它业务集群的投票记录和时间戳存在且当前时间未超出从所述时间戳开始的预设时间时,判定所述其它业务集群发起了投票;当所述其它业务集群的投票记录不存在或者当前时间超出从所述时间戳开始的预设时间时,判定所述其它业务集群没有发起投票。

可选的,还包括:

第三判断单元,用于判断所述使用终端中满足预设条件的终端的数量是否达到了预设的投票者集合的数量;

第二确定单元,用于若满足预设条件的使用终端的数量超过了预设的投票者集合的数量,则从所述使用者中确定投票者集合中的投票者;

第三确定单元,用于若满足预设条件的使用终端的数量未超过预设的投票者集合的数量,从满足预设条件的仲裁终端中选择仲裁终端以和预设条件的使用终端一起确定所述投票者集合。

可选的,所述预设条件为:

使用终端在线时间超过预设的时间且状态稳定。

可选的,所述通知单元,包括:

写入子单元,用于将所述投票结果写入所述数据库;

读取子单元,用于所述未发起投票的业务集群从所述数据库中读取所述投票结果。

可选的,所述通知单元,包括:

第一发送子单元,用于将所述投票结果发送给连接到所述发起投票的业务集群的使用终端和/或仲裁终端;

第二发送子单元,用于当所述使用终端和/或仲裁终端与所述未发起投票的业务集群相连接时,将所述投票结果发送给所述未发起投票的业务集群。

可选的,还包括:

第二发起投票单元,用于若发起投票的业务集群未在预设的时间内获得预定的票数,所述两个业务集群中未发起投票的业务集群发起投票并返回第二判断单元。

可选的,所述预定的票数为所述投票者集合中半数以上的票数。

可选的,发起投票的业务集群获得的票数是所述投票者投票的加权和。

可选的,所述投票者的权重根据其重要性而改变。

可选的,不具有发起投票权利的业务集群不发起投票。

通过本实施例的装置,在保证数据可以进行读取的情况下,还完全的避免了脑裂的发生;并且,由于投票者集合中投票者是以使用终端为优先原则确定的,因此投票结果更加贴近实际的使用情况;除此之外,投票结果采用多路径传递的结果,即使未发起投票的一方部份链路出现故障也能获知投票结果。

本发明实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现所述分布式集群脑裂的处理方法。

参考图6,示出了本发明实施例提供了一种分布式集群脑裂的处理设备的结构示意图,在本实施例中,该设备包括存储器601、处理器602;

其中,存储器601,用于存储程序;

处理器602,用于运行所述程序,具体的,处理器执行程序时实现以下步骤:

当分布式系统中相互连接的两个业务集群之间无法感知到对方的运行状态时,所述两个业务集群切换为只读模式;

判断所述两个业务集群与数据库之间的连接是否正常,并依据所述两个业务集群与所述数据库之间的连接是否正常的判断结果,从所述两个业务集群中确定至多一个具有发起投票权利的业务集群;

所述具有发起投票权利的业务集群向投票者集合发起投票;其中,所述投票者集合为依据预设的选择规则从使用终端和/或仲裁终端中确定的;所述使用终端为通过连接所述两个业务集群中任何一个进行网络操作的终端,所述仲裁终端为网络节点中除所述使用终端之外的服务器;

判断发起投票的业务集群是否在预设的时间内获得了预定的票数;

若所述发起投票的业务集群在预设的时间内获得了预定的票数,将所述发起投票的业务集群由只读模式切换为正常服务模式,将投票结果通知所述两个集群中未发起投票的业务集群。

可选的,依据所述两个业务集群与所述数据库之间的连接是否正常的判断结果,从所述两个业务集群中确定至多一个具有发起投票权利的业务集群,包括:

若所述两个业务集群与所述数据库的连接均正常,所述两个业务集群中每个业务集群分别检测其它业务集群是否发起了投票;

当所述两个业务集群中的第一业务集群未检测到其它业务集群发起了投票,所述第一业务集群具有发起投票的权利;

若所述两个业务集群中只有一个与所述数据库的连接正常,则与所述数据库连接正常的业务集群具有发起投票的权利;

若所述两个业务集群与所述数据库的连接均不正常,所述两个业务集群均不具有发起投票的权利。

可选的,所述具有发起投票权利的业务集群向投票者集合发起投票,包括:

发起投票的业务集群在所述数据库中写入投票记录和时间戳。

可选的,所述若所述两个业务集群与所述数据库的连接均正常,所述两个业务集群中每个业务集群分别检测其它业务集群是否发起了投票,包括:

所述两个业务集群中的第一业务集群在所述数据库中查询其它的投票记录和时间戳;

当所述其它业务集群的投票记录和时间戳存在且当前时间未超出从所述时间戳开始的预设时间时,所述其它业务集群发起了投票;

当所述其它业务集群的投票记录不存在,或者所述其它业务集群的投票记录和时间戳存在且当前时间超出从所述时间戳开始的预设时间时,所述其它业务集群没有发起投票。

可选的,依据预设的选择规则,从使用终端和/或仲裁终端确定所述投票者集合,包括:

判断所述使用终端中满足预设条件的使用终端的数量是否达到了预设的投票者集合的数量;

若满足预设条件的使用终端的数量超过了预设的投票者集合的数量,则从所述使用终端中确定投票者集合中的投票者;

若满足预设条件的使用终端的数量未超过预设的投票者集合的数量,从满足预设条件的仲裁终端中选择仲裁终端以和所述满足预设条件的使用终端一起确定所述投票者集合。

可选的,所述预设条件为:

使用终端在线时间超过预设的时间且状态稳定。

可选的,所述将投票结果通知所述两个集群中未发起投票的业务集群,包括:

将所述投票结果写入所述数据库;

所述未发起投票的业务集群从所述数据库中读取所述投票结果。

可选的,所述将投票结果通知所述两个集群中未发起投票的业务集群,包括:

将所述投票结果发送给连接到所述发起投票的业务集群的使用终端和/或仲裁终端;

当所述使用终端和/或仲裁终端与所述未发起投票的业务集群相连接时,将所述投票结果发送给所述未发起投票的业务集群。

可选的,所述判断发起投票的业务集群是否在预设的时间内获得了预定的票数后,还包括:

若发起投票的业务集群未在预设的时间内获得预定的票数,所述两个业务集群中未发起投票的业务集群发起投票并返回执行判断发起投票的业务集群是否在预设的时间内获得了预定的票数。

可选的,所述预定的票数为所述投票者集合中半数以上的票数。

可选的,发起投票的业务集群获得的票数是所述投票者投票的加权和。

可选的,所述投票者的权重根据其重要性而改变。

可选的,不具有发起投票权利的业务集群不发起投票。

其中,本实施例中的设备可以为服务器、PC、PAD、手机等。

其中,本实施例的设备中的存储器可以包括计算机可读存储介质中的非永久性存储器、随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器或者闪存(falsh RAM),存储器包括至少一个存储芯片。

通过本实施例的设备,在保证数据可以进行读取的情况下,还完全的避免了脑裂的发生;并且,由于投票者集合中投票者是以使用终端为优先原则确定的,因此投票结果更加贴近实际的使用情况;除此之外,投票结果采用多路径传递的结果,即使未发起投票的一方部份链路出现故障也能获知投票结果。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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