CN108616566B - raft分布式系统选主方法、相关设备及系统 - Google Patents
raft分布式系统选主方法、相关设备及系统 Download PDFInfo
- Publication number
- CN108616566B CN108616566B CN201810216748.3A CN201810216748A CN108616566B CN 108616566 B CN108616566 B CN 108616566B CN 201810216748 A CN201810216748 A CN 201810216748A CN 108616566 B CN108616566 B CN 108616566B
- Authority
- CN
- China
- Prior art keywords
- node
- cluster
- nodes
- surviving
- arbitration
- 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
Images
Classifications
-
- 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/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1044—Group management mechanisms
- H04L67/1051—Group master selection mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/10—Active monitoring, e.g. heartbeat, ping or trace-route
-
- 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/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1044—Group management mechanisms
- H04L67/1048—Departure or maintenance mechanisms
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Cardiology (AREA)
- General Health & Medical Sciences (AREA)
- Computer And Data Communications (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本申请实施例提供一种raft分布式系统选主方法、相关设备及系统,该方法包括:在第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点的情况下,仲裁节点接收至少一个第二节点发送的第一消息,该第一消息指示该第二节点所处的第二集群;所述第二节点为上述存活节点中任期最新且日志最新的节点;该仲裁节点向第三节点发送第一状态更新请求,用于更新该第三节点为候选者状态;该第三节点属于上述至少一个第二节点,在上述至少一个第二节点各自所处的第二集群中,该第三节点所处的第二集群最大。采用本申请实施例,能够提高raft分布式系统的可靠性。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种raft分布式系统选主方法、相关设备及系统。
背景技术
在raft分布式系统中,会用多个存储节点来提升系统的可用性,当其中一个存储节点出现了故障,还有其他存储节点能够替代。在raft协议中,每个存储节点会处于跟随者(Follower)状态、候选者(Candidate)状态和领导者(Leader)状态这三种状态中的一种。其中,处于Follower状态的节点,是分布式系统的从节点,所有的节点都以Follower的状态开始,如果没收到Leader节点的心跳消息,则会变成Candidate状态。处于Candidate状态的节点,是分布式系统的候选节点,会向其他节点“拉选票”,如果得到大部分的票则变成Leader状态。这个过程就叫做Leader选举(Leader Election),简称选举。处于Leader状态下的节点,是分布式系统的主节点,所有对系统数据的添加,修改和删除都只能通过Leader节点来完成。
Leader节点和Follower节点之间通过心跳信息维持通信,当Follower节点在选举超时时间内没有收到Leader的心跳信息,则Follower节点就会变成Candidate状态,该选举超时时间一般是150ms-300ms之间的一个随机数。变为Candidate状态的节点投自己一票,然后请求其他节点投票给自己。在投票超时时间内,如果Candidate节点收到的票数大于集群中节点的总数的一半,则选举成功,Candidate节点变为Leader节点,否则,选举失败,变为Follower节点。这样一来,在raft协议中,旧Leader节点出现故障之后,所有的Follower节点都会产生一随机的选举超时时间,此时谁的选举超时时间小,得到超过一半节点的投票,才能是新的Leader节点,选举出的Leader节点具有随机性,存在选举出的Leader节点不是最可靠的缺陷。
如何进一步提高raft分布式系统的可靠性是本领域的技术人员正在研究的技术问题。
发明内容
本申请实施例公开了一种raft分布式系统选主方法、相关设备及系统,能够提高raft分布式系统的可靠性。
本申请实施例第一方面公开了一种raft分布式系统选主方法,该方法包括:首先,在第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点的情况下,仲裁节点接收至少一个第二节点发送的第一消息,其中,该第一消息指示该第二节点所处的第二集群,一个第二节点所处的第二集群包括该第二节点连通的上述存活节点。上述存活节点为该第一集群中与该仲裁节点连通的节点,其中,该第二节点为该存活节点中任期最新且日志最新的节点。然后,该仲裁节点向第三节点发送第一状态更新请求,用于更新该第三节点为候选者状态,其中,该第三节点属于上述至少一个第二节点,在该至少一个第二节点各自所处的第二集群中,该第三节点所处的第二集群最大。被更新为候选者状态的该第三节点用于在该第三节点连通的存活节点中发起选举。
通过执行上述步骤,仲裁节点可以在第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,从存活节点中选出任期最新且日志最新的至少一个第二节点,然后,从这些第二节点中选出所处第二集群最大的第三节点,接着,更新所述第三节点为候选者状态,最后回到原有的raft的协议中,让第三节点成为新的主节点,即更新第三节点为领导者状态。这样,节点集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,继续进行日志复制的工作。更重要的是,本申请中,通过上述步骤选取出来的主节点具有任期最新、日志版本最新且所处子集群最大的特征,显得选取出的主节点尤为可靠,所以,通过上述步骤能够raft分布式系统的可靠性。
结合第一方面,在第一方面的第一种可能的实现方式中,在该仲裁节点接收该第一集群中的至少一个第二节点发送的第一消息之前,还包括:该仲裁节点接收该第一集群中的存活节点发送的第二消息;其中,该第二消息包括该第一集群中的节点状态和节点标识。该仲裁节点根据该第二消息判断是否该第一集群中有至少一半上述存活节点,且该第一集群中没有处于领导者状态的节点。也即是说,通过仲裁节点接收到的第一集群中的存活节点发送的第二消息,仲裁节点即可判断出第一集群中有多少存活节点,以及各存活节点的节点状态,实现了仲裁节点对第一集群的实时监控,便于触发仲裁选举流程,有效的减少了第一集群无法正常工作的时间。
结合第一方面,或者第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,在该第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点的情况下,还包括:该仲裁节点向该第一集群中的节点发送第二状态更新请求,其中,该第二状态更新请求用于更新该第一集群中的节点为仲裁状态,被更新为仲裁状态的该第一集群中的节点不发起选主或投票。也即是说,通过更新第一集群中的节点为仲裁状态,可以防止在仲裁节点对第一集群进行仲裁选举的过程中,第一集群中的节点根据原有raft协议规定的方法选举,可以避免本申请仲裁选举和原有raft协议选举的产生冲突,为本申请仲裁选举流程提供了执行时间。
结合第一方面,在第一方面的第三种可能的实现方式中,在该仲裁节点接收该一集群中的至少一个第二节点发送的第一消息之前,还包括:该仲裁节点接收上述存活节点发送的第三消息,其中,该第三消息包括上述存活节点的任期和日志版本。该仲裁节点根据该第三消息确定出该至少一个第二节点。也即是说,仲裁节点通过选出任期最新且日志最新的至少一个第二节点,可以让最终选出的主节点符合raft协议中定义主节点的特征,可以确保最终选出的主节点的可靠性。
结合第一方面,在第一方面的第四种可能的实现方式中,在该仲裁节点接收该第一集群中的至少一个第二节点发送的第一消息之前,还包括:该仲裁节点向上述至少一个第二节点发送第四消息,其中,该第四消息用于触发上述至少一个第二节点分别在所述第一集群中进行广播,并将响应该广播的上述存活节点确定为该第二节点连通的该存活节点。也即是说,仲裁节点通过让第二节点发送广播,确定出第二节点可连通的第二集群,可以使得在选出新的主节点后,新集群中的节点都能与新的主节点进行正常通信,完成日志复制工作,提高了选举流程选出的主节点的可靠性。
结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,包括:该第四消息具体用于触发该至少一个第二节点分别在该存活节点中进行N次广播,并将响应至少一次该广播的该存活节点确定为该第二节点连通的该存活节点,N为正整数。也即是说,仲裁节点通过将响应至少一次广播的存活节点确定为该第二节点连通的存活节点,可以尽可能的找出的更多与第二节点连通的存活节点,提高第一集群中节点的利用率。
结合第一方面,在第一方面的第六种可能的实现方式中,还包括:该仲裁节点向该第三节点连通的上述存活节点发送第三状态更新请求,其中,该第三状态更新请求用于更新该第三节点连通的该存活节点为跟随者状态,被更新为跟随者状态的该存活节点用于向被更新为候选者状态的该第三节点投票。也即是说,在仲裁节点向第三节点发送第一状态更新请求的同时,仲裁节点可将第三节点连通的存活节点更新到跟随者状态,后续回归到raft协议中,处于跟随者状态的存活节点可向更新为候选者状态的第三节点投票,以完成选举。
结合第一方面,在第一方面的第七种可能的实现方式中,在该仲裁节点向该第三节点发送第一状态更新请求之前,还包括:该仲裁节点发送配置更新指令给该第三节点和该第三节点连通的上述存活节点;该配置更新指令用于将第三集群的配置信息更新到该第三集群中的各节点上,其中,该第三集群由该第三节点和该第三节点连通的该存活节点组成,该配置信息包括第三集群中各节点的IP地址和通信端口。也即是说,仲裁节点通过将第三集群的配置信息更新到第三集群中的各节点上,可以让第三节点发起选举投票的范围局限在第三集群中,保证能够选举出新的主节点,让第三集群成为新的集群,提高了集群的可用性。
结合第一方面,在第一方面的第八种可能的实现方式中,在该仲裁节点向该第三节点发送第一状态更新请求之前,还包括:该仲裁节点向该第三节点和该第三节点连通的上述存活节点发送日志回滚指令,其中,该日志回滚指令用于回滚该第三节点和该第三节点连通的所述存活节点上未提交的日志。也即是说,仲裁节点通过对第三集群中的节点进行日志回滚,可以避免新的节点进行日志复制时,日志出现混乱。
第二方面,本申请实施例提供了一种raft分布式系统选主方法,该方法包括:首先,在满足预设条件时,至少一个第二节点中的每个第二节点向仲裁节点发送第一消息,该第一消息指示该第二节点所处的第二集群;其中,该预设条件为第一集群中有至少一半的节点为存活节点,且该第一集群中没有处于领导者状态的节点,上述存活节点为该第一集群中与该仲裁节点连通的节点;该第二节点为该第一集群中任期最新且日志最新的存活节点,该第二节点所处的第二集群包括该第二节点和该第二节点连通的该存活节点。然后,该第三节点接收该仲裁节点发送的第一状态更新请求;其中,该第三节点属于上述至少一个第二节点,在上述至少一个第二节点各自所处的第二集群中,该第三节点所处的第二集群最大;接着,该第三节点根据该第一状态更新请求更新节点状态为候选者状态;被更新为候选者状态的该第三节点用于在该第三节点连通的存活节点中发起选举。
通过执行上述步骤,第二节点在为第一集群中任期最新且日志最新的存活节点的条件下,且第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,筛选出所处的第二集群。然后,在上述至少一个第二节点中的第三节点所处的第二集群最大的条件下,更新该第三节点为候选者状态,最后回到原有的raft的协议中,该第三节点成为新的主节点,即更新第三节点为领导者状态。这样,第一集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,继续进行日志复制的工作。更重要的是,本申请中,通过上述步骤选取出来的主节点具有任期最新、日志版本最新且所处子集群最大的特征,显得选取出的主节点尤为可靠,所以通过本申请实施例能够提高raft分布式系统的可靠性。
结合第二方面,在第二方面的第一种实现方式中,在上述至少一个第二节点中的每个第二节点向仲裁节点发送第一消息之前,还包括:该第二节点向所述仲裁节点发送第二消息,其中,该第二消息包括该第二节点的节点状态和节点标识,该第二消息用于该仲裁节点判断是否在该第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点。也即是说,通过第二节点向仲裁节点发送第二消息,接收到第二消息后的仲裁节点即可判断出第一集群中有多少存活节点,以及各存活节点的节点状态,实现了仲裁节点对第一集群的实时监控,便于触发仲裁选举流程,有效的减少了第一集群的无法正常工作的时间。
结合第二方面,在第二方面的第二种可能的实现方式中,在该第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点的情况下,还包括:上述至少一个第二节点接收该仲裁节点发送的第二状态更新请求,其中,该第二状态更新请求用于更新该第二节点为仲裁状态,被更新为仲裁状态的该第二节点不发起选举或投票。也即是说,通过更新第二节点为仲裁状态,可以防止在仲裁节点对第一集群进行仲裁选举的过程中,第一集群中的节点根据原有raft协议规定的方法选举,可以避免本申请仲裁选举和原有raft协议选举的产生冲突,为本申请仲裁选举流程提供了执行时间。
结合第二方面,在第二方面的第三种实现方式中,在该第二节点向仲裁节点发送第一消息之前,还包括:该第二节点向该仲裁节点发送第三消息,其中,该第三消息包括该存活节点的任期和日志版本,该第三消息用于该仲裁节点确定出该任期最新且日志最新的存活节点。也即是说,通过仲裁节点确定出任期最新且日志最新的至少一个第二节点,可以让最终选出的主节点符合raft协议中定义主节点的特征,可以保证最终选出的主节点的可靠性。
结合第二方面,在第二方面的第四种实现方式中,在该第二节点向仲裁节点发送第一消息之前,还包括:上述至少一个第二节点接收该仲裁节点发送的第四消息。上述至少一个第二节点中的每个第二节点根据该第四消息在该第一集群中进行广播,并将响应该广播的该存活节点确定为该第二节点连通的该存活节点。也即是说,通过让该每个第二节点发送广播,确定出每个第二节点各自可连通的第二集群,可以使得在选出新的主节点后,新集群中的节点都能与新的主节点进行正常通信,完成日志复制工作,提高了选举流程选出的主节点的可靠性。
结合第二方面,或者第二方面的上述任意一种可能的实现方式,在第二方面的第五种可能的实现方式中,上述至少一个第二节点中的每个第二节点在该第一集群中进行广播,并将响应所述广播的该存活节点确定为该第二节点连通的上述存活节点,具体包括:该至少一个第二节点中的每个第二节点在上述存活节点中进行N次广播,并将响应至少一次该广播的该存活节点确定为该第二节点连通的所上述存活节点,N为正整数。也即是说,第二节点通过将响应至少一次广播的存活节点确定为该第二节点连通的存活节点,可以尽可能的找出的更多与第二节点连通的存活节点,提高第一集群中节点的利用率。
结合第二方面,在第二方面的第六种可能的实现方式中,在所述任期最新且日志最新的存活节点和各自所处的第二集群中,该第二节点所处的第二集群最大的条件下,在该第二节点接收所述仲裁节点发送的第一状态更新请求之前,还包括:该第二节点接收该仲裁节点发送的配置更新指令,其中,该配置更新指令用于将第三集群的配置信息更新到该第二节点上,该第三集群由该第二节点和该第二节点连通的上述存活节点组成;该配置信息包括第三集群中各节点的IP地址和通信端口。也即是说,通过将第三集群的配置信息更新到该第三节点上,可以让该第三节点发起选举投票的范围局限在第三集群中,保证能够选举出新的主节点,让第三集群成为新的集群,提高了集群的可用性。
结合第二方面,在第二方面的第七种可能的实现方式中,在上述任期最新且日志最新的存活节点各自所处的第二集群中,该第三节点所处的第二集群最大的条件下,在该第三节点接收该仲裁节点发送的第一状态更新请求之前,还包括:该第二节点接收该仲裁节点发送的日志回滚指令,其中,该日志回滚指令用于回滚该第三节点上未提交的日志。也即是说,通过对第三节点上未提交的日志进行日志回滚,可以避免新的节点进行日志复制时,日志出现混乱。
第三方面,本申请实施例提供了一种仲裁节点,该仲裁节点包括:发送单元和接收单元;其中,首先,该接收单元用于在第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点的情况下,接收至少一个第二节点发送的第一消息,该第一消息指示该第二节点所处的第二集群;每个该第二节点所处的第二集群包括该第二节点连通的上述存活节点;上述存活节点为该第一集群中与该仲裁节点连通的节点,该第二节点为上述存活节点中任期最新且日志最新的节点。然后,该发送单元用于向第三节点发送第一状态更新请求,用于更新所述第三节点为候选者状态;所述第三节点属于所述至少一个第二节点,在所述至少一个第二节点各自所处的第二集群中,所述第三节点所处的第二集群最大;被更新为候选者状态的所述第三节点用于在所述第三节点连通的存活节点中发起选举。
通过执行上述操作,该仲裁节点可以在第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,从存活节点中选出任期最新且日志最新的至少一个第二节点,然后,从这些第二节点中选出所处第二集群最大的第三节点,接着,更新该第三节点为候选者状态,最后回到原有的raft的协议中,让第三节点成为新的主节点,即更新第三节点为领导者状态。这样,节点集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,继续进行日志复制的工作。更重要的是,本申请中,通过上述步骤选取出来的主节点具有任期最新、日志版本最新且所处子集群最大的特征,显得选取出的主节点尤为可靠,所以通过上述步骤能够提高raft分布式系统的可靠性。
结合第三方面,在第三方面的第一种可能的实现方式中,该仲裁节点还包括:处理单元,其中,首先,该接收单元还用于在接收该第一集群中的至少一个第二节点发送的第一消息之前,接收该第一集群中的存活节点发送的第二消息,其中,该第二消息包括该第一集群中的存活节点的节点状态和节点标识。然后,该处理单元用于根据该第二消息判断是否该第一集群中有至少一半上述存活节点,且该第一集群中没有处于领导者状态的节点。也即是说,通过该仲裁节点接收到的第一集群中的存活节点发送的第二消息,该仲裁节点即可判断出第一集群中有多少存活节点,以及各存活节点的节点状态,实现了该仲裁节点对第一集群的实时监控,便于触发仲裁选举流程,有效的减少了第一集群无法正常工作的时间。
结合第三方面,在第三方面的第二种实现方式中,该发送单元还用于在该第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点的情况下,向该第一集群中的节点发送第二状态更新请求,该第二状态更新请求用于更新该第一集群中的节点为仲裁状态。被更新为仲裁状态的该第一集群中的节点不发起选举或投票。也即是说,通过更新第一集群中的节点为仲裁状态,可以防止在仲裁节点对第一集群进行仲裁选举的过程中,第一集群中的节点根据原有raft协议规定的方法选举,可以避免本申请仲裁选举和原有raft协议选举的产生冲突,为本申请仲裁选举流程提供了执行时间。
结合第三方面,在第三方面的第三种实现方式中,该接收单元还用于在接收该第一集群中的至少一个第二节点发送的第一消息之前,接收上述存活节点发送的第三消息,该第三消息包括上述存活节点的任期和日志版本。然后,该处理单元还用于根据该第三消息确定出上述至少一个第二节点。也即是说,仲裁节点通过选出任期最新且日志最新的上述至少一个第二节点,可以让最终选出的主节点符合raft协议中定义主节点的特征,可以确保最终选出的主节点的可靠性。
结合第三方面,在第三方面的第四种可能的实现方式中,该发送单元还用于在该接收单元接收该第一集群中的至少一个第二节点发送的第一消息之前,向上述至少一个第二节点发送第四消息,其中,该第四消息用于触发上述至少一个第二节点分别在该第一集群中进行广播,并将响应该广播的上述存活节点确定为上述第二节点连通的上述存活节点。也即是说,该仲裁节点通过让第二节点发送广播,确定出第二节点可连通的第二集群,可以使得在选出新的主节点后,新集群中的节点都能与新的主节点进行正常通信,完成日志复制工作,提高了选举流程选出的主节点的可靠性。
结合第三方面,或第三方面的第四种可能的实现方式,在第三方面的第五种可能的实现方式中,该第四消息具体用于触发上述至少一个第二节点各自在上述存活节点中进行N次广播,并将响应至少一次该广播的上述存活节点确定为上述第二节点连通的上述存活节点,N为正整数。也即是说,该仲裁节点通过将响应至少一次广播的存活节点确定为该第二节点连通的存活节点,可以尽可能的找出的更多与第二节点连通的存活节点,提高第一集群中节点的利用率。
结合第三方面,在第三方面的第六种可能的实现方式中,该发送单元还用于向该第三节点连通的上述存活节点发送第三状态更新请求,该第三状态更新请求用于更新该第三节点连通的上述存活节点为跟随者状态。被更新为跟随者状态的上述存活节点用于向被更新为候选者状态的该第三节点投票。也即是说,在该仲裁节点向第三节点发送第一状态更新请求的同时,仲裁节点可将第三节点连通的存活节点更新到跟随者状态,后续回归到raft协议中,处于跟随者状态的存活节点可向更新为候选者状态的第三节点投票,以完成选举。
结合第三方面,在第三方面的第七种可能的实现方式中,该发送单元还用于在向该第一集群中的第三节点发送第一状态更新请求之前,向该第三节点和该第三节点连通的上述存活节点发送配置更新指令,该配置更新指令用于将第三集群的配置信息更新到该第三集群中的各节点上,该第三集群由该第三节点和该第三节点连通的上述存活节点组成,该配置信息包括第三集群中各节点的IP地址和通信端口。也即是说,该仲裁节点通过将第三集群的配置信息更新到第三集群中的各节点上,可以让第三节点发起选举投票的范围局限在第三集群中,保证能够选举出新的主节点,让第三集群成为新的集群,提高了集群的可用性。
结合第三方面,在第三方面的第八种可能的实现方式中,该发送单元还用于在向该第一集群中的第三节点发送第一状态更新请求之前,向该第三节点和该第三节点连通的上述存活节点发送日志回滚指令,其中,该日志回滚指令用于回滚该第三节点和该第三节点连通的上述存活节点上未提交的日志。也即是说,该仲裁节点通过对第三集群中的节点进行日志回滚,可以避免新的节点进行日志复制时,日志出现混乱。
第四方面,本申请实施例提供了一种存储节点,该存储节点包括处理单元,发送单元和接收单元;其中,首先,在满足预设条件时,该发送单元用于向仲裁节点发送第一消息,该第一消息指示该存储节点所处的第二集群;其中,该预设条件为第一集群中有至少一半的节点为存活节点,且该第一集群中没有处于领导者状态的节点,上述存活节点为该第一集群中与该仲裁节点连通的节点;该存储节点为该第一集群中任期最新且日志最新的存活节点,该存储节点所处的第二集群包括该存储节点和该存储节点连通的所述存活节点。然后,在该存储节点所处的第二集群最大的情况下,该接收单元用于接收该仲裁节点发送的第一状态更新请求。接着,该处理单元用于根据该第一状态更新请求更新节点状态为候选者状态;被更新为候选者状态的该存储节点用于在该存储节点连通的存活节点中发起选举。
通过执行上述步骤,该存储节点在为第一集群中任期最新且日志最新的存活节点的条件下,且第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,筛选出所处的第二集群。然后,在该存储节点所处的第二集群最大的条件下,更新该存储节点为候选者状态,最后回到原有的raft的协议中,该存储节点成为新的主节点,即更新第三节点为领导者状态。这样,第一集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,继续进行日志复制的工作。更重要的是,本申请中,通过上述步骤选取出来的主节点具有任期最新、日志版本最新且所处子集群最大的特征,显得选取出的主节点尤为可靠,所以通过本申请实施例能够提高raft分布式系统的可靠性。
结合第四方面,在第四方面的第一种可能的实现方式中,该发送单元还用于向该仲裁节点发送第二消息,其中,该第二消息包括该存储节点的节点状态和节点标识,该第二消息用于该仲裁节点判断是否在该第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点。也即是说,通过该存储节点向仲裁节点发送第二消息,接收到第二消息后的仲裁节点即可判断出第一集群中有多少存活节点,以及各存活节点的节点状态,实现了仲裁节点对第一集群的实时监控,便于触发仲裁选举流程,有效的减少了第一集群的无法正常工作的时间。
结合第四方面,或第四方面的第一种可能的实现方式,在第四方面的第二种可能的实现方式中,该接收单元还用于在该第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点的情况下,接收该仲裁节点发送的第二状态更新请求;该第二状态更新请求用于更新该存储节点为仲裁状态。被更新为仲裁状态的该存储节点不发起选举或投票。也即是说,通过更新该存储节点为仲裁状态,可以防止在仲裁节点对第一集群进行仲裁选举的过程中,第一集群中的节点根据原有raft协议规定的方法选举,可以避免本申请仲裁选举和原有raft协议选举的流程产生冲突,为本申请仲裁选举流程提供了执行时间。
结合第四方面,在第四方面的第三种可能的实现方式中,该发送单元还用于在向仲裁节点发送第一消息之前,向该仲裁节点发送第三消息,该第三消息包括上述存活节点的任期和日志版本,该第三消息用于该仲裁节点确定出该任期最新且日志最新的存活节点。也即是说,通过仲裁节点确定出任期最新且日志最新的至少一个第二节点,可以让最终选举出的主节点符合raft协议中定义主节点的特征,可以保证最终选出的主节点的可靠性。
结合第四方面,在第四方面的第四种可能的实现方式中,首先,该接收单元还用于在该发送单元向仲裁节点发送第一消息之前,接收该仲裁节点发送的第四消息。然后,该处理单元还用于根据该第四消息在该第一集群中进行广播,并将响应该广播的所述存活节点确定为该第二节点连通的所述存活节点。也即是说,通过让该存储节点发送广播,确定出该存储节点可连通的第二集群,可以使得在选出新的主节点后,新集群中的节点都能与新的主节点进行正常通信,完成日志复制工作,提高了选举流程选出的主节点的可靠性。
结合第四方面的第四种可能的实现方式,在第四方面的第五种可能的实现方式中,该处理单元具体用于在上述存活节点中进行N次广播,并将响应至少一次该广播的上述存活节点确定为该存储节点连通的上述存活节点,N为正整数。也即是说,该存储节点通过将响应至少一次广播的存活节点确定为该第二节点连通的存活节点,可以尽可能的找出的更多与第二节点连通的存活节点,提高第一集群中节点的利用率。
结合第四方面,在第四方面的第六种可能的实现方式中,该接收单元还用于在该任期最新且日志最新的存活节点各自所处的第二集群中,该存储节点所处的第二集群最大的条件下,接收该仲裁节点发送的配置更新指令,其中,该配置更新指令用于将第三集群的配置信息更新到该存储节点上,该第三集群有该存储节点和该存储节点连通的上述存活节点组成,该配置信息包括第三集群中各节点的IP地址和通信端口。也即是说,通过将第三集群的配置信息更新到该存储节点上,可以让该存储节点发起选举投票的范围局限在第三集群中,保证能够选举出新的主节点,让第三集群成为新的集群,提高了集群的可用性。
结合第四方面,在第四方面的第七种可能的实现方式中,在上述任期最新且日志最新的存活节点各自所处的第二集群中,该存储节点所处的第二集群最大的条件下,该接收单元还用于在接收该仲裁节点发送的第一状态更新请求之前,接收该仲裁节点发送的日志回滚指令;该日志回滚指令用于回滚该存储节点上未提交的日志。也即是说,通过对该存储节点上未提交的日志进行日志回滚,可以避免新的节点进行日志复制时,日志出现混乱。
第五方面,本申请实施例提供了一种集群,该集群为第一集群,该第一集群包括至少一半存活节点,且该第一集群中没有处于领导者状态的节点;其中:首先,该第一集群中的至少一个第二节点用于向仲裁节点发送第一消息,该第一消息指示该第二节点所处的第二集群。上述存活节点为该第一集群中与该仲裁节点连通的节点,该第二节点为上述存活节点中任期最新且日志最新的节点。然后,该第一集群中的第三节点用于接收该仲裁节点发送的第一状态更新请求,该第三节点连通的上述存活节点接收该仲裁节点发送的第三状态更新请求。其中,该第三节点属于该至少一个第二节点,在该至少一个第二节点各自所处的第二集群中,该第三节点所处的第二集群最大。接着,该第三节点用于响应第一状态更新请求,更新为候选者状态,该第三节点连通的存活节点用于响应第三状态更新请求,更新为追随者状态。其中,被更新为候选者状态的该第三节点用于在该第三节点所处的该第二集群中发起选举,被更新为追随者状态的上述存活节点用于对更新为候选者状态的该第三节点投票。
通过执行上述步骤,仲裁节点可以在第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,从存活节点中选出任期最新且日志最新的至少一个第二节点,然后,从这些第二节点中选出所处第二集群最大的第三节点,接着,更新该第三节点为候选者状态,最后回到原有的raft的协议中,让第三节点成为新的主节点,即更新第三节点为领导者状态。这样,节点集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,继续进行日志复制的工作。更重要的是,本申请中,通过上述步骤选取出来的主节点具有任期最新、日志版本最新且所处子集群最大的特征,显得选取出的主节点尤为可靠,所以通过上述步骤能够提高raft分布式系统的可靠性。
结合第五方面,在第五方面的第一种实现方式中,该第一集群中的节点用于:在该第一集群中的至少一个第二节点向仲裁节点发送第一消息之前,发送第二消息给该仲裁节点,该第二消息包括该第一集群中的存活节点的节点状态和节点标识,该第二消息用于该仲裁节点判断是否在该第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点。也即是说,通过仲裁节点接收到的第一集群中的存活节点发送的第二消息,仲裁节点即可判断出第一集群中有多少存活节点,以及各存活节点的节点状态,实现了仲裁节点对第一集群的实时监控,便于触发仲裁选举流程,有效的减少了第一集群无法正常工作的时间。
结合第五方面,或者第五方面的上述任意一种可能的实现方式,在第五方面的第二种可能的实现方式中,该第一集群中的节点用于:接收该仲裁节点发送的第二状态更新请求,该第二状态更新请求用于更新该第一集群中的节点为仲裁状态,被更新为仲裁状态的该第一集群中的节点用于不发起选举或投票。也即是说,通过更新第一集群中的节点为仲裁状态,可以防止在仲裁节点对第一集群进行仲裁选举的过程中,第一集群中的节点根据原有raft协议规定的方法选举,可以避免本申请仲裁选举和原有raft协议选举的产生冲突,为本申请仲裁选举流程提供了执行时间。
结合第五方面,在第五方面的第三种可能的实现方式中,上述存活节点用于:在该第一集群中的至少一个第二节点向第节点发送第一消息之前,发送第三消息给该仲裁节点,其中,该第三消息包括上述存活节点的任期和日志版本,该第三消息用于该仲裁节点确定出该至少一个第二节点。也即是说,仲裁节点通过选出任期最新且日志最新的至少一个第二节点,可以让最终选出的主节点符合raft协议中定义主节点的特征,可以确保最终选出的主节点的可靠性。
结合第五方面,在第五方面的第四种可能的实现方式中,该第一集群中的至少一个第二节点还用于:首先,在向仲裁节点发送第一消息之前,接收该仲裁节点发送的第四消息;然后,响应该第四消息,在该第一集群中进行广播,并将响应该广播的上述存活节点确定为该第二节点连通的上述存活节点。也即是说,仲裁节点通过让第二节点发送广播,确定出第二节点可连通的第二集群,可以使得在选出新的主节点后,新集群中的节点都能与新的主节点进行正常通信,完成日志复制工作,提高了选举流程选出的主节点的可靠性。
结合第五方面,或者第五方面的上述任意一种可能的实现方式,在第五方面的第五种可能的实现方式中,该至少一个第二节点具体用于:首先,在向仲裁节点发送第一消息之前,接收该仲裁节点发送的第四消息;然后,响应该第四消息,在上述存活节点中进行N次广播,并将响应至少一次该广播的上述存活节点确定为该第二节点连通的上述存活节点,N为正整数。也即是说,仲裁节点通过将响应至少一次广播的存活节点确定为该第二节点连通的存活节点,可以尽可能的找出的更多与第二节点连通的存活节点,提高第一集群中节点的利用率。
结合第五方面,在第五方面的第六种可能的实现方式中,该第一集群中的该第三节点和该第三节点连通的上述存活节点,用于:在该第三节点接收该仲裁节点发送的第一状态更新请求之前,接收该仲裁节点发送的配置更新指令,其中,该配置更新指令用于将第三集群的配置信息更新到该第三集群中的各节点上,该第三集群由该第三节点和该第三节点连通的上述存活节点组成,该配置信息包括第三集群中各节点的IP地址和通信端口。也即是说,仲裁节点通过将第三集群的配置信息更新到第三集群中的各节点上,可以让第三节点发起选举投票的范围局限在第三集群中,保证能够选举出新的主节点,让第三集群成为新的集群,提高了集群的可用性。
结合第五方面,在第五方面的第七种可能的实现方式中,该第一集群中的该第三节点和该第三节点连通的上述存活节点,用于:在该第一集群中的第三节点接收该仲裁节点(arbitrator)发送的第一状态更新请求之前,接收该仲裁节点(arbitrator)发送的日志回滚指令;该日志回滚指令用于回滚该第三节点和该第三节点连通的上述存活节点上未提交的日志。也即是说,仲裁节点通过对第三集群中的节点进行日志回滚,可以避免新的节点进行日志复制时,日志出现混乱。
第六方面,本申请实施例提供了一种仲裁节点,该存储节点包括处理器和存储器;其中,该存储器用于存储计算机程序代码;该处理器用于执行该存储器存储的代码,使得该仲裁节点执行上述第一方面,或第一方面的任意一种可能的实现方式所描述的方法。
第七方面,本申请实施例提供了一种存储节点,该存储节点包括处理器和存储器;其中,该存储器用于存储计算机程序代码;该处理器用于执行该存储器存储的代码,使得该存储节点执行上述第二方面,或第二方面的任意一种可能的实现方式所描述的方法。
第八方面,本申请实施例提供了一种raft分布式系统,所述系统包括:仲裁节点和第二节点,其中:所述仲裁节点为第三方面或第六所述的仲裁节点;所述第二节点为第四方面或第七方面所述的存储节点。
第九方面,本申请实施例提供了一种raft分布式系统,其特征在于,包括:仲裁节点和第一集群,其中:所述仲裁节点为第一方面所述仲裁节点;所述第一集群为第五方面所述的集群。
第十方面,本申请实施例提供一种计算机可读存储介质,该计算机可读存储介质中存储有程序指令,当该程序指令在处理器上运行时,实现第一方面,或第一方面的任意一种可能的实现方式所描述的方法。
第十一方面,本申请实施例提供一种计算机可读存储介质,该计算机可读存储介质中存储有程序指令,当该程序指令在处理器上运行时,实现第二方面,或第二方面的任意一种可能的实现方式所描述的方法。
第十二方面,本申请实施例提供一种计算机程序产品,其特征在于,当该计算机程序产品在处理器上运行时,实现第一方面,或第一方面的任意一种可能的实现方式所描述的方法。
第十三方面,本申请实施例提供一种计算机程序产品,其特征在于,当该计算机程序产品在处理器上运行时,实现第二方面,或第二方面的任意一种可能的实现方式所描述的方法。
通过本申请实施例,仲裁节点可以在第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,从存活节点中选出任期最新且日志最新的至少一个第二节点,然后,从这些第二节点中选出所处第二集群最大的第三节点,接着,更新所述第三节点为候选者状态,最后回到原有的raft的协议中,让第三节点成为新的主节点,即更新第三节点为领导者状态。这样,节点集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,继续进行日志复制的工作。更重要的是,本申请中,通过上述步骤选取出来的主节点具有任期最新、日志版本最新且所处子集群最大的特征,显得选取出的主节点尤为可靠,所以通过本申请实施例能够提高raft分布式系统的可靠性。
附图说明
以下对本发明实施例用到的附图进行介绍。
图1是本申请中涉及的一种分布式系统的架构示意图;
图2是本申请的一个实施例提供的raft分布式系统选主方法的流程示意图;
图3是本申请的另一个实施例提供的raft分布式系统选主方法的示例性示意图;
图4是本申请的一个实施例提供的一种仲裁节点的结构示意图;
图5是本申请的另一实施例提供的一种第二节点的结构示意图;
图6是本申请的再一实施例提供的另一种仲裁节点的结构示意图;
图7是本申请的再一实施例提供的另一种第二节点的结构示意图。
具体实施方式
下面结合本发明实施例中的附图对本申请实施例进行描述。
请参见图1,图1是本申请实施例提供的一种raft分布式系统选主方法的网络架构的结构示意图,该网络架构包括客户端111、仲裁节点(Arbitrator)121、存储主节点(Leader,简称为主节点)131、存储从节点(Follower,也可简称为从节点或跟随节点)132。其中,客户端111可以为一个也可以为多个,在此不作限定;一个存储主节点(Leader)和至少一个存储从节点(Follower)可以构成一个节点集群,暂且称为第一集群130。第一集群130中的节点会将连通性上报给仲裁节点121,如果有节点的连通性很差或者仲裁节点121未接收到该节点上报的连通性信息,则仲裁节点121可以认为该节点出故障了。在第一集群130中的存储主节点(Leader)131崩溃了,无法正常完成日志复制工作,且第一集群130中有至少一半的节点未出故障的情况下,仲裁节点(Arbitrator)121就会进行仲裁选举,在第一集群130中选出最可靠的新的存储主节点(Leader),继续完成日志复制工作。需要说明的是,仲裁节点121可以是独立与第一集群130之外的一种特殊的节点,还可以是属于第一集群130中的未出现故障的任一存储节点,在满足本申请中的仲裁条件时,成为仲裁节点,对第一集群130进行仲裁选举流程,上述实现方式在此不作限定。
客户端111可以向存储主节点(Leader)131发送日志,并经由存储主节点(Leader)131复制到其他存储从节点(Follower)132上。
存储主节点(Leader)131中可以包括日志接收模块、日志序列管理模块、日志去重模块和日志持久化模块,其中,日志接收模块用于接收客户端111发送的日志以及其他信息。日志序列管理模块用于在内存和磁盘中维护在第一集群130里已达成一致的日志的日志序列号(Log Sequence Number,LSN),此处的已达成一致的日志是指该存储主节点(Leader)131已经同步复制到第一集群130中一半以上的节点中的日志。该日志去重模块用于对重复的日志进行过滤。该日志持久化模块用于对日志在本地进行持久光,并通过一致性同步复制协议把日志复制到其他存储节点进行持久化。
存储从节点(Follower)132中可以包括日志接收模块、日志序列管理模块、日志去重模块和日志持久化模块,其中,日志接收器用于接收存储主节点(Leader)131发送的日志以及其他信息。日志序列管理模块用于在内存和磁盘中维护在第一集群130里已达成一致的日志的日志序列号(Log Sequence Number,LSN),此处的已达成一致的日志是指该存储主节点(Leader)131已经同步复制到第一集群130中一半以上的节点中的日志。该日志去重模块用于对重复的日志进行过滤。该日志持久化模块用于对日志在本地进行持久化。
仲裁节点(Arbitrator)可包括节点故障监听模块、设置指令发送模块、节点信息接收模块和信息处理模块。其中,节点故障监听器用于监听第一集群中出现故障的节点,并统计出未出现故障节点的数目和节点标识。该设置指令发送器用于在监听到第一集群中没有存储主节点(Leader),且有至少一半的节点未出现故障的情况下,发送更新为仲裁状态的设置指令给第一集群中的节点。该节点信息接收模块用于接收第一集群中各节点的节点信息,节点信息可以包括节点的任期值(term)、日志版本的序列号(Log Sequence Number,LSN)以及与其他节点可连通的节点子集群等。该信息处理模块可以用于根据节点信息来结合各器件完成在第一集群中仲裁选举出新的存储主节点的过程。
可以理解的是,存储主节点(Leader)131、存储从节点(Follower)132和仲裁节点(Arbitrator)121中各个模块(或者说器件)是根据功能划分出来的功能模块,在具体实现中部分功能块可能被细分为更多细小的功能模块,部分功能模块也可能组合成一个功能模块,但无论这些功能模块是进行了细分还是组合,存储主节点(Leader)131和存储从节点(Follower)132上报连通性给仲裁节点(Arbitrator)121所进行的大致步骤是相同的。通常,每个功能模块都对应有各自的程序代码(或者说程序指令),这些功能模块各自对应的程序代码在处理器上运行时,使得功能模块执行相应的流程从而实现相应功能。
在本申请中,存储节点有四种状态,即领导者状态(Leader),候选者状态(Candidate),跟随者状态(Follower)和仲裁状态(Arbitrate)。其中,处于Leader状态的节点,是第一集群中的存储主节点,该存储主节点(Leader)负责向第一集群中的其他节点同步数据,在同一时刻,第一集群中最多只会有一个存储主节点(Leader)。处于Candidate状态的节点,是第一集群中可以成为存储主节点的候选者节点,该候选者节点(Candidate)会在第一集群中向其他节点发起选举,如果得到大部分节点的投票则可以成为存储主节点(Leader)。处于Follower状态的节点,是第一集群中的存储从节点,该存储从节点(Follower)会接收到存储主节点(Leader)发送过来的日志,若存储主节点出现故障了,该存储从节点(Follower)就可以经过仲裁节点(Arbitrator)的筛选更新状态成为候选者节点(Candidate),进而发起选举,如果得到大部分节点的投票,就可以成为新的存储主节点(Leader)。
特别地,Arbitrate是本申请中让第一集群中的节点处于待机的一种状态,处于Arbitrate下的节点不发起选举或投票,可以配合仲裁节点(Arbitrator)进行本申请中进行仲裁选举出主节点的流程。当第一集群中存储主节点(Leader)出现故障,且有至少一半的节点未出现故障的情况下,仲裁节点(Arbitrator)就会更新第一集群中的所有节点至Arbitrate状态,在仲裁节点选出了最可靠的备选主节点之后,就可以将该备选主节点从Arbitrate状态更新到Candidate状态,就可以将该备选主节点的其他节点从Arbitrate状态更新到Follower状态。继而,处于Candidate状态下的该备选主节点就会发起选举,最终成为新的存储主节点。
在现有技术的raft协议中,存储节点(简称为节点)的状态只能是Leader,Candidate,Follower这三种状态中的一种。当任意一个Follower节点在一定的时间内未收到Leader发送的心跳,则会变为candidate状态,进入raft选举流程,整个选举流程可有如下步骤:
1.Follower节点超过选举超时时间(通常是150ms-300ms之间的一个随机数)未收到Leader发送的心跳,则变为candidate状态。
2.变为Candidate状态的节点投自己一票。
3.变为Candidate状态的节点向其他节点发送一个投票请求(VoteRequest),请求其他节点投自己一票,如果收到的票数大于集群中节点的总数的一半,则选举成功,该Candidate节点的任期值加1,该Candidate节点变更状态为Leader状态,成为新的主节点;否则选举失败,变为Follower节点,重复步骤1。
在上述现有技术的raft协议选举流程中,当集群中刚好有一半的节点出现故障时,raft协议无法再继续工作,也无法选出主节点。在此约束下,当集群中拥有偶数个节点时,能够允许故障的节点数,与(该偶数减1)个节点数是相同的。例如,拥有6个节点的集群,与拥有5个节点的集群一样,都只能允许2个节点故障。
实际上,集群的节点数越多并非意味着该集群所处的分布式系统可靠性越强。假设集群中每个节点的故障概率是0.1,每个节点间故障相互独立,6个节点集群与5个节点集群都最多只允许2节点故障,根据二项式定理,可以计算出6个节点集群可用性概率和5个节点集群可用性概率:
6个节点的集群可用性概率=0节点故障概率+1节点故障概率+2节点故障概率=0.98415;
5个节点的集群可用性概率=0节点故障概率+1节点故障概率+2节点故障概率=0.99144;
可见,5个节点的集群可用性比6个节点的集群可用性要高,原因是6个节点的集群多个1个节点,也增加了更多的故障的可能性。
而本申请中提供的一种raft分布式系统的选主方法,能够在集群中有一半节点故障时,仍然能够继续工作,那么一个4个节点的集群,同样也能允许2个节点故障,达到了6个节点的集群所达到效果,其加入每个节点出故障的概率为0.1,根据二项式定理,可以算出该4个节点的集群可用性概率为:
4个节点的集群可用性概率=0节点故障概率+1节点故障概率+2节点故障概率=0.9963;
可以看出,通过本申请中提供的一种raft分布式系统的选主方法,在集群中有一半节点故障时,仍能集群继续工作,那么4个节点集群的可用性概率会比原有的raft协议的5个节点的集群可用性概率和6个节点的集群可用性概率更高,还能够降低三分之一左右的成本。
另外,根据现有raft协议中的选举流程,当Follower节点在选举超时时间内没有接收到心跳时,变为Candidate状态,进行选举。而该选举超时时间,是随机产生的,因此当旧主节点出现故障时,即旧的Leader节点出现故障时,所有的Follower节点都会产生一随机的选举超时时间,此时,超时时间小的Follower节点,就很有可能是未来的新主节点,即新Leader节点。但是,超时时间最小的节点,并不代表是集群中可靠、最适合成为Leader的节点。
通过本申请提供的一种raft分布式系统的选主方法,即使在该raft分布式系统的集群中有一半节点出现故障的情况下,仍能够让该raft分布式系统选出完成选举,选出可靠的主节点,正常工作,提高了raft分布式系统的可靠性。
下面说明本申请提供raft分布式系统选主方法的总体流程。
请参见图2所示、图2是本申请实施例提供的raft分布式系统选主方法的流程示意图,该方法可以基于图1所示的raft分布式系统选主方法的网络架构来实现。
需要说明的是,图2中的仲裁节点,可以是一种特殊功能的存储节点,能够更改第一集群中节点状态。第一集群包括有至少一个存储节点,第二节点可以是第一集群中的任意一个存储节点,在经过仲裁节点进行一系列筛选之后,能够成为最终新的主节点。并且,第一集群中的节点都是保留有原有raft协议的存储节点,能够执行原有raft协议的规定的工作内容。在本实施例及后续的其他具体的实施例中,存储节点可以简称为节点。
图2所示方法包括但不限于如下步骤S201-S212,该步骤具体内容可如下:
S201、仲裁节点接收第一集群中的存活节点发送的第二消息,第二消息中包括存活节点的节点状态和节点标识。
具体的,存活节点为第一集群中与能够与仲裁节点连通的节点,与仲裁节点连通即能够与仲裁节点进行正常的通信。第二消息可以是第一集群中的存活节点向仲裁节点发送的心跳消息或者其他连通性消息。第一集群中的所有存活节点都可以周期性的向仲裁节点发送第二消息,例如,存活节点可以每隔0.1ms、1ms或2ms等时间向仲裁节点发送第二消息。其中,第一集群中的故障节点,也具有周期性的向仲裁节点发送第二消息的功能。但是,由于该故障节点已经出现了故障,所以该故障节点无法向仲裁节点发送该第二消息;或者,该故障节点可以发送第二消息,但是由于该故障节点和仲裁节点的通信链路出现了故障,导致了仲裁节点无法接收到该故障节点发送的第二消息。示例仅仅用于解释本申请,不应构成限定。
在一种可能的情况下,第一集群中的存活节点也可以在接收到仲裁节点发送的获取心跳指令之后,反馈该第二消息给仲裁节点。或者,仲裁节点可以向第一集群中的节点发送广播,第一集群中的存活节点会接收到仲裁节点发送的广播,并反馈携带有各自的节点状态和节点标识的第二消息给仲裁节点。第一集群中的故障节点,由于接收不到仲裁节点发送的广播,便不会向仲裁节点反馈第二消息。其中,仲裁节点发送的获取心跳指令或者广播也可以是周期性的,发送周期可以是0.1ms、1ms、2ms等,在此不作限定。
第二消息包括的节点状态和节点标识,可用于仲裁节点判断第一集群中的节点是否满足仲裁条件,即是否第一集群中有至少一半存活节点,且没有处于领导者状态的及节点。该节点状态包括领导者(Leader)状态,候选者(Candidate)状态和/或跟随者(Follower)状态这三种状态中的一种。该节点标识即节点的ID是识别号,可以是节点的Mac地址、IP地址或者其他标识等,不同的节点的节点标识不一样。通过仲裁节点接收到的第一集群中的存活节点发送的第二消息,仲裁节点即可判断出第一集群中有多少存活节点,以及各存活节点的节点状态,实现了仲裁节点对第一集群的实时监控,便于触发仲裁选举流程,有效的减少了第一集群的无法正常工作的时间。
S202、仲裁节点根据第二消息判断是否第一集群中有至少一半存活节点,且第一集群中没有处于领导者状态的节点,若是,则执行步骤S203第一集群中的节点更新为仲裁状态及后续步骤。
具体的,上述存活节点为第一集群中可以与仲裁节点连通的节点,也即是说,可以与仲裁节点进行通信的节点,即仲裁节点接收到的第二消息标记的节点。第二消息标记了该第二消息的发送方的节点状态和节点标识,仲裁节点可以根据接收到的至少一个第二消息中不同节点标识的数量即为存活节点的数量。
需要说明的是,仲裁节点在于第一集群中的各节点建立了通信链路连接时,可以得知第一集群中的成员列表,即可以获知到第一集群中的节点总数。因此,仲裁节点可以根据第二消息判断是否第一集群中有至少一半存活节点。
进一步的,仲裁节点可以根据上述第二消息中的节点状态来判断是否第一集群中没有处于领导者状态的节点。因此,仲裁节点可以完成判断是否第一集群中有至少一半的存活节点,且第一集群中没有处于领导者状态的节点。
在一种可能的情况下,第一集群中的不同的存活节点向仲裁节点发送第二消息的时刻各有不同。针对上述可能的情况,为了尽量减少对第一集群中存活节点数量的误判,仲裁节点可以统计预设时间段内接收到的第二消息。由于第二消息携带有发送方节点的节点标识,所以即使在该预设时间段内有一存活节点向仲裁节点发送了多条第二消息,仲裁节点也可以判断出这多条第二消息属于同一个存活节点,在统计存活节点数目时,这多条第二消息也只能对应一个存活节点。通过,仲裁节点根据预设时间段内接收到的第二消息判断是否第一集群中有至少一半存活节点,且第一集群中没有处于领导者状态的节点,能够减少仲裁节点的对第一集群中存活节点数量的误判,提高了仲裁节点判断的精准性。
S203、第一集群中节点更新为仲裁状态。
具体的,在仲裁节点判断出第一集群中有至少一半的存活节点,且第一集群中没有处于领导者状态的节点的情况下,第一集群中的节点可以更新为仲裁状态,处于该仲裁状态下的节点不会发起选举和/或投票,也即是说,处于该仲裁状态下的节点会暂停执行原有raft协议中的选举流程。
具体实现中,在第一集群中的节点更新为仲裁状态之前,仲裁节点可以向第一集群中的节点发送第二状态更新请求,该第二状态更新请求用于更新第一集群中节点为仲裁状态。第一集群中节点,若接收到第二状态更新请求,则会更新自己的状态为仲裁状态。
这里需要说明的是,若不更新第一集群中的节点为仲裁状态,第一集群可以根据raft协议中的选举超时时间随机出现候选者(Candidate)状态的节点,不断发起选举且不断的选举失败。这样的话,即使通过后续步骤选出了新主节点,让该新的主节点在新集群中发起选举,但是由于有其他节点一直在发起选举,而每一个节点的只有一票,投票给其他节点了就不能投票给本申请中筛选出的主节点,所以会存在筛选出主节点依然不能够选举成功的情况。所以,若不更新第一集群中的节点为仲裁状态,会让本申请仲裁选举和原有raft协议选主产冲突。
通过更新第一集群中的节点为仲裁状态,可以防止在仲裁节点对第一集群进行仲裁选举的过程中,第一集群中的节点根据原有raft协议规定的方法选主,可以避免本申请仲裁选举和原有raft协议选举产生冲突,为本申请仲裁选举流程提供了执行时间。
在一种可能的情况下,第一集群中存活节点由于能够与仲裁节点连通,所以存活节点能够接收到仲裁节点发送的第二状态更新请求。但是,第一集群中的故障节点由于不能够与仲裁节点连通,所以接收不到仲裁节点发送的第二状态更新请求,无法更新到仲裁状态,若在存在一故障节点恢复正常了,想让该恢复正常的节点继续参与到选举流程中,就必须让该恢复正常的节点变更为仲裁状态。
为了解决上述问题,在仲裁节点判断完第一集群中有至少一半存活节点,且第一集群中没有出领导者状态的节点之后,若存在故障节点恢复正常,该恢复正常的节点就会与仲裁节点恢复正常通信,在与仲裁节点恢复正常通信后,仲裁节点可以根据该恢复正常节点发送的携带有节点状态和节点标识的第二消息,发现该恢复正常的节点还未处于仲裁状态,于是就可以发送第二状态更新请求给该恢复正常的节点,使其更新到仲裁状态,参与后续的选举流程。通过这种方式,能够让故障节点恢复正常之后能够继续正常工作,提高了集群中节点的利用率。
S204、仲裁节点接收第一集群中存活节点发送的第三消息,其中,第三消息包括存活节点的任期和日志版本。
具体的,任期的新旧可以用任期ID(termID)来表示,任期ID初始值为0,每选举成功一次,任期ID增加1,任期最新,即任期ID最大。日志版本的新旧可以用日志序列号(LogSequence Number,LSN)来表示,日志序列号的初始值为0,每复制成功一次日志,日志序列号的值增加1,日志版本最新即日志序列号最大。除此之外,第三消息还可以包括存活节点的ID标识,仲裁节点通过该ID标识能够获知到该第三消息的发送方。
S205、仲裁节点筛选出第一集群中的至少一个第二节点,其中,第二节点的任期最新且日志版本最新。
具体的,仲裁节点可以根据上述第三消息筛选出第一集群中的至少一个第二节点。由于第三消息中携带有发送该第三消息的存活节点的termID和LSN,所以,在仲裁节点接收到存活节点发送的第三消息之后,就可以筛选床termID最大且LSN最大的至少一个第二节点。根据raft协议中主节点的特征,主节点的任期和日志都是最新的。所以,最终选出的新的主节点只能在这至少一个第二节点中产生。仲裁节点通过选出任期最新且日志最新的至少一个第二节点,可以让最终选出的主节点符合raft协议中定义主节点的特征,可以保证最终选出的主节点的可靠性。
S206、仲裁节点向至少一个第二节点发送的第四消息,触发上述至少一个第二节点获取各自所处的第二集群。
具体的,第四消息可以触发上述至少一个第二节点各自在第一集群中进行广播,并将响应广播的存活节点确定为各自第二集群中的成员。一个第二节点所处的第二集群,即可以包括该第二节点及该第二节点连通的存活节点。上述至少一个第二节点在接收到仲裁节点发送的第四消息之后,都会在第一集群中进行广播,且不同第二节点所发送广播的标识不同,这样,可以让存活节点接收到的多个第二节点的广播时,能够分别进行响应,可以让上述至少一个第二节点得到存活节点的准确响应。
S207、第一集群中的至少一个第二节点在第一集群中进行广播,确定出至少一个第二节点各自所处的第二集群。
具体的,该广播可用于上述至少一个第二节点找到各自所处的第二集群。上述至少一个第二节点在接收到仲裁节点发送的第四消息之后,可以在第一集群中进行广播,找到响应该广播的存活节点,并将响应该广播的存活节点确定为发送该广播的第二节点所处的第二集群中的成员。一个第二节点发送的广播可以携带有该第二节点的节点标识,在存活节点接收到该第二节点发送的广播之后,存活节点即可以根据广播中携带的该第二节点的标识,给该第二节点作出响应。在该第二节点接收到该存活节点的作出的响应之后,该第二节点可以将该存活节点作为该第二节点所处第二集群的成员。
需要说明的是,一个存活节点在接收到多个不同的第二节点发送的广播之后,就可以按照不同广播中的第二节点的节点标识,来分别响应这多个不同的第二节点。也即是说,一个存活节点可以是多个不同的第二集群中的成员。
作为一种可选的实现方式,第二节点可以在第一集群中循环进行N次广播,并将响应至少一次广播的存活节点确定为该第二节点连通的存活节点,即确定该存活节点为该第二节点所处的第二集群中的成员,N为正整数。
具体实现中,广播中可以包含有广播id,广播id的初始值可以为1,第二节点每发送一次广播,广播id的值加1,当广播id达到N时,第二节点便不再继续进行广播。第二节点可以通过广播id统计每次广播接收到响应的存活节点的节点id集合,并将N次广播产生的节点集合进行并集,得到该第二节点所处的第二集群。这样,通过将响应至少一次广播的存活节点确定为该第二节点连通的存活节点,可以尽可能的找出的更多与第二节点连通的存活节点,提高了第一集群中节点的利用率。
需要说明的是,一个存活节点响应了一个第二节点发送的广播之后,就说明这两个节点可以连通,具备相互通信的条件,若该第二节点更新为了候选者状态,发起了选举,则该第二节点就有了收到该存活节点“选票”的资格。
通过让第二节点发送广播,确定出第二节点可连通的第二集群,可以使得在选出新的主节点后,新集群中的节点都能与新的主节点进行正常通信,完成日志复制工作,提高了选举流程选出的主节点的可靠性。
S208、仲裁节点接收到第一集群中至少一个第二节点发送的第一消息。其中,第一消息用于指示所述第二节点所处的第二集群。
具体的,该第一消息可以带有第二节点所处第二集群的成员列表。该成员列表可以用节点id的集合来表示,例如:节点id集合{节点id1,节点id2,节点id3……,节点idM}可以用来表示一个第二节点所处第二集群的成员列表,M为正整数。其中,处于该成员列表表头位置的节点可以是发送该第一消息的第二节点,也即是说,在上述节点id集合中,“节点id1”可以表示一个第二节点,“节点id2、节点id3,……,节点idM”,可以表示该第二节点连通的M-1个存活节点。第一消息通过接收到第一集群中至少一个第二节点发送的第一消息,可以获取到上述至少一个节点各自所处的第二集群。
S209、仲裁节点筛选出第三节点。其中,第三节点属于所述至少一个第二节点,且在所述至少一个第二节点所处的第二集群中,第三节点的所处的第二集群最大。
具体的,仲裁节点在接收到上述至少一个第二节点发送的第一消息之后,可以根据第一消息,从上述至少一个第二节点中筛选出第三节点,其中,第三节点属于上述至少一个第二节点,且第三节点所处的第二集群的最大,即第三节点所处的第二集群的成员数最多。第三节点所处的第二集群,也可以称之为第三集群,第三集群即包括第三节点与第三节点连通的存活节点。若存在多个第二节点所处的第二集群成员数最多时,仲裁节点可以随机任意确定其中的一个第二节点为第三节点。
通过让仲裁节点从上述至少一个节点中和筛选出所处第二集群最大的一个作为第三节点,并且确定出第三节点所处的最大第二集群为第三集群,可以实现让第三节点成为最终的新节点,让第三集群成为新的集群,可以保证选出主节点的可靠性和日志在新的集群进行分布式复制的安全性。
S210、仲裁节点发送配置更新指令给第三节点及第三节点连通的存活节点。
具体的,配置更新指令用于将第三集群的配置信息更新到第三集群中的各节点上。第三集群包括上述第三节点及第三节点连通的存活节点。该配置指令可以包括第三集群中各节点的IP地址和通信端口,除此之外,还可以包括第三集群中的成员列表、配置参数和调制参数以及其他第三集群的详细信息等。第三集群中的各节点在接收到仲裁节点发送的配置更新指令之后,就可以得知第三集群中其他各节点的IP地址和通信端口以及其他相关信息。第三集群中的节点需要和其他节点进行通信(或者说发起选举/投票、日志复制等)时,可以利用该配置信息找到需要通信的节点的配置,进行正常的通信。
通过将第三集群的配置信息更新到第三集群中的各节点上,目的是让仲裁节点筛选出的新的主节点,即第三节点,发起选举投票的范围局限在第三集群中,而不是之前的第一集群中,若第三节点还是在第一集群中发起投票,则仍然不能够选举成功。通过将第三集群的配置信息更新到第三集群中的各节点上,可以保证能够选举出新的主节点,可以让第三集群成为新的集群,提高了集群的可用性。
S211、仲裁节点发送日志回滚指令给第三节点及第三节点连通的存活节点。
具体的,第三节点及第三节点连通的存活节点,即第三集群中的节点,接收到仲裁节点发送的日志回滚指令之后,可以回滚掉各自节点上未提交的日志,也就是将未提交的日志从节点的缓存区中删除。
下面解释需要进行日志回滚的原因:
在raft分布式系统中,是采用日志的方式来传输数据,所有对系统数据的添加、修改和删除,raft协议都会将其封装成日志,然后把日志复制给其他follower节点,这个过程叫做日志复制。日志复制的整个过程可包括5个步骤:
1.Leader节点复制日志到所有Follower节点;
2.当一半及以上副本节点响应时,Leader节点才提交日志,Leader上的日志LSN加1;
3.Leader通知所有Follower节点,日志已提交;
4.所有Follower也提交日志,Follower上的日志LSN加1;
5.整个系统的日志处于一致状态。
可以看出,日志先复制到Follower节点的缓存区,当接收到Leader节点的提交通知之后,Follower节点才将日志提交,一次日志复制才算成功。若在上述第3步骤之前,Leader出现了故障,崩溃了,Follower节点接收不到Leader节点的提交通知,则不能保证所有的Follower节点上都有该日志,也就不能保证数据的一致性。为了保证raft系统中节点上数据的一致性,对于未提交成功的日志需要进行删除。通过对第三集群中的节点进行日志回滚,可以避免新的节点进行日志复制时,日志出现混乱。
S212、仲裁节点向第三节点发送第一状态更新请求,向第三节点连通的存活节点发送第三状态更新请求。其中,第一状态更新请求用于更新所述第三节点为候选者状态;第三状态更新请求用于更新所述第三节点连通的存活节点为跟随者状态。
具体的,第三节点接收到第一状态更新请求之后,可以从仲裁状态更新到候选者状态。第三节点连通的存活节点接收到第三状态更新请求之后,可以从仲裁状态更新到跟随者状态。然后,将第三集群中的节点回归到raft协议,执行raft协议的选举流程,raft协议的选举流程可如下步骤:
1.处于候选者(Candidate)状态的第三节点投自己一票;
2.处于候选者(Candidate)状态的第三节点向处于跟随者(Follower)状态的其他节点发送一个投票请求(VoteRequest),请求处于跟随者(Follower)状态的其他节点投票给自己;
3.在投票超时时间内,处于候选者(Candidate)状态的第三节点统计收到的票数,连上投给自己的一票,如果收到的票数超过第三集群中节点的总数/2,则选举成功,termID加1,处于候选者(Candidate)状态的节点更新状态为领导者(Leader)状态,成为新的主节点。
通过上述步骤可以看出,当将第三集群中的节点回归到raft协议,处于候选者状态的第三节点,可以在第三集群中发起选举,可以向第三节点连通的存活节点发送投票请求;处于跟随者状态的节点,在接收到第三节点的投票请求之后,可以投票给第三节点,以选举出第三节点为新的主节点。由于,第三节点是第三集群中任期最新且日志最新的节点,所以具备成为主节点的条件,所以,处于跟随者状态的节点,在接收到第三节点的投票请求之后,一定会投票给第三节点,推举出第三节点为新的主节点,在第三集群中完成日志复制工作。至此,即完成了整个选举过程。
通过本申请实施例,首先,在第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,从存活节点中选出任期最新且日志最新的至少一个第二节点,然后,从这些第二节点中选出所处第二集群最大的第三节点,接着,更新所述第三节点为候选者状态,最后回到原有的raft的协议中,让第三节点成为新的主节点。通过本申请实施例,可以让第一集群即使有一半节点出现故障时,也能完成选举,选举出新的主节点和可靠的新集群,提高了raft分布式系统的可靠性。
下面以图3所示的包括有六个节点的第一集群为例,说明上述图2实施例的具体实施。
请参见图3所示、图3是本申请实施例提供的一种raft分布式系统的选主方法,该方法可以基于图1所示的raft分布式系统选主方法的网络架构来实现。
需要说明的是,图3中第一集群以六个存储节点Node1、Node2、Node3、Node4、Node5和Node6作为示例,其中Node4、Node5、Node6已出现故障,为故障节点,Node1、Node2、Node3未出现故障,为存活节点。不限于图3所示,第一集群包括的节点以及节点的存活状况还可以为其他情况,这里不作限定。图3中的仲裁节点即仲裁节点,能够更改第一集群中节点的节点状态。以下实施例,存储节点简称为节点。
图3所示方法包括但不限于如下步骤S301-S311,其中,上述步骤可以大体可以分为(一)选主流程触发阶段、(二)筛选主节点阶段和(三)强制选主阶段;具体内容如下:
(一)选主流程触发阶段
步骤S301:第一集群中的存活节点向仲裁节点发送第二消息。其中,第二消息包括第一集群中的存活节点的节点状态和节点标识。
具体的,第一集群中的存活节点包括:Node1、Node2、Node3。第二消息可以是第一集群中存活节点发送的心跳消息或者其他连通性消息等。第一集群中的存活节点都可以周期性的向仲裁节点发送第二消息。例如,Node1、Node2、Node3可以每隔0.1ms、1ms或2ms等时间向仲裁节点发送第二消息。其中,Node4、Node5和Node6也具有周期性的向仲裁节点发送第二消息的功能。但是,由于Node4、Node5和Node6已经出现了故障不会向仲裁节点发送第二消息,或者即使发送了,仲裁节点也接收不到Node4、Node5和Node6发送的第二消息。
可选的,第一集群中的节点Node1、Node2、Node3也可以在接收到仲裁节点发送的获取心跳指令之后,反馈该第二消息给仲裁节点。其中,仲裁节点发送的获取心跳指令也可以是周期性的,发送周期可以是0.1ms、1ms、2ms等,在此不作限定。
第二消息包括的节点状态和节点标识,可用于仲裁节点判断第一集群中的节点是否满足仲裁选举流程的条件,即判断是否第一集群中有至少一半(至少三个)存活节点,且没有处于领导者状态的节点。该节点状态包括领导者(Leader)状态,候选者(Candidate)状态和跟随者(Follower)状态这三种状态,该节点标识即节点的ID识别号,可以是节点的Mac地址、IP地址或者其他标识等。不同的节点的节点标识不一样,即Node1、Node2、Node3、Node4、Node5和Node6各自的节点标识都不一样。
通过仲裁节点接收到的第一集群中的Node1、Node2、Node3发送的第二消息,仲裁节点即可判断出第一集群中有多少存活节点,以及各存活节点的节点状态,实现了仲裁节点对第一集群的实时监控,便于触发仲裁选举流程,有效的减少了第一集群的无法正常工作的时间。
步骤S302:仲裁节点根据第二消息判断是否第一集群中有至少一半存活节点,且没有处于领导者状态的节点。若是,则进行步骤S303。
具体的,上述第二消息标记了该第二消息的发送方节点的节点状态和节点标识,仲裁节点根据接收到的至少一个第二消息中不同节点标识的数量即为存活节点的数量。仲裁节点接收到了Node1、Node2、Node3发送的第二消息,因此,仲裁节点可以判断出第一集群中存活节点有Node1、Node2、Node3这3个节点。而仲裁节点在与第一集群中的各节点建立了物理链路连接时,就可以得知第一集群的成员列表,即可以获知到第一集群中的成员数为6个。因此,根据第二消息,仲裁节点就可以判断是否第一集群中有至少一半存活节点。
仲裁节点可以根据上述第二消息中的节点状态来判断出是否第一集群中没有处于领导者状态的节点。其中,Node1、Node2和Node3不处于领导者状态,Node4、Node5和Node6已出故障,在仲裁节点看来,可以认为Node4、Node5和Node6也不处于领导者状态。
因此,仲裁节点可以判断出第一集群中存活节点有Node1、Node2和Node3这3个节点,且第一集群中的Node1、Node2和Node3不处于领导者状态,即满足仲裁条件:第一集群中有至少一半存活节点,且没有处于领导者状态的节点。可以执行如下步骤S203。
步骤S303:仲裁节点向第一集群中的节点发送第二状态更新请求,第二状态更新请求用于更新第一集群中的节点为仲裁状态。
具体的,仲裁状态(Arbitrate)是本申请中让第一集群中的节点处于待机的一种状态,处于该仲裁状态下的第一集群中节点不会发起选举和/或投票,也即是说,处于该仲裁状态下的节点会暂停执行原有raft协议中的选主流程。Node1、Node2、Node3在接收到第二状态更新请求之后,可以从之前的候选者状态或者跟随者状态更新到仲裁状态,不再进行选举或投票。
在本申请的(一)选主流程触发阶段中,通过让第一集群中即使有一半节点故障时,仍然可以完成选举,可以提高了节点的利用率。当第一集群满足仲裁选举条件时,将第一集群中的节点更新仲裁状态,可以防止在仲裁节点对第一集群进行仲裁选举的过程中,第一集群中的节点根据原有raft协议规定的方法选主,可以避免本申请仲裁选举和原有raft协议选主产生冲突。为本申请仲裁选举方案提供了执行时间。
在执行完(一)选主流程触发阶段之后,仲裁节点判断出第一集群满足仲裁条件之后,将会进入(二)筛选主节点阶段,筛选出新的主节点。
(二)筛选主节点阶段
步骤S304:第一集群中的存活节点Node1、Node2和Node3向仲裁节点发送第三消息。其中,第三消息包括存活节点的任期和日志版本。
具体的,任期新旧可以用任期ID(termID)来表示,任期ID初始为0,每选举成功一次,任期ID增加1,任期最新,即任期ID最大。日志版本的新旧可以用日志序列号(LogSequence Number,LSN)来表示,日志序列号的初始值为0,每复制成功一次日志,日志序列号的值增加1,日志版本最新即日志序列号最大。
在本申请实施例中,不妨假设Node1发送给仲裁节点的第三消息中的termID为5,LSN为8;Node2发送给仲裁节点的第三消息中的termID为5,LSN为8;Node3发送给仲裁节点的第三消息中的termID为5,LSN为7。可以看出,Node1、Node2和Node3的termID都是最大的,但Node1和Node2的LSN最大。
在仲裁节点接收到Node1、Node2和Node3发送的第三消息之后,仲裁节点可以根据第三消息来筛选出任期最新且日志最新的两个第二节点,即Node1和Node2。
在本申请实施例中,仲裁节点通过选出任期最新且日志最新的Node1和Node2,可以让最终从Node1和Node2选出的主节点符合raft协议中定义主节点的特征,可以保证最终选出的主节点的可靠性。
通过上述步骤可以筛选出第二节点Node1和Node2,接下来通过步骤S205-S207来确定出Node1和Node2所能够正常工作的第二集群,即可以与Node1进行正常通信的存活节点的集合和可以与Node2进行正常通信的存活节点的集合。
步骤S305:仲裁节点向Node1和Node2发送第四消息。其中,第四消息用于触发Node1和Node2分别在第一集群中进行广播。
具体的,仲裁节点在筛选出第二节点Node1和Node2之后,就可以向Node1和Node2发送第四消息,指示Node1和Node2在第一集群中进行广播。
步骤S306:Node1和Node2在第一集群中进行广播。
具体的,Node1在接收到仲裁节点发送的第四消息之后,可以在第一集群中发送广播,找到响应该广播的其他存活节点Node2和Node3,并将响应该广播的其他存活节点Node2和Node3作为Node1所处第二集群(集群A)的成员。该广播附带有Node1的标识,在Node2接收到Node1发送的广播之后,Node2可以按照广播中Node1标识,给Node1作出响应。Node2在接收到仲裁节点发送的第四消息之后,可以在第一集群中发送广播,找到响应该广播的其他存活节点Node1,并将响应该广播的其他存活节点Node1作为Node2所处第二集群(集群B)的成员。该广播附带有Node1的标识,在Node1接收到Node2发送的广播之后,Node1可以按照广播中Node2标识,给Node2作出响应。
作为一种可选的实现方式,Node1和Node2可以分别在第一集群中循环进行N次广播,并将响应至少一次广播的存活节点确定为Node1和Node2各自连通的存活节点,即确定响应的各自广播的存活节点为Node1和Node2各自第二集群中的成员,N为正整数。
具体实现中,广播中可以包含有广播id,广播id的初始值可以为1,Node1和Node2每发送一次广播,各自的广播id的值加1,当广播id达到N时,Node1和Node2便不再继续进行广播。Node1和Node2可以通过广播id统计每次广播接收到响应的存活节点的节点id集合,并将N次广播产生的节点集合进行并集,得到Node1和Node2各自的第二集群。其中,Node1的第二集群(集群A)可以是{Node1,Node2,Node3},集群A中第一个位置是Node1,即可表示集群A为Node1所处的第二集群;Node2的第二集群(集群B)可以是{Node2,Node1},集群B中第一个位置是Node2,即可标识集群B为Node2所处的第二集群。
通过仲裁节点通过让Node1和Node2发送广播,可以找出Node1和Node2各自可连通的第二集群,可以使得在从Node1和Node2中选出新的主节点后,新集群中的节点都能与主节点进行正常通信,完成日志复制工作。
步骤S307:Node1和Node2向仲裁节点发送第一消息。其中,第一消息用于指示Node1或Node2各自所处的第二集群。
具体的,Node1的第二集群(集群A)可以是{Node1,Node2,Node3},为3个节点的集群;Node2的第二集群(集群B)可以是{Node2,Node1},为2个节点的集群,所以Node1的第二集群(集群A){Node1,Node2,Node3}为最大的第二集群。
仲裁节点在接收到Node1和Node2发送的第一消息之后,通过对比集群A和集群B的数量,集群A为最大的第二集群,因此,仲裁节点可以将Node1确定为第三节点,即新的主节点,集群A,可以被确定为第三集群,即新的集群。
若集群A和集群B的数量一样多时,则仲裁节点可以随机任意选取Node1作为第三节点,集群A作为第三集群;或者,Node2作为第三节点,集群B作为第三集群。
通过仲裁节点让第二节点Node1和Node2在第一集群中进行广播,可以让Node1和Node2分别寻找到能够自己的可连通的第二集群。然后,仲裁节点选出第二集群成员数目最多的一个确定为第三集群,即新的集群,并将处于该第三集群的Node1,确定为第三节点,即新节点。这样,可以实现选出最可靠的新的主节点及新的集群。
通过(二)筛选主节点阶段的步骤,仲裁节点筛选出了第三节点Node1,和第三集群(集群A{Node1,Node2,Node3})。该第三节点Node1将会成新的主节点,但该阶段只是仲裁节点判定出了第三节点Node1,该第三节点在该第三集群(集群A{Node1,Node2,Node3})中还未经过投票选出,如何回归到raft协议中让第三节点Node1被第三集群中的节点投票,成为第三集群中的主节点还需要进行下述(三)强制选主阶段。
(三)强制选主阶段
步骤S308:仲裁节点向Node1和Node1连通的存活节点发送配置更新指令。其中,配置更新指令用于将由Node1及Node1连通的存活节点组成的第三集群的配置信息更新到第三集群中的各节点上。
具体的,在该阶段中,第三节点为Node1,第三集群为集群A{Node1,Node2,Node3},该配置信息可以包括集群A中各节点的IP地址和通信端口,除此之外,还可以包括集群A中成员列表、配置参数和调整参数以及其他集群A的详细信息等。集群A中的各节点在接收到仲裁节点发送的配置更新指令之后,就可以得知集群A中其他各节点的IP地址和通信端口以及其他一些相关参数。集群A中的节点和需要和其他节点进行通信(或者说发起选举/投票、日志复制等)时,可以利用该配置信息找到需要通信的节点的配置,进行正常的通信。
将集群A的配置信息更新到集群A中的各节点上,目的是让Node1,发起选举投票的范围局限在集群A中,而不是之前的第一集群中,若Node1还是在第一集群中发起投票,则仍然不能够选举成功。
下面具体解释Node1在第三集群(集群A)中发起选举投票而不是在第一集群中的原因:
1.若Node1在第一集群中发起选举投票。
第一集群中共有Node1、Node2、Node3、Node4、Node5、Node6、共6个节点,其中,Node4、Node5、Node6已出现故障。所以,在第一集群中,Node1更新为候选者(Candidate)状态发起选举时,Node2和Node3会投票给Node1,Node1也会投给自己一票,则Node1可以得到3票,而根据raft协议中的选举规定:当Candidate状态的节点获取的票数超过集群中总节点数目的一半时,就可以成为主节点(Leader)。而Node1获得的3票(总节点数目为6)不满足该条件,所以选举不成功。
2.若Node1在集群A中发起选举投票。
由于集群A中共有Node1、Node2和Node3共3个节点,而Node2和Node3是Node1连通的存活节点,所以,在集群A中,Node1更新为候选者(Candidate)状态发起选举时,Node2和Node3会投票给Node1,Node1也会投给自己一票,则Node1可以得到3票,而根据raft协议中的选举规定:当Candidate状态的节点获取的票数超过集群中总节点数目的一半时,就可以成为主节点(Leader)。而Node1获得的3票(总节点数目为3)满足该条件,选举成功,Node1可以成为新的主节点。
通过将集群A的配置信息更新到集群A中的各节点上,可以实现即使在第一集群中有一半的节点处于故障时,Node1能够被选举成新的主节点,提高了第一集群的可用性概率。
步骤S309:仲裁节点向Node1和Node1连通的存活节点发日志回滚指令。其中,日志回滚指令用于回滚Node1和Node1连通的存活节点上未提交的日志。
具体的,Node1、Node2和Node3可以接收到仲裁节点发送的日志回滚指令,Node1、Node2和Node3接收到日志回滚指令之后,可以对各自节点上未提交的日志进行日志回滚。
下面具体解释需要进行日志回滚的原因:
在raft分布式系统中,是采用日志的方式来传输数据,所有对系统数据的添加、修改和删除,raft协议都会将其封装成日志,然后把日志复制给其他follower节点,这个过程叫做日志复制。日志复制的整个过程可包括5个步骤:
1.Leader节点复制日志到所有Follower节点;
2.当一半及以上Follower节点响应时,Leader节点才提交日志,Leader节点上的日志LSN加1;
3.Leader节点通知所有Follower节点,日志已提交;
4.所有Follower节点也提交日志,提交了日志的Follower节点上的日志LSN加1;
5.整个系统的日志处于一致状态。
可以看出,日志先复制到Follower节点的缓存区,当接收到Leader节点的提交通知之后,Follower节点才将日志提交,一次日志复制才算成功。若在上述第3步骤之前,Leader出现了故障,崩溃了,Follower节点接收不到Leader节点的提交通知,则不能保证所有的Follower节点上都有该日志,也就不能保证数据的一致性。Node1成为主节点之后,日志的复制将会在集群A中进行,为了保证在集群A中复制数据的一致性,对于未提交成功的日志需要进行删除。所以,在让Node1成为新Leader之前,就需要将集群A中的节点上未提交的日志进行日志回滚,即回滚Node1、Node2和Node3上未提交的日志。通过对第三集群中的节点进行日志回滚,可以避免新的节点进行日志复制时,日志出现混乱。
步骤S310:仲裁节点向Node1发送第一状态更新请求。其中,第一状态更新请求用于更新Node1为候选者状态。
具体的,Node1在接收到第一状态更新请求之后,可以从仲裁状态更新到候选者(Candidate)状态,处于候选者状态的Node1会在集群A中发起选举和投票。当得到集群A中超过一半的节点的投票之后,Node1将更新到领导者(Leader)状态,即成为新的主节点。在Node1成为新的主节点之后,Node1可以按照raft协议中规定的日志复制步骤,进行日志复制工作。
步骤S311:仲裁节点向Node1连通的存活节点发送第三状态更新请求。其中,第三状态更新请求用于更新Node1连通的存活节点为跟随者状态。
具体的,Node1连通的存活节点为Node2和Node3,Node2和Node3在接收到第二状态更新请求之后,可以从仲裁状态更新到跟随者(Follower)状态。Node2和Node3在更新到跟随者(Follower)状态之后,若接收到Node1发送的投票请求之后,Node2可以将自己的一票投给Node1。在Node1成为Leader之后,Node2和Node3可以配合Node1按照raft协议中规定的日志复制步骤,进行日志复制工作。
通过更新第三节点(Node1)为候选者状态,更新第三节点连通的存活节点(Node2和Node3)为跟随者状态,可以利用raft协议中候选者节点发起选举投票,成为领导者节点的过程,来让第三节点成为新的主节点。
通过(三)强制选主阶段的步骤,可以实现本申请中的仲裁选举与raft协议的平稳过渡,使得仲裁选举出的主节点,依然能够按照raft协议进行日志复制工作,提高了raft分布式系统的可靠性。
通过本申请实施例,可以让第一集群即使有一半节点出现故障时,也能完成选举,选举出新的主节点和可靠的新集群,提高了raft分布式系统的可靠性。
请参见图4,图4是本申请实施例提供的一种仲裁节点40,该仲裁节点40包括处理器401、存储器402和通信接口403,处理器401、存储器402和通信接口403通过总线连接。
存储器402包括但不限于是随机存储记忆体(Random Access Memory,RAM)、只读存储器(Read-Only Memory,ROM)、可擦除可编程只读存储器(Erasable Programmableread only memory,EPROM)、或便携式只读存储器(compact disc read-only memory,CD-ROM),该存储器502用于相关指令及数据。通信接口403用于接收和发送数据。
处理器401可以是一个或多个中央处理器(central processing unit,CPU),在处理器401是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU。
仲裁节点40中的处理器401可用于读取存储器402中的存储的程序代码,执行以下操作:
首先,在第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点的情况下,通过该通信接口403接收该第一集群中的至少一个第二节点发送的第一消息,该第一消息指示上述第二节点所处的第二集群,其中,一个上述第二节点所处的第二集群包括一个上述第二节点和一个上述第二节点连通的上述存活节点,上述存活节点为该第一集群中与该仲裁节点40连通的节点,上述第二节点为上述存活节点中任期最新且日志最新的节点。然后,通过通信接口403向该第一集群中的第三节点发送的第一状态更新请求,其中,该第一状态更新请求用于更新该第三节点为候选者状态,该第三节点属于上述至少一个第二节点,在上述至少一个第二节点各自所处的第二集群中,该第三节点所处的第二集群最大。被更新为候选者状态的该第三节点用于在该第三节点连通的存活节点中发起选举。
通过执行上述步骤,仲裁节点40可以在第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,从存活节点中选出任期最新且日志最新的至少一个第二节点,然后,从这些第二节点中选出所处第二集群最大的第三节点,接着,更新该第三节点为候选者状态,最后回到原有的raft的协议中,让第三节点成为新的主节点,即更新第三节点为领导者状态。这样,第一集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,选举出可靠的主节点,继续进行日志复制的工作。
在一种可选的方案中,该处理器401还可用于:首先,在通过该通信接口403接收该第一集群中的至少一个第二节点发送的第一消息之前,通过该通信接口403接收该第一集群中的存活节点发送的第二消息,其中,该第二消息包括该第一集群中的存活节点的节点状态和节点标识。然后,根据该第二消息判断是否该第一集群中有至少一半上述存活节点,且该第一集群中没有处于领导者状态的节点。
通过仲裁节点40接收到的第一集群中的存活节点发送的第二消息,仲裁节点40即可判断出第一集群中有多少存活节点,以及各存活节点的节点状态,实现了仲裁节点40对第一集群的实时监控,便于触发仲裁选举流程,有效的减少了第一集群的无法正常工作的时间。
在又一种可选的方案中,该处理器401还可用于:在该第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点的情况下,通过该通信接口403向该第一集群中的节点发送第二状态更新请求,该第二状态更新请求用于更新该第一集群中的节点为仲裁状态。被更新为仲裁状态的该第一集群中的节点用于不发起选举或投票。
通过更新第一集群中的节点为仲裁状态,可以防止在仲裁节点40对第一集群进行仲裁选举的过程中,第一集群中的节点根据原有raft协议规定的方法选主,可以避免本申请仲裁选举和原有raft协议选主的产生冲突,为本申请仲裁选举流程提供了执行时间。
在又一种可选的方案中,该处理器401还可用于:首先,在通过该通信接口403接收该第一集群中的至少一个第二节点发送的第一消息之前,通过该通信接口403接收上述存活节点发送的第三消息,该第三消息包括上述存活节点的任期和日志版本。然后,根据该第三消息确定出上述至少一个第二节点。
这样,仲裁节点40通过选出任期最新且日志最新的至少一个第二节点,可以让最终选出的主节点符合raft协议中定义主节点的特征,可以保证最终选出的主节点的可靠性。
在又一种可选的方案中,该处理器401还可用于:在通过该通信接口403接收该第一集群中的至少一个第二节点发送的第一消息之前,通过该通信接口403向上述至少一个第二节点发送第四消息,其中,该第四消息用于触发上述至少一个第二节点分别在该第一集群中进行广播,并将响应该广播的上述存活节点确定为上述第二节点连通的上述存活节点。
通过让第二节点发送广播,确定出第二节点可连通的第二集群,可以使得在选出新的主节点后,新集群中的节点都能与新的主节点进行正常通信,完成日志复制工作,提高了选举流程选出的主节点的可靠性。
在又一种可选的方案中,该第四消息具体可用于触发上述至少一个第二节点各自在上述存活节点中进行N次广播,并将响应至少一次该广播的上述存活节点确定为上述第二节点连通的上述存活节点,N为正整数。
通过将响应至少一次广播的存活节点确定为上述第二节点连通的存活节点,可以尽可能的找出的更多与第二节点连通的存活节点,提高第一集群中节点的利用率。
在又一种可选的方案中,该处理器401,还用于:通过该通信接口403向该第三节点连通的上述存活节点发送第三状态更新请求,该第三状态更新请求用于更新该第三节点连通的上述存活节点为跟随者状态。被更新为跟随者状态的上述存活节点用于向被更新为候选者状态的该第三节点投票。
通过更新第三节点连通的存活节点为跟随者状态,可以让第三节点连通的存活节点在回归到raft协议之后,能够投票给第三节点,选出第三节点为新的主节点,完成选举过程。
在又一种可选的方案中,该处理器401还用于:在通过该通信接口403向该第一集群中的第三节点发送第一状态更新请求之前,通过该通信接口403向该第三节点和该第三节点连通的上述存活节点发送配置更新指令,该配置更新指令用于将第三集群的配置信息更新到该第三集群中的各节点上,该第三集群由该第三节点和该第三节点连通的上述存活节点组成,该配置信息包括第三集群中各节点的IP地址和通信端口。
通过将第三集群的配置信息更新到第三集群中的各节点上,可以让第三节点发起选举投票的范围局限在第三集群中,保证能够选举出新的主节点,让第三集群成为新的集群,提高了集群的可用性。
在又一种可选的方案中,该处理器401还可用于:在通过该通信接口403向该第一集群中的第三节点发送第一状态更新请求之前,通过该通信接口403向该第三节点和该第三节点连通的上述存活节点发送日志回滚指令,其中,该日志回滚指令用于回滚该第三节点和该第三节点连通的上述存活节点上未提交的日志。
通过对第三集群中的节点进行日志回滚,可以避免新的节点进行日志复制时,日志出现混乱。
需要说明的是,各个操作的实现还可以对应参照图2或图3所示的方法实施例的响应描述。其中,图4所示实施例中的仲裁节点40可以为图2所示方法实施例中的仲裁节点,或者图3所示方法实施例中的仲裁节点。
在图4所描述的仲裁节点40中,仲裁节点40可以在第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,从存活节点中选出任期最新且日志最新的至少一个第二节点,然后,从这些第二节点中选出所处第二集群最大的第三节点,接着,更新该第三节点为候选者状态,最后回到原有的raft的协议中,该仲裁节点40成为新的主节点,即更新为领导者状态。这样,节点集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,选举出可靠的主节点,继续进行日志复制的工作,提高了raft分布式系统的可靠性。
请参见图5,图5是本申请实施例提供的一种存储节点50,即第二节点。该存储节点50可以是图1所示网络架构中第一集群中任一节点,该存储节点50包括处理器501、存储器502和通信接口503,处理器501、存储器502和通信接口503通过总线连接。
存储器502包括但不限于是随机存储记忆体(random access memory,RAM)、只读存储器(read-only memory,ROM)、可擦除可编程只读存储器(erasable programmableread only memory,EPROM)、或便携式只读存储器(compact disc read-only memory,CD-ROM),该存储器502用于相关指令及数据。通信接口503用于接收和发送数据。
处理器501可以是一个或多个中央处理器(central processing unit,CPU),在处理器501是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU。
存储节点50中的处理器501可用于读取该存储器502中存储的程序代码,执行以下操作:
首先,在该存储节点50为第一集群中任期最新且日志最新的存活节点的条件下,通过该通信接口503向仲裁节点发送第一消息,该第一消息指示该存储节点50所处的第二集群。其中,该第一集群中有至少一半的节点为上述存活节点,且该第一集群中没有处于领导者状态的节点,上述存活节点为该第一集群中与该仲裁节点连通的节点,该存储节点50所处的第二集群包括该存储节点50和该存储节点50连通的上述存活节点。然后,在该任期最新且日志最新的存活节点各自所处的第二集群中,该存储节点50所处的第二集群最大的条件下,通过该通信接口503接收该仲裁节点发送第一状态更新请求。接着,响应该第一状态更新请求,更新节点状态为候选者状态,被设置为候选者状态的该存储节点50用于通过该通信端口503在该存储节点50连通的存活节点中发起选举。
通过执行上述步骤,该存储节点50在为第一集群中任期最新且日志最新的存活节点的条件下,且第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,筛选出所处的第二集群。然后,在该存储节点50所处的第二集群最大的条件下,该存储节点50为候选者状态,最后回到原有的raft的协议中,该存储节点50成为新的主节点,即更新第三节点为领导者状态。这样,第一集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,选举出可靠的主节点,继续进行日志复制的工作,提高了raft分布式系统的可靠性。
在一种可选的方案中,该处理器501还可用于:在通过该通信接口503向该仲裁节点发送第一消息之前,通过该通信接口503向该仲裁节点发送第二消息,其中,该第二消息包括该存储节点50的节点状态和节点标识,该第二消息用于该仲裁节点判断是否在该第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点。
通过存储节点50向仲裁节点发送第二消息,接收到第二消息后的仲裁节点即可判断出第一集群中有多少存活节点,以及各存活节点的节点状态,实现了仲裁节点对第一集群的实时监控,便于触发仲裁选举流程,有效的减少了第一集群的无法正常工作的时间。
在又一种可选的方案中,该处理器501还可用于:在该第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点的情况下,通过该通信端口503接收该仲裁节点发送的第二状态更新请求;该第二状态更新请求用于更新该存储节点50为仲裁状态。被更新为仲裁状态的该存储节点50不发起选举或投票。
通过更新第一集群中的节点为仲裁状态,可以防止在仲裁节点对第一集群进行仲裁选举的过程中,第一集群中的节点根据原有raft协议规定的方法选主,可以避免本申请仲裁选举和原有raft协议选举的产生冲突,为本申请仲裁选举流程提供了执行时间。
在又一种可选的方案中,该处理器501还可用于:在通过该通信接口503向仲裁节点发送第一消息之前,通过该通信接口503向该仲裁节点发送第三消息,该第三消息包括上述存活节点的任期和日志版本,该第三消息用于该仲裁节点确定出该任期最新且日志最新的存活节点。
通过让仲裁节点确定出任期最新且日志最新的至少一个第二节点,可以让最终选出的主节点符合raft协议中定义主节点的特征,可以保证最终选出的主节点的可靠性。
在又一种可选的方案中,该处理器501还可用于:首先,在通过该通信接口503向仲裁节点发送第一消息之前,通过该通信接口503接收该仲裁节点发送的第四消息。然后,响应该第四消息,在该第一集群中进行广播,并将响应该广播的上述存活节点确定为该存储节点50连通的上述存活节点。
通过让该存储节点50发送广播,确定出该存储节点50可连通的第二集群,可以使得在选出新的主节点后,新集群中的节点都能与新的主节点进行正常通信,完成日志复制工作,提高了选举流程选出的主节点的可靠性。
在又一种可选的方案中,该处理器501可具体用于:首先,通过该通信接口503接收该仲裁节点发送的第四消息。然后,响应该第四消息,在上述存活节点中进行N次广播,并将响应至少一次该广播的上述存活节点确定为该存储节点50连通的上述存活节点,N为正整数。
通过将响应至少一次广播的存活节点确定为上述第二节点连通的存活节点,可以尽可能的找出的更多与第二节点连通的存活节点,提高第一集群中节点的利用率。
在又一种可选的方案中,该处理器501还可用于:在该任期最新且日志最新的存活节点各自所处的第二集群中,该存储节点50所处的第二集群最大的条件下,通过该通信接口501接收该仲裁节点发送的配置更新指令,其中,该配置更新指令用于将第三集群的配置信息更新到该存储节点50上,该第三集群有该存储节点50和该存储节点50连通的上述存活节点组成,该配置信息包括第三集群中各节点的IP地址和通信端口。
通过将第三集群的配置信息更新到第三集群中的各节点上,可以让该存储节点50发起选举投票的范围局限在第三集群中,保证能够选举出新的主节点,让第三集群成为新的集群,提高了集群的可用性。
在又一种可选的方案中,该处理器501还可用于:在该任期最新且日志最新的存活节点各自所处的第二集群中,该存储节点50所处的第二集群最大的条件下,通过该通信接口503接收该仲裁节点发送的日志回滚指令,该日志回滚指令用于回滚该存储节点50上未提交的日志。
通过对第三集群中的节点进行日志回滚,可以避免新的节点进行日志复制时,日志出现混乱。
需要说明的是,各个操作的实现还可以对应参照图2或图3所示的方法实施例的响应描述。其中,图5所示实施例中的存储节点可以为图2所示方法实施例中的第一集群中的任一节点,或者图3所示方法实施例中的Node1。
在图5中所描述的存储节点50中,存储节点50在为第一集群中任期最新且日志最新的存活节点的条件下,且第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,筛选出所处的第二集群。然后,在该存储节点50所处的第二集群最大的条件下,该存储节点50为候选者状态,最后回到原有的raft的协议中,该存储节点50成为新的主节点,即更新为领导者状态。这样,第一集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,选举出可靠的主节点,继续进行日志复制的工作,提高了raft分布式系统的可靠性。
请参见图6,图6是本发明实施例提供的一种仲裁节点60的结构示意图,该仲裁节点60可以包括处理单元601、发送单元602和接收单元603,其中,各单元的详细描述如下。
接收单元603可用于在第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点的情况下,接收该第一集群中的至少一个第二节点发送的第一消息,该第一消息指示上述第二节点所处的第二集群,其中,一个上述第二节点所处的第二集群包括一个上述第二节点和一个上述第二节点连通的上述存活节点,上述存活节点为该第一集群中与该仲裁节点60连通的节点,上述第二节点为上述存活节点中任期最新且日志最新的节点。
发送单元602可用于向该第一集群中的第三节点发送的第一状态更新请求,其中,该第一状态更新请求用于更新该第三节点为候选者状态,该第三节点属于上述至少一个第二节点,在上述至少一个第二节点各自所处的第二集群中,该第三节点所处的第二集群最大。被更新为候选者状态的该第三节点用于在该第三节点连通的存活节点中发起选举。
通过执行上述步骤,仲裁节点60可以在第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,从存活节点中选出任期最新且日志最新的至少一个第二节点,然后,从这些第二节点中选出所处第二集群最大的第三节点,接着,更新该第三节点为候选者状态,最后回到原有的raft的协议中,让第三节点成为新的主节点,即更新第三节点为领导者状态。这样,第一集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,选举出可靠的主节点,继续进行日志复制的工作。
在一种可选的方案中,该接收单元603还可用于在接收该第一集群中的至少一个第二节点发送的第一消息之前,接收该第一集群中的存活节点发送的第二消息,其中,该第二消息包括该第一集群中的存活节点的节点状态和节点标识。该处理单元601可用于根据该第二消息判断是否该第一集群中有至少一半上述存活节点,且该第一集群中没有处于领导者状态的节点。
通过接收单元603接收到的第一集群中的存活节点发送的第二消息,处理单元601即可判断出第一集群中有多少存活节点,以及各存活节点的节点状态,实现了仲裁节点60对第一集群的实时监控,便于触发仲裁选举流程,有效的减少了第一集群的无法正常工作的时间。
在又一种可选的方案中,该发送单元602还可用于在该第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点的情况下,向该第一集群中的节点发送第二状态更新请求,该第二状态更新请求用于更新该第一集群中的节点为仲裁状态。被更新为仲裁状态的该第一集群中的节点用于不发起选举或投票。
通过更新第一集群中的节点为仲裁状态,可以防止在仲裁节点60对第一集群进行仲裁选举的过程中,第一集群中的节点根据原有raft协议规定的方法选主,可以避免本申请仲裁选举和原有raft协议选举的产生冲突,为本申请仲裁选举流程提供了执行时间。
在又一种可选的方案中,该接收单元603还可用于在接收该第一集群中的至少一个第二节点发送的第一消息之前,接收上述存活节点发送的第三消息,该第三消息包括上述存活节点的任期和日志版本。该处理单元601还用于根据该第三消息确定出上述至少一个第二节点。
这样,仲裁节点60通过选出任期最新且日志最新的至少一个第二节点,可以让最终选出的主节点符合raft协议中定义主节点的特征,可以保证最终选出的主节点的可靠性。
在又一种可选的方案中,发送单元602还可用于在该接收单元603接收该第一集群中的至少一个第二节点发送的第一消息之前,向上述至少一个第二节点发送第四消息,其中,该第四消息用于触发上述至少一个第二节点分别在该第一集群中进行广播,并将响应该广播的上述存活节点确定为上述第二节点连通的上述存活节点。
通过让第二节点发送广播,确定出第二节点可连通的第二集群,可以使得在选出新的主节点后,新集群中的节点都能与新的主节点进行正常通信,完成日志复制工作,提高了选举流程选出的主节点的可靠性。
在又一种可选的方案中,该第四消息具体可用于触发上述至少一个第二节点各自在上述存活节点中进行N次广播,并将响应至少一次该广播的上述存活节点确定为上述第二节点连通的上述存活节点,N为正整数。
通过将响应至少一次广播的存活节点确定为上述第二节点连通的存活节点,可以尽可能的找出的更多与第二节点连通的存活节点,提高第一集群中节点的利用率。
在又一种可选的方案中,发送单元602还可用于向该第三节点连通的上述存活节点发送第三状态更新请求,该第三状态更新请求用于更新该第三节点连通的上述存活节点为跟随者状态。被更新为跟随者状态的上述存活节点用于向被更新为候选者状态的该第三节点投票。
通过更新第三节点连通的存活节点为跟随者状态,可以让第三节点连通的存活节点在回归到raft协议之后,能够投票给第三节点,选出第三节点为新的主节点,完成选举过程。
在又一种可选的方案中,发送单元602还可用于在向该第一集群中的第三节点发送第一状态更新请求之前,向该第三节点和该第三节点连通的上述存活节点发送配置更新指令,该配置更新指令用于将第三集群的配置信息更新到该第三集群中的各节点上,该第三集群由该第三节点和该第三节点连通的上述存活节点组成,该配置信息包括第三集群中各节点的IP地址和通信端口。
通过将第三集群的配置信息更新到第三集群中的各节点上,可以让第三节点发起选举投票的范围局限在第三集群中,保证能够选举出新的主节点,让第三集群成为新的集群,提高了集群的可用性。
在又一种可选的方案中,发送单元602还可用于:在向该第一集群中的第三节点发送第一状态更新请求之前,向该第三节点和该第三节点连通的上述存活节点发送日志回滚指令,其中,该日志回滚指令用于回滚该第三节点和该第三节点连通的上述存活节点上未提交的日志。
通过对第三集群中的节点进行日志回滚,可以避免新的节点进行日志复制时,日志出现混乱。
需要说明的是,各个单元的实现还可以对应参照图2或图3所示的方法实施例的相应描述。其中,图6所示实施例中的仲裁节点60可以为图2所示方法实施例中的仲裁节点或图3所示方法实施例中的仲裁节点。
在图6所描述的仲裁节点60中,仲裁节点60可以在第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,从存活节点中选出任期最新且日志最新的至少一个第二节点,然后,从这些第二节点中选出所处第二集群最大的第三节点,接着,更新该第三节点为候选者状态,最后回到原有的raft的协议中,该第三节点成为新的主节点,即更新为领导者状态。这样,节点集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,选举出可靠的主节点,继续进行日志复制的工作,提高了raft分布式系统的可靠性。
请参见图7,图7是本发明实施例提供的一种存储节点70,即第二节点的结构示意图,该存储节点70可以是图1所示网络架构中第一集群中任一节点。该存储节点70可以包括处理单元701、发送单元702和接收单元703,其中,各单元的详细描述如下。
发送单元702可用于在该存储节点70为第一集群中任期最新且日志最新的存活节点的条件下,向仲裁节点发送第一消息,该第一消息指示该存储节点70所处的第二集群。其中,该第一集群中有至少一半的节点为上述存活节点,且该第一集群中没有处于领导者状态的节点,上述存活节点为该第一集群中与该仲裁节点连通的节点,该存储节点70所处的第二集群包括该存储节点70和该存储节点70连通的上述存活节点。
接收单元703可用于在该任期最新且日志最新的存活节点各自所处的第二集群中,该存储节点70所处的第二集群最大的条件下,接收该仲裁节点发送的第一状态更新请求。
处理单元701用于响应该第一状态更新请求,更新节点状态为候选者状态,被设置为候选者状态的该存储节点70用于在该存储节点70连通的存活节点中发起选举。
通过执行上述步骤,该存储节点70在为第一集群中任期最新且日志最新的存活节点的条件下,且第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,筛选出所处的第二集群。然后,在该存储节点70所处的第二集群最大的条件下,该存储节点70为候选者状态,最后回到原有的raft的协议中,该存储节点70成为新的主节点,即更新第三节点为领导者状态。这样,第一集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,选举出可靠的主节点,继续进行日志复制的工作,提高了raft分布式系统的可靠性。
在一种可选的方案中,发送单元702还可用于在向该仲裁节点发送第一消息之前,向该仲裁节点发送第二消息,其中,该第二消息包括该存储节点70的节点状态和节点标识,该第二消息用于该仲裁节点判断是否在该第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点。
通过存储节点70向仲裁节点发送第二消息,接收到第二消息后的仲裁节点即可判断出第一集群中有多少存活节点,以及各存活节点的节点状态,实现了仲裁节点对第一集群的实时监控,便于触发仲裁选举流程,有效的减少了第一集群的无法正常工作的时间。
在又一种可选的方案中,接收单元703还可用于在该第一集群中有至少一半存活节点,且该第一集群中没有处于领导者状态的节点的情况下,接收该仲裁节点发送的第二状态更新请求;该第二状态更新请求用于更新该存储节点70为仲裁状态。被更新为仲裁状态的该存储节点70不发起选举或投票。
通过更新第一集群中的节点为仲裁状态,可以防止在仲裁节点对第一集群进行仲裁选举的过程中,第一集群中的节点根据原有raft协议规定的方法选主,可以避免本申请仲裁选举和原有raft协议选举的产生冲突,为本申请仲裁选举流程提供了执行时间。
在又一种可选的方案中,发送单元702还可用于在向仲裁节点发送第一消息之前,向该仲裁节点发送第三消息,该第三消息包括上述存活节点的任期和日志版本,该第三消息用于该仲裁节点确定出该任期最新且日志最新的存活节点。
通过让仲裁节点确定出任期最新且日志最新的至少一个第二节点,可以让最终选出的主节点符合raft协议中定义主节点的特征,可以保证最终选出的主节点的可靠性。
在又一种可选的方案中,接收单元703还可用于在发送单元702向仲裁节点发送第一消息之前,接收该仲裁节点发送的第四消息。处理单元701还用于响应该第四消息,在该第一集群中进行广播,并将响应该广播的上述存活节点确定为该存储节点70连通的上述存活节点。
通过让该存储节点70发送广播,确定出该存储节点70可连通的第二集群,可以使得在选出新的主节点后,新集群中的节点都能与新的主节点进行正常通信,完成日志复制工作,提高了选举流程选出的主节点的可靠性。
在又一种可选的方案中,接收单元703还可用于接收该仲裁节点发送的第四消息。然处理单元701还可用于响应该第四消息,在上述存活节点中进行N次广播,并将响应至少一次该广播的上述存活节点确定为该存储节点70连通的上述存活节点,N为正整数。
通过将响应至少一次广播的存活节点确定为上述第二节点连通的存活节点,可以尽可能的找出的更多与第二节点连通的存活节点,提高第一集群中节点的利用率。
在又一种可选的方案中,接收单元703还可用于在该任期最新且日志最新的存活节点各自所处的第二集群中,该存储节点70所处的第二集群最大的条件下,接收该仲裁节点发送的配置更新指令,其中,该配置更新指令用于将第三集群的配置信息更新到该存储节点70上,该第三集群包括该存储节点70和该存储节点70连通的上述存活节点,该配置信息包括第三集群中各节点的IP地址和通信端口。
通过将第三集群的配置信息更新到第三集群中的各节点上,可以让该存储节点70发起选举投票的范围局限在第三集群中,确保能够选举出新的主节点,让第三集群成为新的集群,提高了集群的可用性。
在又一种可选的方案中,接收单元703还可用于在该任期最新且日志最新的存活节点各自所处的第二集群中,该存储节点70所处的第二集群最大的条件下,接收该仲裁节点发送的日志回滚指令,该日志回滚指令用于回滚该存储节点70上未提交的日志。
通过对第三集群中的节点进行日志回滚,可以避免新的节点进行日志复制时,日志出现混乱。
需要说明的是,各个操作的实现还可以对应参照图2或图3所示的方法实施例的响应描述。其中,图7所示实施例中的存储节点可以为图2所示方法实施例中的第一集群中的任一节点,或者图3所示方法实施例中的Node1。
在图7中所描述的存储节点70中,存储节点70在为第一集群中任期最新且日志最新的存活节点的条件下,且第一集群中有至少一半存活节点且没有领导者状态的节点的情况下,筛选出所处的第二集群。然后,在该存储节点70所处的第二集群最大的条件下,该存储节点70为候选者状态,最后回到原有的raft的协议中,该存储节点70成为新的主节点,即更新为领导者状态。这样,第一集群中即使有一半的节点出现故障了,也依然能够让raft分布式系统完成选举,选举出可靠的主节点,继续进行日志复制的工作,提高了raft分布式系统的可靠性。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:ROM或随机存储记忆体RAM、磁碟或者光盘等各种可存储程序代码的介质。
Claims (26)
1.一种raft分布式系统选主方法,其特征在于,包括:
在第一集群中有至少一半存活节点,且所述第一集群中没有处于领导者状态的节点的情况下,仲裁节点接收至少一个第二节点发送的第一消息,所述第一消息指示所述第二节点所处的第二集群;每个所述第二节点所处的第二集群包括所述第二节点连通的所述存活节点;所述存活节点为所述第一集群中与所述仲裁节点连通的节点;所述第二节点为所述存活节点中任期最新且日志最新的节点;
所述仲裁节点向第三节点发送第一状态更新请求,用于更新所述第三节点为候选者状态;所述第三节点属于所述至少一个第二节点,在所述至少一个第二节点各自所处的第二集群中,所述第三节点所处的第二集群最大;被更新为候选者状态的所述第三节点用于在所述第三节点连通的存活节点中发起选举。
2.根据权利要求1所述方法,其特征在于,在所述第一集群中有至少一半存活节点,且所述第一集群中没有处于领导者状态的节点的情况下,还包括:
所述仲裁节点向所述第一集群中的节点发送第二状态更新请求;所述第二状态更新请求用于更新所述第一集群中的节点为仲裁状态;被更新为仲裁状态的所述第一集群中的节点不发起选举或投票。
3.根据权利要求1所述方法,其特征在于,在所述仲裁节点接收所述第一集群中的至少一个第二节点发送的第一消息之前,还包括:
所述仲裁节点向所述至少一个第二节点发送第四消息;所述第四消息用于触发所述至少一个第二节点分别在所述第一集群中进行广播,并将响应所述广播的所述存活节点确定为所述第二节点连通的所述存活节点。
4.根据权利要求3所述方法,其特征在于,
所述第四消息具体用于触发所述至少一个第二节点分别在所述存活节点中进行N次广播,并将响应至少一次所述广播的所述存活节点确定为所述第二节点连通的所述存活节点,N为正整数。
5.根据权利要求1所述方法,其特征在于,还包括:
所述仲裁节点向所述第三节点连通的所述存活节点发送第三状态更新请求;所述第三状态更新请求用于更新所述第三节点连通的所述存活节点为跟随者状态;被更新为跟随者状态的所述存活节点用于向被更新为候选者状态的所述第三节点投票。
6.根据权利要求1所述方法,其特征在于,在所述仲裁节点向所述第三节点发送第一状态更新请求之前,还包括:
所述仲裁节点向所述第三节点和所述第三节点连通的所述存活节点发送日志回滚指令;所述日志回滚指令用于回滚所述第三节点和所述第三节点连通的所述存活节点上未提交的日志。
7.一种raft分布式系统选主方法,其特征在于,包括:
在满足预设条件时,至少一个第二节点中的每个第二节点向仲裁节点发送第一消息,所述第一消息指示所述第二节点所处的第二集群;其中,所述预设条件为第一集群中有至少一半的节点为存活节点,且所述第一集群中没有处于领导者状态的节点,所述存活节点为所述第一集群中与所述仲裁节点连通的节点;所述第二节点为所述第一集群中任期最新且日志最新的存活节点,所述第二节点所处的第二集群包括所述第二节点和所述第二节点连通的所述存活节点;
第三节点接收所述仲裁节点发送的第一状态更新请求;其中,所述第三节点属于所述至少一个第二节点,在所述至少一个第二节点各自所处的第二集群中,所述第三节点所处的第二集群最大;
所述第三节点根据所述第一状态更新请求更新节点状态为候选者状态;被更新为候选者状态的所述第三节点用于在所述第三节点连通的存活节点中发起选举。
8.根据权利要求7所述方法,其特征在于,在所述第一集群中有至少一半存活节点,且所述第一集群中没有处于领导者状态的节点的情况下,还包括:
所述至少一个第二节点接收所述仲裁节点发送的第二状态更新请求;所述第二状态更新请求用于更新所述第二节点为仲裁状态;被更新为仲裁状态的所述第二节点不发起选举或投票。
9.根据权利要求7所述方法,其特征在于,在所述第二节点向仲裁节点发送第一消息之前,还包括:
所述至少一个第二节点接收所述仲裁节点发送的第四消息;
所述至少一个第二节点中的每个第二节点根据所述第四消息在所述第一集群中进行广播,并将响应所述广播的所述存活节点确定为所述第二节点连通的所述存活节点。
10.根据权利要求9所述方法,其特征在于,所述至少一个第二节点中的每个第二节点在所述第一集群中进行广播,并将响应所述广播的所述存活节点确定为所述第二节点连通的所述存活节点,具体包括:
所述至少一个第二节点中的每个第二节点在所述存活节点中进行N次广播,并将响应至少一次所述广播的所述存活节点确定为所述第二节点连通的所述存活节点,N为正整数。
11.根据权利要求7所述方法,其特征在于,在所述任期最新且日志最新的存活节点各自所处的第二集群中,所述第三节点所处的第二集群最大的条件下,在所述第三节点接收所述仲裁节点发送的第一状态更新请求之前,还包括:
所述第三节点接收所述仲裁节点发送的日志回滚指令;所述日志回滚指令用于回滚所述第三节点上未提交的日志。
12.一种仲裁节点,其特征在于,包括:发送单元和接收单元;其中,
所述接收单元用于在第一集群中有至少一半存活节点,且所述第一集群中没有处于领导者状态的节点的情况下,接收至少一个第二节点发送的第一消息,所述第一消息指示所述第二节点所处的第二集群;每个所述第二节点所处的第二集群包括所述第二节点连通的所述存活节点;所述存活节点为所述第一集群中与所述仲裁节点连通的节点;所述第二节点为所述存活节点中任期最新且日志最新的节点;
所述发送单元用于向第三节点发送第一状态更新请求,用于更新所述第三节点为候选者状态;所述第三节点属于所述至少一个第二节点,在所述至少一个第二节点各自所处的第二集群中,所述第三节点所处的第二集群最大;被更新为候选者状态的所述第三节点用于在所述第三节点连通的存活节点中发起选举。
13.根据权利要求12所述仲裁节点,其特征在于,所述发送单元还用于在所述第一集群中有至少一半存活节点,且所述第一集群中没有处于领导者状态的节点的情况下,向所述第一集群中的节点发送第二状态更新请求;所述第二状态更新请求用于更新所述第一集群中的节点为仲裁状态;被更新为仲裁状态的所述第一集群中的节点不发起选举或投票。
14.根据权利要求12所述仲裁节点,其特征在于,所述发送单元还用于在所述接收单元接收所述第一集群中的至少一个第二节点发送的第一消息之前,向所述至少一个第二节点发送第四消息;所述第四消息用于触发所述至少一个第二节点分别在所述第一集群中进行广播,并将响应所述广播的所述存活节点确定为所述第二节点连通的所述存活节点。
15.根据权利要求14所述仲裁节点,其特征在于,所述第四消息具体用于触发所述至少一个第二节点分别在所述存活节点中进行N次广播,并将响应至少一次所述广播的所述存活节点确定为所述第二节点连通的所述存活节点,N为正整数。
16.根据权利要求12所述仲裁节点,其特征在于,所述发送单元还用于向所述第三节点连通的所述存活节点发送第三状态更新请求;所述第三状态更新请求用于更新所述第三节点连通的所述存活节点为跟随者状态;被更新为跟随者状态的所述存活节点用于向被更新为候选者状态的所述第三节点投票。
17.根据权利要求12所述仲裁节点,其特征在于,所述发送单元还用于在向所述第三节点发送第一状态更新请求之前,向所述第三节点和所述第三节点连通的所述存活节点发送日志回滚指令;所述日志回滚指令用于回滚所述第三节点和所述第三节点连通的所述存活节点上未提交的日志。
18.一种存储节点,其特征在于,包括:处理单元,发送单元和接收单元;
在满足预设条件时,所述发送单元用于向仲裁节点发送第一消息,所述第一消息指示所述存储节点所处的第二集群;其中,所述预设条件为第一集群中有至少一半的节点为存活节点,且所述第一集群中没有处于领导者状态的节点,所述存活节点为所述第一集群中与所述仲裁节点连通的节点;所述存储节点为所述第一集群中任期最新且日志最新的存活节点,所述存储节点所处的第二集群包括所述存储节点和所述存储节点连通的所述存活节点;
在所述存储节点所处的第二集群最大的情况下,所述接收单元用于接收所述仲裁节点发送的第一状态更新请求;
所述处理单元用于根据所述第一状态更新请求更新节点状态为候选者状态;被更新为候选者状态的所述存储节点用于在所述存储节点连通的存活节点中发起选举。
19.根据权利要求18所述存储节点,其特征在于,所述接收单元还用于在所述第一集群中有至少一半存活节点,且所述第一集群中没有处于领导者状态的节点的情况下,接收所述仲裁节点发送的第二状态更新请求;所述第二状态更新请求用于更新所述存储节点为仲裁状态;被更新为仲裁状态的所述存储节点不发起选举或投票。
20.根据权利要求18所述存储节点,其特征在于,所述接收单元还用于在所述发送单元向所述仲裁节点发送第一消息之前,接收所述仲裁节点发送的第四消息;
所述处理单元还用于根据所述第四消息在所述第一集群中进行广播,并将响应所述广播的所述存活节点确定为第二节点连通的所述存活节点。
21.根据权利要求20所述存储节点,其特征在于,所述处理单元具体用于在所述存活节点中进行N次广播,并将响应至少一次所述广播的所述存活节点确定为所述存储节点连通的所述存活节点,N为正整数。
22.根据权利要求21所述存储节点,其特征在于,在所述任期最新且日志最新的存活节点各自所处的第二集群中,所述存储节点所处的第二集群最大的条件下,所述接收单元还用于在接收所述仲裁节点发送的第一状态更新请求之前,接收所述仲裁节点发送的日志回滚指令;所述日志回滚指令用于回滚所述存储节点上未提交的日志。
23.一种仲裁节点,其特征在于,所述仲裁节点包括处理器和存储器;
所述存储器用于存储计算机程序代码;
所述处理器用于执行所述存储器存储的代码,使得所述仲裁节点执行权利要求1至6任一项所述的方法。
24.一种存储节点,其特征在于,所述存储节点包括处理器和存储器;
所述存储器用于存储计算机程序代码;
所述处理器用于执行所述存储器存储的代码,使得所述存储节点执行权利要求7至11任一项所述的方法。
25.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有程序指令,当所述程序指令在处理器上运行时,实现权利要求1至6任一项所述的方法。
26.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有程序指令,当所述程序指令在处理器上运行时,实现权利要求7至11任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810216748.3A CN108616566B (zh) | 2018-03-14 | 2018-03-14 | raft分布式系统选主方法、相关设备及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810216748.3A CN108616566B (zh) | 2018-03-14 | 2018-03-14 | raft分布式系统选主方法、相关设备及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108616566A CN108616566A (zh) | 2018-10-02 |
CN108616566B true CN108616566B (zh) | 2021-02-23 |
Family
ID=63659129
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810216748.3A Active CN108616566B (zh) | 2018-03-14 | 2018-03-14 | raft分布式系统选主方法、相关设备及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108616566B (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111327447B (zh) * | 2018-12-17 | 2021-09-14 | 华为技术有限公司 | 一种分布式系统、仲裁方法、节点设备及存储介质 |
CN109726211B (zh) * | 2018-12-27 | 2020-02-04 | 无锡华云数据技术服务有限公司 | 一种分布式时序数据库 |
CN109951331B (zh) * | 2019-03-15 | 2021-08-20 | 北京百度网讯科技有限公司 | 用于发送信息的方法、装置和计算集群 |
CN109981364B (zh) * | 2019-03-25 | 2021-05-18 | 联想(北京)有限公司 | 网络的管理方法和系统 |
CN110417882B (zh) * | 2019-07-22 | 2022-04-08 | 卓尔智联(武汉)研究院有限公司 | 主节点的确定方法、装置和存储介质 |
CN111291063B (zh) * | 2020-01-21 | 2022-03-08 | 深圳华锐金融技术股份有限公司 | 主备副本选举方法、系统、计算机设备和存储介质 |
CN111694694A (zh) * | 2020-05-22 | 2020-09-22 | 北京三快在线科技有限公司 | 数据库集群的处理方法、装置、存储介质和节点 |
EP4180947A4 (en) * | 2020-07-30 | 2023-08-16 | Huawei Technologies Co., Ltd. | METHOD, APPARATUS AND SOFTWARE UPGRADE SYSTEM |
CN112202834B (zh) * | 2020-09-03 | 2024-04-23 | 金证财富南京科技有限公司 | 一种数据处理方法、数据处理装置及节点服务器 |
CN112363815B (zh) * | 2020-11-23 | 2024-04-30 | 中信银行股份有限公司 | Redis集群处理方法、装置、电子设备及计算机可读存储介质 |
CN113138717B (zh) * | 2021-04-09 | 2022-11-11 | 锐捷网络股份有限公司 | 节点部署方法、设备及存储介质 |
CN113127565A (zh) * | 2021-04-28 | 2021-07-16 | 联通沃音乐文化有限公司 | 基于外部观察者组的分布式数据库节点同步的方法和装置 |
CN113242296B (zh) * | 2021-05-08 | 2023-05-26 | 山东英信计算机技术有限公司 | 一种集群中主节点选举方法、系统及介质 |
CN113282041A (zh) * | 2021-05-26 | 2021-08-20 | 广东电网有限责任公司 | 一种集群测控装置的参数校核方法、系统、设备及介质 |
CN113609229B (zh) * | 2021-08-18 | 2023-10-20 | 东北大学 | Fabric区块链中的快速日志复制方法及装置 |
CN114363154A (zh) * | 2021-12-29 | 2022-04-15 | 中国电信股份有限公司 | 节点选举方法、装置、电子设备及存储介质 |
CN114390052B (zh) * | 2021-12-30 | 2023-10-10 | 武汉达梦数据技术有限公司 | 一种基于vrrp协议实现etcd双节点高可用方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106656624A (zh) * | 2017-01-04 | 2017-05-10 | 合肥康捷信息科技有限公司 | 基于Gossip通信协议和Raft选举算法的优化方法 |
CN106713468A (zh) * | 2016-12-29 | 2017-05-24 | 深圳云天励飞技术有限公司 | 一种分布式集群服务结构及其节点协同方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8572031B2 (en) * | 2010-12-23 | 2013-10-29 | Mongodb, Inc. | Method and apparatus for maintaining replica sets |
CN104468163B (zh) * | 2013-09-18 | 2018-11-09 | 腾讯科技(北京)有限公司 | 容灾网络组网的方法、装置及容灾网络 |
CN103995901B (zh) * | 2014-06-10 | 2018-01-12 | 北京京东尚科信息技术有限公司 | 一种确定数据节点失效的方法 |
CN107193695A (zh) * | 2017-05-25 | 2017-09-22 | 北京计算机技术及应用研究所 | 一种双控磁盘阵列的配置同步方法 |
-
2018
- 2018-03-14 CN CN201810216748.3A patent/CN108616566B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106713468A (zh) * | 2016-12-29 | 2017-05-24 | 深圳云天励飞技术有限公司 | 一种分布式集群服务结构及其节点协同方法 |
CN106656624A (zh) * | 2017-01-04 | 2017-05-10 | 合肥康捷信息科技有限公司 | 基于Gossip通信协议和Raft选举算法的优化方法 |
Non-Patent Citations (1)
Title |
---|
"Refinement Checking Parameterised Quorum Systems";Antti Siirtola;《2017 17th International Conference on Application of Concurrency to System Design (ACSD)》;20170625;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN108616566A (zh) | 2018-10-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108616566B (zh) | raft分布式系统选主方法、相关设备及系统 | |
CN107295080B (zh) | 应用于分布式服务器集群的数据存储方法和服务器 | |
CN111258822B (zh) | 数据处理方法、服务器和计算机可读存储介质 | |
CN113014634B (zh) | 集群选举处理方法、装置、设备及存储介质 | |
US9983957B2 (en) | Failover mechanism in a distributed computing system | |
CN110431533B (zh) | 故障恢复的方法、设备和系统 | |
CN107181637B (zh) | 一种心跳信息发送方法、装置及心跳发送节点 | |
EP3326065B1 (en) | Leaderless consistency protocol | |
CN112328421B (zh) | 一种系统故障处理方法、装置、计算机设备和存储介质 | |
CN113127565A (zh) | 基于外部观察者组的分布式数据库节点同步的方法和装置 | |
CN104767794A (zh) | 一种分布式系统中的节点选举方法及节点 | |
CN110324262A (zh) | 一种资源抢占的方法及装置 | |
CN113810216B (zh) | 一种集群的故障切换方法、装置及电子设备 | |
CN113794765A (zh) | 基于文件传输的网闸负载均衡方法及装置 | |
CN113765690A (zh) | 集群切换方法、系统、装置、终端、服务器及存储介质 | |
EP3424182B1 (en) | Neighbor monitoring in a hyperscaled environment | |
CN101329670A (zh) | 复制数据库环境下保持数据一致性的方法和系统 | |
JP2021120827A5 (zh) | ||
CN107153594B (zh) | 分布式数据库系统的ha组件选主方法及其系统 | |
WO2023148976A1 (ja) | ノード装置、クラスタ再構成方法、プログラム及びクラスタシステム | |
CN115801626B (zh) | 大规模广域分布式集群成员失效检测方法及系统 | |
CN115952237B (zh) | 一种多端数据融合系统 | |
CN115277379B (zh) | 分布式锁容灾处理方法、装置、电子设备及存储介质 | |
JP7498731B2 (ja) | クラスタシステム、復旧方法 | |
CN117061519A (zh) | 目标集群的主节点竞选方法、装置以及电子设备 |
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 | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220208 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Patentee after: Huawei Cloud Computing Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |