掌桥专利:专业的专利平台
掌桥专利
首页

分布式系统的冗余切换方法及装置

文献发布时间:2024-04-18 20:02:18


分布式系统的冗余切换方法及装置

技术领域

本申请涉及分布式系统技术领域,尤其涉及一种分布式系统的冗余切换方法及装置。

背景技术

在分布式系统中,一致性算法是确保在分布式系统包括的多个节点上保持数据一致性的关键。选举算法是一种常用的分布式一致性算法,通过选举的方式从各节点中选出一个领导者(Leader),由Leader节点来处理所有的写请求,并将数据同步给其他节点。然而,在某些场景下,当Leader节点出现故障时,系统可能会面临数据丢失的风险。

因此,如何实现分布式系统的冗余切换,避免数据丢失是目前亟待解决的问题。

发明内容

本申请实施例的目的是提供一种分布式系统的冗余切换方法及装置,用以解决Leader节点出现故障时分布式系统的数据存在丢失风险的问题。

为了解决上述技术问题,本说明书是这样实现的:

第一方面,提供了一种分布式系统的冗余切换方法,应用于分布式系统中的目标节点,所述方法包括:

在所述目标节点的角色为跟随者时,如果检测到与角色为领导者的第一节点之间的连接不正常,则转换所述目标节点的角色为候选者;

在转换所述目标节点的角色为候选者后,向角色为跟随者的各第二节点发送投票请求以发起新一轮的选举,所述新一轮的选举用于接收的各第二节点响应所述投票请求进行投票以选举出领导者;

在所述选举结束后,如果所述目标节点得到的投票数量超过预设数量阈值,则转换所述目标节点的角色为领导者;

在转换所述目标节点的角色为领导者后,与所述分布式系统中的其他节点建立连接。

可选地,在所述目标节点的角色为跟随者时,还包括:

如果检测到与角色为领导者的第一节点之间的连接正常,则保持所述目标节点的角色为跟随者。

可选地,所述转换所述目标节点的角色为候选者之前,还包括:

确定所述目标节点的优先级;

如果优先级满足预设配置,则确定所述标节点具有转换角色为候选者的资格;

否则,保持所述目标节点的角色为跟随者。

可选地,所述保持所述目标节点的角色为跟随者之后,还包括:

等待至少一个角色为候选者的节点发起新一轮的选举时发送的投票请求;

响应接收到的第一条投票请求,向对应的候选者的节点投票;

响应所述第一条投票请求之后的各投票请求,拒绝向对应的候选者的节点投票;

等待所述选举结束。

可选地,所述选举结束之后,还包括:

如果选举出新的领导者,则与所述新的领导者对应的第三节点建立连接;

以检测心跳的方式定时检测与角色为领导者的所述第三节点之间的连接。

可选地,所述选举结束之后,还包括:

如果未选举出新的领导者,则转换所述目标节点的角色为候选者。

可选地,所述在转换所述目标节点的角色为候选者后,向角色为跟随者的各第二节点发送投票请求,包括:

在转换所述目标节点的角色为候选者后,基于所述目标节点的优先级确定发起新一轮的选举对应的预设等待时长,优先级越高,对应的预设等待时长越短;

在所述预设等待时长后,向角色为跟随者的各第二节点发送投票请求。

可选地,在投票结束后,还包括:

如果所述目标节点得到的投票数量不超过预设数量阈值,则在与角色为领导者的节点建立连接后,转换所述目标节点的角色为跟随者。

可选地,所述在转换所述目标节点的角色为领导者后,与所述分布式系统中的其他节点建立连接之前,还包括:

在转换所述目标节点的角色为领导者后,如果检测到角色为领导者的第四节点,则比较所述目标节点的优先级和所述第四节点的优先级;

如果所述目标节点的优先级低于所述第四节点的优先级,则转换所述目标节点的角色为跟随者;

否则,与所述分布式系统中的其他节点建立连接。

第二方面,提供了一种分布式系统的冗余切换装置,包括处理器和存储器,所述存储器存储可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如第一方面所述的方法的步骤。

第三方面,提供了一种可读存储介质,该可读存储介质上存储有程序或指令,所述程序或指令被处理器执行时实现如第一方面所述的方法的步骤。

在本申请实施例中,在目标节点的角色为跟随者时,如果检测到与角色为领导者的第一节点之间的连接不正常,则转换所述目标节点的角色为候选者;在转换所述目标节点的角色为候选者后,向角色为跟随者的各第二节点发送投票请求以发起新一轮的选举,所述新一轮的选举用于接收的各第二节点响应所述投票请求进行投票以选举出领导者;在所述选举结束后,如果所述目标节点得到的投票数量超过预设数量阈值,则转换所述目标节点的角色为领导者;在转换所述目标节点的角色为领导者后,与所述分布式系统中的其他节点建立连接,由此可以在Leader节点出现故障时,实现分布式系统的冗余切换,避免数据丢失。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是本申请实施例的分布式系统的冗余切换方法的流程示意图。

图2是本申请实施例的跟随者的角色转换示意图。

图3是本申请实施例的候选者的角色转换示意图。

图4是本申请实施例的领导者的角色转换示意图。

图5是本申请实施例的分布式系统的冗余切换装置的结构方框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。本申请中附图编号仅用于区分方案中的各个步骤,不用于限定各个步骤的执行顺序,具体执行顺序以说明书中描述为准。

为了解决现有技术中存在的问题,本申请实施例提供一种分布式系统的冗余切换方法,应用于分布式系统中的目标节点,如图1所示,包括以下步骤:

步骤102,在所述目标节点的角色为跟随者时,如果检测到与角色为领导者的第一节点之间的连接不正常,则转换所述目标节点的角色为候选者;

步骤104,在转换所述目标节点的角色为候选者后,向角色为跟随者的各第二节点发送投票请求以发起新一轮的选举,所述新一轮的选举用于接收的各第二节点响应所述投票请求进行投票以选举出领导者;

步骤106,在所述选举结束后,如果所述目标节点得到的投票数量超过预设数量阈值,则转换所述目标节点的角色为领导者;

步骤108,在转换所述目标节点的角色为领导者后,与所述分布式系统中的其他节点建立连接。

本申请实施例的分布式系统的冗余切换方法基于投票选举算法实现,分布式系统包括多个节点,其中至少部分节点可同时具备跟随者(Follower)、候选者(Candidate)和领导者(Leader)角色的能力,部分节点仅具有跟随者角色的能力。跟随者用于在一轮选举中为候选者中投票,以从至少一个候选者中选举出领导者,角色为候选者的节点为多个角色为跟随者的节点中一个或多个。多个节点中仅存在一个角色为领导者的节点,选举出的领导者用于管理分布式系统中的其他节点。

在分布式系统以一个领导者节点管理其他节点的模式正常工作的情况下,除领导者节点之外的目标节点以跟随者的角色启动。启动后,目标节点可以检测心跳的方式定时检测与领导者节点的连接。如果检测到与当前领导者节点之间的连接不正常,则将目标节点的角色从跟随者转换为候选者。

目标节点与领导者节点之间的连接不正常,可能是领导者节点出现诸如网络不稳定、节点未启动等故障。为避免领导者节点故障导致数据丢失,目标节点可以切换为候选者的角色,以向角色为跟随者的各节点发送投票请求,从而发起新一轮的选举,以选举出新的领导者来管理其他节点。

在一个实施例中,在所述目标节点的角色为跟随者时,还包括:如果检测到与角色为领导者的第一节点之间的连接正常,则保持所述目标节点的角色为跟随者。

即,没有检测出领导者节点存在故障的节点,继续保持跟随者的角色。

分布式系统中至少一个角色为跟随者的节点可能检测出与当前领导者节点之间的连接不正常,则可以转换其角色为候选者,对应地,候选者可以为一个或多个。

或者,可以预先配置分布式系统中角色为跟随者的节点是否可具有成为领导者的资格。可选地,所述转换所述目标节点的角色为候选者之前,还包括:确定所述目标节点的优先级;如果优先级满足预设配置,则确定所述标节点具有转换角色为候选者的资格;否则,保持所述目标节点的角色为跟随者。

也就是说,可以通过优先级的形式,配置分布式系统中的部分节点可以作为候选者进行领导者的选举。在角色为跟随者的目标节点检测出与当前领导者节点之间的连接不正常之后,进一步通过优先级配置判断其是否能够成为候选者,若是则可以转换其角色为候选者;否则,保持其跟随者的角色。

转换角色为候选者的各节点,可以向分布式系统中角色为跟随者的各节点发送投票请求以发起新一轮的选举。从而,对应的跟随者节点响应候选者发送的投票请求进行投票,用于选举出新的领导者。

具体地,所述保持所述目标节点的角色为跟随者之后,还包括:等待至少一个角色为候选者的节点发起新一轮的选举时发送的投票请求;响应接收到的第一条投票请求,向对应的候选者的节点投票;响应所述第一条投票请求之后的各投票请求,拒绝向对应的候选者的节点投票;等待所述选举结束。

跟随者节点的等待会一直持续,直到收到候选者节点发送的投票请求,或与存在故障的旧领导者节点恢复连接。

在本申请实施例中,各跟随者节点仅对接收的第一条投票请求对应的候选者投票,即一个跟随者仅对一个候选者投票。对于第一条投票请求之后接收到的其他候选者的投票请求均拒绝,然后等待,直至选举结束。

对于保持角色为跟随者的目标节点,所述选举结束之后,还包括:如果选举出新的领导者,则与所述新的领导者对应的第三节点建立连接;以检测心跳的方式定时检测与角色为领导者的所述第三节点之间的连接。

选举之后,如果选举出新的领导者,保持角色为跟随者的目标节点则与新的领导者节点建立连接,即恢复分布式系统以一个领导者节点管理其他节点的模式正常工作的情况。目标节点以跟随者的角色运行,通过检测心跳的方式定时检测与新的领导者节点的连接。如果再次检测到与当前领导者节点之间的连接不正常,则重复上述步骤,将目标节点的角色从跟随者转换为候选者,再发起新的一轮选举。

可选地,所述选举结束之后,还包括:如果未选举出新的领导者,则转换所述目标节点的角色为候选者。

如果当前一轮选举未选举出新的领导者,则继续重复上述步骤,将目标节点的角色从跟随者转换为候选者,再发起新的一轮选举。

如上文所述,对于转换角色为候选者的目标节点向各跟随者节点发送投票请求,可选地,所述在转换所述目标节点的角色为候选者后,向角色为跟随者的各第二节点发送投票请求,包括:在转换所述目标节点的角色为候选者后,基于所述目标节点的优先级确定发起新一轮的选举对应的预设等待时长,优先级越高,对应的预设等待时长越短;在所述预设等待时长后,向角色为跟随者的各第二节点发送投票请求。

候选者节点会依据自己的优先级等待对应预设的一段时长,然后发起新的选举,等待是为了错开不同优先级的候选者节点发起新选举的时间。等待的时长依据候选者节点的优先级,再加上一个更小数量级的随机数抖动确定,其中候选者节点的优先级越高,等待的时长越短。也即优先级高的候选者优先发送投票请求,提高被选中作为新的领导者的几率。

如果选举结束后目标节点得到的投票数量超过预设数量阈值,例如得票数超过分布式系统全局节点数量的一半以上,则转换目标节点的角色为领导者,即目标节点当选为该新一轮的选举选出的新的领导者,按照领导者的角色运行。即,与分布式系统中的其他节点建立连接。

当选出的新的领导者节点与分布式系统中的所有跟随者节点建立连接后,或者等待建立连接超时后,标识一次选举正式结束了。

领导者节点以发送心跳的方式维持与各跟随者节点之间的连接,当领导者节点与某跟随者节点建立连接后,领导者节点开始管理该跟随者节点。当领导者节点与某跟随者节点失去连接一段时间后,领导者节点不再管理该跟随者节点,删除断连的领导者节点。

在一个实施例中,所述在转换所述目标节点的角色为领导者后,与所述分布式系统中的其他节点建立连接之前,还包括:在转换所述目标节点的角色为领导者后,如果检测到角色为领导者的第四节点,则比较所述目标节点的优先级和所述第四节点的优先级;如果所述目标节点的优先级低于所述第四节点的优先级,则转换所述目标节点的角色为跟随者;否则,与所述分布式系统中的其他节点建立连接。

该实施例中,在新一轮的选举选出新的领导者节点之后,可能之前的旧领导者节点恢复了正常工作,则此时会同时存在两个领导者节点。当一个领导者节点检测到另一个领导者节点存在时,会进行优先级的比较,如果自己的优先级低,则转换为其角色为跟随者,使得分布式系统中仅保留一个角色为领导者的节点。

可选地,该方法还包括:如果所述目标节点得到的投票数量不超过预设数量阈值,则在与角色为领导者的节点建立连接后,转换所述目标节点的角色为跟随者。

如果选举结束后目标节点得到的投票数量未超过预设数量阈值,例如得票数未超过分布式系统全局节点数量的一半以上,则将目标节点的角色从候选者转换为跟随者,按照跟随者的角色运行。即,目标节点通过检测心跳的方式定时检测与新的领导者节点的连接。如果再次检测到与当前领导者节点之间的连接不正常,则重复上述步骤,将目标节点的角色从跟随者转换为候选者,再发起新的一轮选举。

下面,结合图2至图4,分别对节点在不同角色下的转换和行为进行描述。

现在参考图2,图2是本申请实施例的跟随者的角色转换示意图。如图2所示,角色为Follower的节点(下文以Follower 10表示)启动,正常情况下与角色为Leader的节点(下文以Leader 30表示)连接,Leader 30可以向分布式系统集群中所有其他Follower 10广播(BroadCast)PING消息,以通知其Leader的身份或发送请求。当Follower 10需要接受(Recv)角色为Candidate的节点(下文以Candidate 20表示)或Leader 30的请求时,以ACCEPT消息回应对应请求的节点。

当Follower 10通过定时心跳检测到超时(onTimeOut)时,则表示Follower10与Leader 30之间的连接不正常,此时Follower 10可以通过自身优先级的预设配置,判断其是否具有转换角色为Candidate的资格,即是否具有选举资格,成为Candidate。如果有资格,则在onTimeOut情况下,节点的角色转换为Candidate,即转换成为Candidate 20;否则,没有选举资格,则等待Candidate20的投票,以对Candidate 20进行选举。Candidate 20可以向分布式系统集群中所有其他Follower 10广播VOTE消息,以请求其他服务器允许其成为Leader。如果Candidate 20得到的投票数量超出超过预设数量阈值,被选举为新的领导者,则较多的角色转换为Leader,即转换成为Leader 30。

图3是本申请实施例的候选者的角色转换示意图,如图3所示,多个角色为Candidate的节点Candidate 20启动,参与新一轮的选举。在选举过程中,图示2个Candidate 20分别通过广播的方式向各Follower 10发送(SEND)VOTE消息,以请求Follower 10允许其成为Leader。

图示有3个Follower 10进行投票,当Follower 10知道一个选举正在进行时,对其接收到的第一条投票请求对应的Candidate 20投票,后续的来自其他Candidate 20的投票请求都将遭到拒绝(REFUSE),即拒绝投票,然后等待本次选举结束。

选出票数最多的节点作为新的Leader节点,例如得3票的Candidate 20当选为Leader,其对应节点的角色转换为Leader 30;得1票的Candidate 20没有当选为Leader,在连接到新的Leader后转换角色为Follower,即转换成为Follower 10。

图4是本申请实施例的领导者的角色转换示意图,如图4所示,两个角色为Leader的节点Leader 30启动,其中一个Leader 30的优先级为高(High),另一个Leader 30的优先级为低(Low)。当一个Leader 30检测到另一个Leader30存在时,会进行优先级比较,如果自己的优先级低,则转换角色为Follower,即转换为Follower 10。优先级高的Leader 30与分布式系统中所有其他Follower10建立通信,确保数据的一致性。Leader 30可以向分布式系统集群中所有其他Follower 10广播(BroadCast)PING消息,各Follower 10在启动时可以通过心跳方式检测(Check)与Leader 30之间的连接。

所有节点的消息处理遵循以下规则:节点仅接收发送给自己的合法消息,消息的目的节点信息需要与其当前身份兼容,即角色身份一致,对于不是发送给自己的消息,直接丢弃,对于发送给自己的非法消息,回复RST消息。

本申请实施例的分布式系统包括多个节点,每个节点都具备Follower、Candidate和Leader角色的能力。在正常情况下,节点处于Follower角色状态,当检测到Leader节点故障时,该节点的Follower角色将转变为Candidate角色,并参与新一轮的选举。在选举过程中,多个角色为Candidate的节点将进行投票,选出票数最多的Candidate节点作为新的Leader节点。当选出新的Leader节点后,该Leader节点将与其他节点建立通信,确保数据的一致性。同时,为了确保选举过程的可靠性,每个节点都应具备投票权和被投票权。在选举过程中,节点将根据一定的策略决定投票对象和投票数量。此外,为了防止多个Follower节点同时转变为Candidate角色并参与选举,引入了优先级机制,只有有资格选举的Follower节点可以转变为Candidate,从而实现主备从的冗余功能。

在本申请实施例中,在目标节点的角色为跟随者时,如果检测到与角色为领导者的第一节点之间的连接不正常,则转换所述目标节点的角色为候选者;在转换所述目标节点的角色为候选者后,向角色为跟随者的各第二节点发送投票请求以发起新一轮的选举,所述新一轮的选举用于接收的各第二节点响应所述投票请求进行投票以选举出领导者;在所述选举结束后,如果所述目标节点得到的投票数量超过预设数量阈值,则转换所述目标节点的角色为领导者;在转换所述目标节点的角色为领导者后,与所述分布式系统中的其他节点建立连接,由此可以在Leader节点出现故障时,实现分布式系统的冗余切换,避免数据丢失。

可选地,如图5所示,本申请实施例还提供一种分布式系统的冗余切换装置2000,包括处理器2400和存储器2200,存储器2200上存储有可在所述处理器2400上运行的程序或指令,该程序或指令被处理器2400执行时实现上述分布式系统的冗余切换方法实施例的各个步骤,且能达到相同的技术效果,为避免重复,这里不再赘述。

本申请实施例还提供一种可读存储介质,所述可读存储介质上存储有程序或指令,所述程序或指令被处理器执行时实现上述任意一种分布式系统的冗余切换方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述可读存储介质,包括计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例所述的方法。

上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。

相关技术
  • 一种仪表冗余电源自动切换装置及其使用方法
  • 一种编码模式切换方法和装置、解码模式切换方法和装置
  • 分布式系统数据共享方法及装置、数据共享分布式系统
  • 分布式系统冗余诊断方法、装置、电子装置和存储介质
  • 基于分布式系统主从互转式的双冗余控制装置及方法
技术分类

06120116585503