CN115037745B - 一种在分布式系统中选举的方法及装置 - Google Patents
一种在分布式系统中选举的方法及装置 Download PDFInfo
- Publication number
- CN115037745B CN115037745B CN202210552471.8A CN202210552471A CN115037745B CN 115037745 B CN115037745 B CN 115037745B CN 202210552471 A CN202210552471 A CN 202210552471A CN 115037745 B CN115037745 B CN 115037745B
- Authority
- CN
- China
- Prior art keywords
- data center
- node
- data
- nodes
- distributed system
- 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
- 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
-
- 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
-
- 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/30—Decision processes by autonomous network management units using voting and bidding
-
- 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/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种在分布式系统中选举的方法及装置。在“第一数据中心中的节点无法对外提供数据服务而至少一个第二数据中心中的节点还具有对外提供数据服务的能力,且至少一个第二数据中心中的节点的数量小于或等于分布式系统中的节点的总数量的一半”的情况下,基于“获取至少一个第二数据中心中的各个节点的选票中的多于一半选票的节点就可以成为引领者节点,也即,获取至少一个第二数据中心中的节点中的多于一半的节点的支持就可以成为引领者节点”的准则,在至少一个第二数据中心中的节点中能够选举出引领者节点。在至少一个第二数据中心中选举出引领者节点后,至少一个第二数据中心中的节点就可以对外提供数据服务,从而可以避免服务中断。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种在分布式系统中选举的方法及装置。
背景技术
随着技术的飞速发展,互联网可以为用户提供多元化、海量化的数据服务,对于服务提供商而言,传统的单一服务器已经不能满足对海量数据处理的要求,因此,分布式系统应运而生。分布式系统中可以包括多个服务器等,分布式系统可以在其包括的多个服务器中以全局方式对分布式系统中的各类数据资源进行调度处理、分布式处理以及协同处理等。
分布式系统中的各个服务器分别可以看作分布式系统中的节点,如此,分布式系统便可以将海量数据“分布”到分布式系统中的每一个节点中,每一个节点都可以基于各自的存储的数据对外提供数据服务,从而有效提升对外提供数据服务的效率等。
发明内容
本申请示出了一种在分布式系统中选举的方法及装置。
第一方面,本申请示出了一种在分布式系统中选举的方法,所述分布式系统中包括:第一数据中心以及至少一个第二数据中心,每一个数据中心中分别部署有所述分布式系统中的一个以上的节点,各个数据中心中分别部署的节点不重合,第一数据中心中具有所述分布式系统中的第一引领者节点,所述方法应用于至少一个第二数据中心中的节点,所述方法包括:
获取应急配置信息,所述应急配置信息是在第一数据中心中的节点不再具有对外提供数据服务的能力且至少一个第二数据中心中的节点仍旧具有对外提供数据服务的能力的情况下获取到的,所述应急配置信息中包括至少一个第二数据中心中的节点的节点标识;至少一个第二数据中心中的节点的数量小于或等于所述分布式系统中的所有节点的总数量的一半;
根据至少一个第二数据中心中的节点的节点标识,以被至少一个第二数据中心中的多于一半以上的节点支持即具有成为至少一个第二数据中心中的引领者节点的资格为准则,在至少一个第二数据中心选举第二引领者节点。
在一个可选的实现方式中,所述根据至少一个第二数据中心中的节点的节点标识,以被至少一个第二数据中心中的多于一半以上的节点支持即具有成为至少一个第二数据中心中的引领者节点的资格为准则,在至少一个第二数据中心选举第二引领者节点,包括:
根据至少一个第二数据中心中的节点的节点标识,获取至少一个第二数据中心中的每一个节点分别被投票后得到的选举票数;
将至少一个第二数据中心中的、得到的选举票数大于至少一个第二数据中心中的节点的总数量的一半的节点确定为至少一个第二数据中心中的第二引领者节点。
在一个可选的实现方式中,所述将至少一个第二数据中心中的、得到的选举票数大于至少一个第二数据中心中的节点的总数量的一半的节点确定为至少一个第二数据中心中的第二引领者节点,包括:
将至少一个第二数据中心中的、得到的选举票数等于至少一个第二数据中心中的节点的总数量的节点确定为至少一个第二数据中心中的第二引领者节点。
在一个可选的实现方式中,所述根据至少一个第二数据中心中的节点的节点标识,获取至少一个第二数据中心中的每一个节点分别被投票后得到的选举票数之前,还包括:
根据至少一个第二数据中心中的节点的节点标识,对至少一个第二数据中心中的节点投票。
在一个可选的实现方式中,所述根据至少一个第二数据中心中的节点的节点标识,对至少一个第二数据中心中的节点投票,包括:
接收至少一个节点发送的投票请求;
根据至少一个第二数据中心中的节点的节点标识,确定所述至少一个节点中是否具有至少一个第二数据中心中的节点;
在所述至少一个节点具有至少一个第二数据中心中的节点的情况下,根据所述至少一个节点中的至少一个第二数据中心中的一个节点发送的投票请求,对所述至少一个节点中的至少一个第二数据中心中的一个节点投票。
在一个可选的实现方式中,所述根据至少一个第二数据中心中的节点的节点标识,确定所述至少一个节点中是否具有至少一个第二数据中心中的节点,包括:
对于所述至少一个节点中的任意一个节点,根据所述节点的节点标识获取在所述节点中最近一次写入的数据对应的第一索引标识;越早在分布式系统中的节点中写入的数据对应的索引标识小于越晚在分布式系统中的节点中写入的数据对应的索引标识;
获取在至少一个第二数据中心中的节点中最近一次写入的数据对应的第二索引标识;
在第一索引标识等于第二索引标识的情况下,确定所述节点为至少一个第二数据中心中的节点;
或者,
在第一索引标识小于第二索引标识的情况下,确定所述节点不为至少一个第二数据中心中的节点。
在一个可选的实现方式中,所述方法还包括:
在第一数据中心中的节点恢复具有对外提供数据服务的能力的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据是否相同;
在至少一个第二数据中心中的数据与第一数据中心中的数据不同的情况下,向第一数据中心同步至少一个第二数据中心中的数据,以使至少一个第二数据中心中的数据与第一数据中心中的数据相同。
在一个可选的实现方式中,所述确定至少一个第二数据中心中的数据与第一数据中心中的数据是否相同,包括:
获取在第一数据中心中的节点中最近一次写入的数据对应的第三索引标识;越早在分布式系统中的节点中写入的数据对应的索引标识小于越晚在分布式系统中的节点中写入的数据对应的索引标识;
获取在至少一个第二数据中心中的节点中最近一次写入的数据对应的第四索引标识;
在第三索引标识等于第四索引标识的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据相同;
或者,
在第三索引标识小于第四索引标识的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据不同。
在一个可选的实现方式中,所述向第一数据中心同步至少一个第二数据中心中的数据,包括:
根据第三索引标识以及第四索引标识,在至少一个第二数据中心中的数据中获取需要向第一数据中心同步的数据;
向第一数据中心同步确定出的数据。
在一个可选的实现方式中,所述根据第三索引标识以及第四索引标识,在至少一个第二数据中心中的数据中获取需要向第一数据中心同步的数据,包括:
在第三索引标识以及第四索引标识为顺序相邻的两个索引标识的情况下,在至少一个第二数据中心中的数据中确定第四索引标识对应的第一数据,根据第一数据获取需要向第一数据中心同步的数据;
或者,
在第三索引标识以及第四索引标识不为顺序相邻的两个索引标识的情况下,在至少一个第二数据中心中的数据中确定第四索引标识对应的第一数据,以及,在至少一个第二数据中心中的数据中确定位于第三索引标识与第四索引标识之间的索引标识对应的第二数据,根据第一数据以及第二数据获取需要向第一数据中心同步的数据。
在一个可选的实现方式中,所述方法还包括:
在获取到所述应急配置信息的情况下,存储所述应急配置信息;
进一步地,在至少一个第二数据中心中的数据与第一数据中心中的数据相同的情况下,删除所述应急配置信息。
第二方面,本申请示出了一种在分布式系统中选举的装置,所述分布式系统中包括:第一数据中心以及至少一个第二数据中心,每一个数据中心中分别部署有所述分布式系统中的一个以上的节点,各个数据中心中分别部署的节点不重合,第一数据中心中具有所述分布式系统中的第一引领者节点,所述装置应用于至少一个第二数据中心中的节点,所述装置包括:
获取模块,用于获取应急配置信息,所述应急配置信息是在第一数据中心中的节点不再具有对外提供数据服务的能力且至少一个第二数据中心中的节点仍旧具有对外提供数据服务的能力的情况下获取到的,所述应急配置信息中包括至少一个第二数据中心中的节点的节点标识;至少一个第二数据中心中的节点的数量小于或等于所述分布式系统中的所有节点的总数量的一半;
选举模块,用于根据至少一个第二数据中心中的节点的节点标识,以被至少一个第二数据中心中的多于一半以上的节点支持即具有成为至少一个第二数据中心中的引领者节点的资格为准则,在至少一个第二数据中心选举第二引领者节点。
在一个可选的实现方式中,所述选举模块包括:
第一获取子模块,用于根据至少一个第二数据中心中的节点的节点标识,获取至少一个第二数据中心中的每一个节点分别被投票后得到的选举票数;
第一确定子模块,用于将至少一个第二数据中心中的、得到的选举票数大于至少一个第二数据中心中的节点的总数量的一半的节点确定为至少一个第二数据中心中的第二引领者节点。
在一个可选的实现方式中,所述第一确定子模块包括:
第一确定单元,用于将至少一个第二数据中心中的、得到的选举票数等于至少一个第二数据中心中的节点的总数量的节点确定为至少一个第二数据中心中的第二引领者节点。
在一个可选的实现方式中,所述选举模块还包括:
投票子模块,用于根据至少一个第二数据中心中的节点的节点标识,对至少一个第二数据中心中的节点投票。
在一个可选的实现方式中,所述投票子模块包括:
接收单元,用于接收至少一个节点发送的投票请求;
第二确定单元,用于根据至少一个第二数据中心中的节点的节点标识,确定所述至少一个节点中是否具有至少一个第二数据中心中的节点;
投票单元,用于在所述至少一个节点具有至少一个第二数据中心中的节点的情况下,根据所述至少一个节点中的至少一个第二数据中心中的一个节点发送的投票请求,对所述至少一个节点中的至少一个第二数据中心中的一个节点投票。
在一个可选的实现方式中,所述第二确定单元包括:
第一获取子单元,用于对于所述至少一个节点中的任意一个节点,根据所述节点的节点标识获取在所述节点中最近一次写入的数据对应的第一索引标识;越早在分布式系统中的节点中写入的数据对应的索引标识小于越晚在分布式系统中的节点中写入的数据对应的索引标识;
第二获取子单元,用于获取在至少一个第二数据中心中的节点中最近一次写入的数据对应的第二索引标识;
第一确定子单元,用于在第一索引标识等于第二索引标识的情况下,确定所述节点为至少一个第二数据中心中的节点;
或者,
第二确定子单元,用于在第一索引标识小于第二索引标识的情况下,确定所述节点不为至少一个第二数据中心中的节点。
在一个可选的实现方式中,所述装置还包括:
确定模块,用于在第一数据中心中的节点恢复具有对外提供数据服务的能力的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据是否相同;
同步模块,用于在至少一个第二数据中心中的数据与第一数据中心中的数据不同的情况下,向第一数据中心同步至少一个第二数据中心中的数据,以使至少一个第二数据中心中的数据与第一数据中心中的数据相同。
在一个可选的实现方式中,所述确定模块包括:
第二获取子模块,用于获取在第一数据中心中的节点中最近一次写入的数据对应的第三索引标识;越早在分布式系统中的节点中写入的数据对应的索引标识小于越晚在分布式系统中的节点中写入的数据对应的索引标识;
第三获取子模块,用于获取在至少一个第二数据中心中的节点中最近一次写入的数据对应的第四索引标识;
第二确定子模块,用于在第三索引标识等于第四索引标识的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据相同;
或者,
第三确定子模块,用于在第三索引标识小于第四索引标识的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据不同。
在一个可选的实现方式中,所述同步模块包括:
第四获取子模块,用于根据第三索引标识以及第四索引标识,在至少一个第二数据中心中的数据中获取需要向第一数据中心同步的数据;
同步子模块,用于向第一数据中心同步确定出的数据。
在一个可选的实现方式中,所述第四获取子模块包括:
第一获取单元,用于在第三索引标识以及第四索引标识为顺序相邻的两个索引标识的情况下,在至少一个第二数据中心中的数据中确定第四索引标识对应的第一数据,根据第一数据获取需要向第一数据中心同步的数据;
或者,
第二获取单元,用于在第三索引标识以及第四索引标识不为顺序相邻的两个索引标识的情况下,在至少一个第二数据中心中的数据中确定第四索引标识对应的第一数据,以及,在至少一个第二数据中心中的数据中确定位于第三索引标识与第四索引标识之间的索引标识对应的第二数据,根据第一数据以及第二数据获取需要向第一数据中心同步的数据。
在一个可选的实现方式中,所述装置还包括:
存储模块,用于在获取到所述应急配置信息的情况下,存储所述应急配置信息。
在一个可选的实现方式中,所述装置还包括:
删除模块,用于在至少一个第二数据中心中的数据与第一数据中心中的数据相同的情况下,删除所述应急配置信息。
第三方面,本申请示出了一种电子设备,电子设备包括:处理器;用于存储处理器可执行指令的存储器;其中,处理器被配置为执行如前述的任一方面所示的方法。
第四方面,本申请示出了一种非临时性计算机可读存储介质,当存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如前述的任一方面所示的方法。
第五方面,本申请示出了一种计算机程序产品,当计算机程序产品中的指令由电子设备的处理器执行时,使得电子设备能够执行如前述的任一方面所示的方法。
与现有技术相比,本申请包括以下优点:
在本申请中,获取应急配置信息,所述应急配置信息是在第一数据中心中的节点不再具有对外提供数据服务的能力且至少一个第二数据中心中的节点仍旧具有对外提供数据服务的能力的情况下获取到的,所述应急配置信息中包括至少一个第二数据中心中的节点的节点标识;至少一个第二数据中心中的节点的数量小于或等于所述分布式系统中的所有节点的总数量的一半。根据至少一个第二数据中心中的节点的节点标识,以被至少一个第二数据中心中的多于一半以上的节点支持即具有成为至少一个第二数据中心中的引领者节点的资格为准则,在至少一个第二数据中心选举第二引领者节点。
通过本申请,在“具有第一引领者节点的第一数据中心中的所有节点无法对外提供数据服务而至少一个第二数据中心中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等),且至少一个第二数据中心中的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半”的情况下,至少一个第二数据中心中的任意一个节点均有获取到至少一个第二数据中心中的各个节点的选票(至少一个第二数据中心中的每一个节点均可以向至少一个第二数据中心中的一个节点投出一个选票)中的多于一半选票的可能性,如此,基于“获取至少一个第二数据中心中的各个节点的选票(至少一个第二数据中心中的每一个节点均可以向至少一个第二数据中心中的一个节点投出一个选票)中的多于一半选票的节点就可以成为引领者节点,也即,获取至少一个第二数据中心中的所有节点中的多于一半的节点的支持就可以成为引领者节点”的准则,在至少一个第二数据中心中的所有节点中能够选举出引领者节点。在至少一个第二数据中心中选举出引领者节点之后,至少一个第二数据中心中的所有节点就可以对外提供数据服务,从而可以避免服务中断。
附图说明
图1是本申请的一种分布式系统的结构框图。
图2是本申请的一种在分布式系统中选举的方法的步骤流程图。
图3是本申请的一种在分布式系统中选举的方法的步骤流程图。
图4是本申请的一种在分布式系统中选举的方法的步骤流程图。
图5是本申请的一种在分布式系统中选举的装置的结构框图。
图6是本申请的一种装置的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
目前,在一种方式中,分布式系统中的各个节点可以设置在同一个机房中,各个节点之间是可以通信连接的。分布式系统中的各个节点均使用raft协议(一致性协议)作为共识协议。
基于raft协议,分布式系统中的各个节点的角色在任意时刻为可以为leader(引领者)、follower(跟随者)或candidate(候选者)等。
在初始情况下,分布式系统中的各个节点均处于candidate角色,即均为candidate节点,之后分布式系统中的所有节点开始选举leader节点,在raft协议下,每一个candidate节点均可以为分布式系统中的一个节点投一票,之后获得多于所有选票中的一半选票的节点可以成为leader节点,其他节点成为follower节点。
之后,分布式系统中的各个节点可以基于leader节点对外提供数据服务,例如,提供数据存储服务、数据计算服务以及数据查询服务等。
例如,在数据存储服务的场景中,在分布式系统中,leader节点负责接收用于在分布式系统中写入数据的写操作,并根据写操作将该数据存储在leader节点中,以及,将该数据同步给分布式系统中的所有follower节点,以使各个follower节点将该数据存储在各个follower节点中。
另外,分布式系统中的leader节点可以定期向分布式系统中的各个follower节点发送心跳信息,各个follower节点通过是否定期接收到leader节点发送的心跳信息来确定leader节点是否离线(也即,leader节点与各个follower节点是否还通信连接),若各个follower节点超过定期对应的时长均未接收到leader节点发送的心跳信息,则可以确定leader节点已经离线,进而可以确定leader节点不再具有对外提供数据服务的能力,之后各个follower节点可以重新在所有follower节点的范围内选举新的leader节点。
但是,有时候可能会出现一种情况:分布式系统中的各个节点均能够正常运行,但是由于非节点本身的原因(例如机房所在地的通信设备宕机,导致分布式系统中的所有节点无法与外界通信等)导致同一个机房中的分布式系统中的所有节点都无法对外提供数据服务,导致服务中断。
因此,为了避免服务中断,提出了双中心容灾的思路,例如,可以部署两个机房,在一个机房中部署了分布式系统中的一部分节点,在另一个机房部署了分布式系统中的另一部分节点(两个机房中部署的分布式系统中的节点可以不重合)。
这样,如果其中一个机房中的所有节点无法对外提供数据服务,例如,由于“其中一个机房中的所有节点宕机使得其中一个机房中的所有节点无法正常运行”或者“其中一个机房所在地的通信设备宕机使得其中一个机房中的所有节点无法与外界通信”等原因导致其中一个机房中的所有节点不在具有对外提供数据服务的能力,进而其中一个机房中的所有节点无法对外提供数据服务,而另一个机房中的所有节点能够正常运行且能够正常与外界通信,另一个机房中的所有节点还具有对外提供数据服务的能力,进而另一个机房中的节点还可以继续对外提供数据服务,从而可以避免服务中断。
但是,发明人对双中心容灾的场景中的结果的现状进行了统计分析后,发现了异常现象:
例如,有时候,在其中一个机房中的所有节点无法对外提供数据服务而另一个机房中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等)的情况下,另一个机房中的所有节点仍旧无法对外提供数据服务,仍旧出现服务中断的情况。
因此,为了避免服务中断,又提出了“在其中一个机房中的所有节点无法对外提供数据服务而另一个机房中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等)的情况下,另一个机房中的所有节点能够对外提供数据服务”的需求。
为了实现“在其中一个机房中的所有节点无法对外提供数据服务而另一个机房中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等)的情况下,另一个机房中的所有节点能够对外提供数据服务”的需求,发明人对双中心容灾的场景中发生的大量出现的“分布式系统中的部分机房中的所有节点无法对外提供数据服务”的情况进行统计分析后发现:
在大量出现的上述情况(分布式系统中的部分机房中的所有节点无法对外提供数据服务)中,一部分数量的上述情况中的另一个机房中的所有节点的数量大于分布式系统中的所有节点的总数量的一半,另一部分数量的上述情况中的另一个机房中的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半。
由于在分布式系统中的节点中选举leader节点所使用的协议是raft协议,在raft协议下,获取分布式系统中的各个节点的选票(每一个节点均可以向分布式系统中的一个节点投出一个选票)中的多于一半选票的节点才能成为leader节点,也即,获取分布式系统中的所有节点中的多于一半节点的支持才能成为leader节点。
如此,在另一个机房中的所有节点的数量大于分布式系统中的所有节点的总数量的一半的情况下,另一个机房中的任意一个节点均有获取到分布式系统中的各个节点的选票(每一个节点均可以向分布式系统中的一个节点投出一个选票)中的多于一半选票的可能性,如此,在这种情况下,在另一个机房中可以选举出leader节点,在另一个机房中选举出leader节点之后,另一个机房中的所有节点基于选举出的leader节点仍旧可以对外提供数据服务,从而可以避免服务中断。
但是,在另一个机房中的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半的情况下,另一个机房中的每一个节点都没有获取到分布式系统中的各个节点的选票(每一个节点均可以向分布式系统中的一个节点投出一个选票)中的多于一半选票的可能性,如此,在这种情况下,在另一个机房中无法选举出leader节点,在另一个机房中无法选举出leader节点的情况下,另一个机房中的所有节点就无法对外提供数据服务。这样,在其中一个机房中的所有节点无法对外提供数据服务而另一个机房中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等)的情况下,虽然另一个机房中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等),但是由于在另一个机房中的所有节点中无法选举出leader节点导致另一个机房中的所有节点也无法对外提供数据服务,进而导致分布式系统无法对外提供数据服务,导致服务中断。
可见,“在其中一个机房中的所有节点无法对外提供数据服务而另一个机房中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等)的情况下,另一个机房中的所有节点仍旧无法对外提供数据服务,仍旧出现服务中断的情况”的其中一个原因是:另一个机房中的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半,导致另一个机房中的所有节点无法选举出leader节点,从而导致另一个机房中的所有节点无法对外提供数据服务。
鉴于此,为了实现在“在其中一个机房中的所有节点无法对外提供数据服务而另一个机房中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等)的情况下,另一个机房中的所有节点能够对外提供数据服务”的需求,在一个方式中,可以使得:在“在其中一个机房中的所有节点无法对外提供数据服务而另一个机房中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等),且另一个机房中的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半”的情况下,另一个机房中的所有节点能够对外提供数据服务。
为了使得:在“其中一个机房中的所有节点无法对外提供数据服务而另一个机房中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等),且另一个机房中的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半”的情况下,另一个机房中的所有节点能够对外提供数据服务,在一个方式中,可以使得:在其中一个机房中的所有节点无法对外提供数据服务而另一个机房中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等),且另一个机房中的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半”的情况下,在另一个机房中的所有节点中能够选举出leader节点。
然而,由于在分布式系统中的节点中选举leader节点所使用的协议是raft协议,在raft协议下,获取分布式系统中的各个节点的选票(每一个节点均可以向分布式系统中的一个节点投出一个选票)中的多于一半选票的节点才能成为leader节点,也即,获取分布式系统中的所有节点中的多于一半节点的支持才能成为leader节点。
如此可见,raft协议的“获取分布式系统中的所有节点中的多于一半节点的支持才能成为leader节点”的思路与“另一个机房中的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半”的现状是矛盾的,也即,在“另一个机房中的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半”的情况下,基于raft协议在另一个机房中的所有节点中是无法选举出leader节点的。
鉴于此矛盾,为了使得:在“其中一个机房中的所有节点无法对外提供数据服务而另一个机房中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等),且另一个机房中的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半”的情况下,在另一个机房中的所有节点中能够选举出leader节点,发明人发现:
在其中一个机房中的所有节点无法对外提供数据服务的情况下,其中一个机房中的所有节点是不参与选举leader节点的选举工作的,另一个机房中的所有节点可以参与选举leader节点的选举工作,如此,发明人又发现:另一个机房中的每一个节点都没有获取到分布式系统中的各个节点的选票(每一个节点均可以向分布式系统中的一个节点投出一个选票)中的多于一半选票的可能性,进而可以确定出raft协议并不适合此时的选举工作,因此,发明人摒弃了raft协议的“获取分布式系统中的所有节点中的多于一半节点的支持才能成为leader节点”的思路,并开拓了一个新思路:“获取另一个机房中的所有节点中的多于一半的节点的支持就能够成为leader节点”。
也即,在“其中一个机房中的所有节点无法对外提供数据服务而另一个机房中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等),且另一个机房中的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半”的情况下,根据发明人开拓的新思路,获取另一个机房中的各个节点的选票(另一个机房中的每一个节点均可以向另一个机房中的一个节点投出一个选票)中的多于一半选票的节点就可以成为leader节点,也即,获取另一个机房中的所有节点中的多于一半的节点的支持就可以成为leader节点。
如此,在另一个机房中的所有节点中选举leader节点的场景中,就不受分布式系统中的所有节点的总数量以及raft协议的限制,另一个机房中的任意一个节点均有获取到另一个机房中的各个节点的选票(另一个机房中的每一个节点均可以向另一个机房中的一个节点投出一个选票)中的多于一半选票的可能性,如此,在这种情况下,在另一个机房中可以选举出leader节点,在另一个机房中选举出leader节点之后,另一个机房中的所有节点就可以对外提供数据服务,从而可以避免服务中断。
具体地,示出了本申请的一种分布式系统的结构示意图,分布式系统中包括:第一数据中心以及至少一个第二数据中心,每一个数据中心中分别部署有分布式系统中的一个以上的节点,各个数据中心中分别部署的节点不重合,第一数据中心中具有分布式系统中的第一leader节点。
同一个数据中心中的节点之间通信连接,且各个数据中心之间通信连接,如此使得分布式系统中的各个节点之间通信连接。
参见图1,在一个例子中,以”分布式系统中包括第一数据中心以及一个第二数据中心以及共包括六个节点,每一个数据中心中分别部署了三个节点。且两个数据中心中部署的节点不重合”为例进行举例说明,但不作为对本申请保护范围的限制。
其中,两个数据中心分别为第一数据中心以及第二数据中心,第一数据中心中部署有节点A、节点B以及节点C,第二数据中心中部署有节点D、节点E以及节点F。此时节点A为leader节点,节点B、节点C、节点D、节点E以及节点F为follower节点。
之后,在分布式系统中,leader节点A负责接收用于在分布式系统中写入数据的写操作,并根据写操作将该数据存储在leader节点A中,以及,将该数据同步给分布式系统中的follower节点B、follower节点C、follower节点D、follower节点E以及follower节点F,以使follower节点B将该数据存储follower节点B中、follower节点C将该数据存储follower节点C中、follower节点D将该数据存储follower节点D中、follower节点E将该数据存储follower节点E中以及follower节点F将该数据存储follower节点F中。
另外,参见图2,基于上述分布式系统,示出了本申请的一种在分布式系统中选举的方法,方法应用于图1所示的至少一个第二数据中心中的节点,该方法包括:
在步骤S101中,获取应急配置信息,应急配置信息是在第一数据中心中的节点不再具有对外提供数据服务的能力且至少一个第二数据中心中的节点仍旧具有对外提供数据服务的能力的情况下获取到的,应急配置信息中包括至少一个第二数据中心中的节点的节点标识;至少一个第二数据中心中的节点的数量小于或等于分布式系统中的所有节点的总数量的一半。
在初始情况下,分布式系统中具有第一数据中心以及至少一个第二数据中心,第一数据中心中的一个节点为分布式系统中的leader节点(此处可以看作第一leader节点)。且至少一个第二数据中心与第一数据中心不同。
在一种情况下,第一数据中心中的各个节点以及至少一个第二数据中心中的各个节点均具有对外提供数据服务的能力,第一数据中心中的各个节点以及至少一个第二数据中心中的各个节点均基于第一leader节点对外提供数据服务。
有时候,由于“第一数据中心中的所有节点宕机使得第一数据中心中的所有节点无法正常运行”或者第一数据中心所在地的通信设备宕机使得第一数据中心中的所有节点无法与外界通信”等原因,导致第一数据中心中的所有节点不再具有对外提供数据服务的能力,进而导致第一数据中心中的所有节点无法对外提供数据服务,而至少一个第二数据中心中的所有节点能够正常运行且能够正常与外界通信,至少一个第二数据中心中的所有节点均仍旧具有对外提供数据服务的能力。
由于第一leader节点位于第一数据中心中,如此,第一leader节点无法对外提供数据服务,进而会导致分布式系统无法对外提供数据服务,进而会导致服务中断。
如此,为了避免服务中断,在至少一个第二数据中心中的节点还具有对外提供数据服务的能力的情况下,可以在至少一个第二数据中心中重新选举新的leader节点(此处看作第二leader节点),以使至少一个第二数据中心中的节点可以基于第二leader节点继续对外提供数据服务,避免服务中断。
其中,在至少一个第二数据中心的所有节点的数量大于分布式系统中的所有节点的总数量的一半”的情况下,可以基于前述提到的raft协议在至少一个第二数据中心中重新选举第二leader节点。
然而,在至少一个第二数据中心的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半”的情况下,基于前述提到的raft协议在至少一个第二数据中心中是无法选举第二leader节点的,可以通过本申请的方式来在至少一个第二数据中心中重新选举第二leader节点。
其中,在本步骤中执行获取应急配置信息的节点可以是至少一个第二数据中心中的每一个节点(例如follower节点),也即,至少一个第二数据中心中的每一个节点都会执行本申请的方案,例如,先执行获取应急配置信息的步骤,然后再执行步骤S102。
以至少一个第二数据中心中其中一个节点为例进行举例说明。该其中一个节点可以获知分布式系统中的各个节点位于哪一个数据中心中,可以获知哪一个节点是第一leader节点,以及可以获知第一leader位于哪一个数据中心中。
分布式系统中的第一leader节点可以定期向分布式系统中的各个follower节点发送心跳信息,各个follower节点通过是否定期接收到第一leader节点发送的心跳信息来确定第一leader节点是否离线(也即,第一leader节点是否与各个follower节点是否还通信连接)。若各个follower节点超过定期对应的时长未接收到第一leader节点发送的心跳信息,则可以确定第一leader节点已经离线,进而可以确定第一leader节点不再具有对外提供数据服务的能力,进而可以确定第一leader节点无法对外提供数据服务。
对于该其中一个节点而言,在该其中一个节点超过定期对应的时长未接收到第一leader节点发送的心跳信息,则该其中一个节点可以确定第一leader节点已经离线,进而可以确定第一leader节点不再具有对外提供数据服务的能力,进而可以确定第一leader节点无法对外提供数据服务。
在第一leader节点离线的情况下,通常是至少一个第二数据中心与第一数据中心之间断开通信了,也即,第一数据中心离线了,通常是第一数据中心中的各个节点均不再具有对外提供数据服务的能力了,也即,第一数据中心中的各个节点均无法对外提供数据服务了。
如此,在一个可行的方式中,可以默认第一leader节点所在的第一数据中心中的各个节点均已经离线,可以默认第一leader节点所在的第一数据中心中的各个节点均不再具有对外提供数据服务的能力了,可以默认第一leader节点所在的第一数据中心中的各个节点均无法对外提供数据服务了,在至少一个第二数据中心中的节点的数量小于或等于分布式系统中的所有节点的总数量的一半的情况下,可以在至少一个第二数据中心中重新选举第二leader节点。
为了在至少一个第二数据中心中重新选举第二leader节点,该其中一个节点可以获取应急配置信息(例如该其中一个节点可以至少根据至少一个第二数据中心中的节点的节点标识生成应急配置信息等),应急配置信息中包括至少两个数据中心中的至少一个第二数据中心中的节点的节点标识,如此使得该其中一个节点根据应急配置信息可以获知此时需要在包括“应急配置信息中的各个节点标识对应的节点”的范围内选举第二leader节点,然后可以执行步骤S102。
或者,在另一个实施例中,分布式系统中还包括管理节点,上述检测第一leader节点的工作可以是分布式系统中的管理节点执行,管理节点生成应急配置信息,并向至少一个第二数据中心中的各个节点分别发送应急配置信息,这样,第一数据中的各个节点可以分别接收到应急配置信息,例如,该其中一个节点可以接收到应急配置信息等。
在步骤S102中,根据至少一个第二数据中心中的节点的节点标识,以被至少一个第二数据中心中的多于一半以上的节点支持即具有成为至少一个第二数据中心中的leader节点的资格为准则,在至少一个第二数据中心选举第二leader节点。
通过本步骤,可以实现在至少一个第二数据中心中的所有节点的范围内选举出一个leader节点,并作为第二leader节点,之后,至少一个第二数据中心中的节点的范围内就具有leader节点,如此,之后至少一个第二数据中心中的节点基于第二leader节点就可以对外提供数据服务。
其中,在至少一个第二数据中心选举第二leader节点的具体流程可以参见之后图2所示的实施例,在此不做详述。
在本申请中,获取应急配置信息,应急配置信息是在第一数据中心中的节点不再具有对外提供数据服务的能力且至少一个第二数据中心中的节点仍旧具有对外提供数据服务的能力的情况下获取到的,应急配置信息中包括至少一个第二数据中心中的节点的节点标识;至少一个第二数据中心中的节点的数量小于或等于分布式系统中的所有节点的总数量的一半。根据至少一个第二数据中心中的节点的节点标识,以被至少一个第二数据中心中的多于一半以上的节点支持即具有成为至少一个第二数据中心中的leader节点的资格为准则,在至少一个第二数据中心选举第二leader节点。
通过本申请,在“具有第一leader节点的第一数据中心中的所有节点无法对外提供数据服务而至少一个第二数据中心中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等),且至少一个第二数据中心中的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半”的情况下,至少一个第二数据中心中的任意一个节点均有获取到至少一个第二数据中心中的各个节点的选票(至少一个第二数据中心中的每一个节点均可以向至少一个第二数据中心中的一个节点投出一个选票)中的多于一半选票的可能性,如此,基于“获取至少一个第二数据中心中的各个节点的选票(至少一个第二数据中心中的每一个节点均可以向至少一个第二数据中心中的一个节点投出一个选票)中的多于一半选票的节点就可以成为leader节点,也即,获取至少一个第二数据中心中的所有节点中的多于一半的节点的支持就可以成为leader节点”的准则,在至少一个第二数据中心中的所有节点中能够选举出leader节点。在至少一个第二数据中心中选举出leader节点之后,至少一个第二数据中心中的所有节点就可以对外提供数据服务,从而可以避免服务中断。
在本申请另一实施例中,参见图3,步骤S102包括:
在步骤S201中,根据至少一个第二数据中心中的节点的节点标识,获取至少一个第二数据中心中的每一个节点分别被投票后得到的选举票数。
其中,在本步骤之前,可以还包括步骤S200:根据至少一个第二数据中心中的节点的节点标识,对至少一个第二数据中心中的节点投票。
在本申请一个实施例中,该方法应用于至少一个第二数据中心中的各个节点中,也即,至少一个第二数据中心中的各个节点均需要执行对至少一个第二数据中心中的节点投票的操作,例如,至少一个第二数据中心中的各个节点分别对至少一个第二数据中心中的一个节点投票。
其中,之后的描述以至少一个第二数据中心中的该其中一个节点为例进行举例说明,对于至少一个第二数据中心中的其他每一个节点,同样如此。
在根据至少一个第二数据中心中的节点的节点标识,对至少一个第二数据中心中的节点投票时,可以通过如下流程实现,包括:
2001、接收至少一个节点发送的投票请求。
其中,至少一个第二数据中心中的每一个节点都会执行对至少一个第二数据中心中的节点投票的操作,例如,对于至少一个第二数据中心中的任意一个节点,如果该任意一个节点想要至少一个第二数据中心中的其他节点对自己投票,则可以向至少一个第二数据中心中的其他节点发送投票请求,在至少一个第二数据中心中的其他节点接收到投票请求的情况下,若至少一个第二数据中心中的其他节点想对该任意一个节点投票,则至少一个第二数据中心中的其他节点会响应该投票请求,例如,根据该投票请求对该任意一个节点投票,若至少一个第二数据中心中的其他节点不想对该任意一个节点投票,则至少一个第二数据中心中的其他节点就会拒绝响应该投票请求,例如,不会根据该投票请求对该任意一个节点投票。对于至少一个第二数据中心中的其他每一个节点,同样如此。
若有节点向至少一个第二数据中心中的该其中一个节点发送该投票请求,则该其中一个节点就会接收到该投票请求。
有时候,该其中一个节点可能会接收到一个节点发送的投票请求,也可能接收到两个以上的不同的节点分别发送的投票请求。
在该其中一个节点接收到的至少一个节点发送的投票请求中,有些投票请求可能是至少一个第二数据中心中的节点发送的,有些投票请求可能并不是至少一个第二数据中心中的节点发送的(也即是非选举范围内的节点发送的投票请求等)。
然而,在本申请中,至少一个第二数据中心中的节点在投票时,只能对至少一个第二数据中心中的节点投票,而不能对非至少一个第二数据中心中的节点投票,这样,该其中一个节点在投票时只能对至少一个第二数据中心中的节点投票,而不能对非至少一个第二数据中心中的节点投票,如此,在该其中一个节点接收到至少一个节点发送的投票请求之后,可以执行步骤2002。
2002、根据至少一个第二数据中心中的节点的节点标识,确定至少一个节点中是否具有至少一个第二数据中心中的节点。
在本申请一个实施例中,本步骤可以通过如下流程实现,包括:
11)、对于至少一个节点中的任意一个节点,根据节点的节点标识获取在节点中最近一次写入的数据对应的第一索引标识;越早在分布式系统中的节点中写入的数据对应的索引标识小于越晚在分布式系统中的节点中写入的数据对应的索引标识。
每当需要在分布式系统中写入一个数据,则分布式系统中的leader节点可以为数据分配索引标识,然后在leader节点中存储这一个数据以及这一个数据的索引标识,以及向分布式系统中的除leader节点以外的follower节点同步这一个数据以及这一个数据的索引标识,以使follower节点在follower节点中写入这一个数据以及这一个数据的索引标识。
每一次在分布式系统中写入的数据的索引标识不同。
如此,对于至少一个节点中的任意一个节点,该其中一个节点可以获取该任意一个节点的节点标识,该任意一个节点的节点标识可以携带在该任意一个节点发送的投票请求中,如此,可以从该任意一个节点发送的投票请求中提取该任意一个节点的节点标识。
然后,该其中一个节点可以根据该任意一个节点的节点标识获取在该任意一个节点中最近一次写入的数据对应的第一索引标识。例如,该其中一个节点可以根据该任意一个节点的节点标识向该任意一个节点发送获取请求,该任意一个节点在接收到该获取请求之后,可以根据该获取请求向该其中一个节点发送在该任意一个节点中最近一次写入的数据对应的第一索引标识,如此,该其中一个节点可以接收在该任意一个节点中最近一次写入的数据对应的第一索引标识,然后执行步骤12)。
12)、获取在至少一个第二数据中心中的节点中最近一次写入的数据对应的第二索引标识。
其中,该其中一个节点中可以直接在该其中一个节点中获取最近一次写入的数据对应的第二索引标识,并作为在至少一个第二数据中心中的节点中最近一次写入的数据对应的第二索引标识。
13)、在第一索引标识等于第二索引标识的情况下,确定该任意一个节点为至少一个第二数据中心中的节点。
在第一索引标识等于第二索引标识的情况下,说明在该其中一个节点中最近一次写入的数据与在该任意一个节点中最近一次写入的数据是相同的,由于在同一个数据中心中的各个节点中最近一次写入的数据往往是相同的,如此可以说明该其中一个节点与该任意一个节点均位于同一个数据中心中,如此,由于该其中一个节点位于至少一个第二数据中心中,如此,可以确定该任意一个节点为至少一个第二数据中心中的节点。
14)、在第一索引标识小于第二索引标识的情况下,确定节点不为至少一个第二数据中心中的节点。
通过本实施例,可以确定出至少一个节点中的哪些节点是至少一个第二数据中心中的节点,哪些节点不是至少一个第二数据中心中的节点等。
2003、在至少一个节点具有至少一个第二数据中心中的节点的情况下,根据至少一个节点中的至少一个第二数据中心中的一个节点发送的投票请求,对至少一个节点中的至少一个第二数据中心中的一个节点投票。
在本申请一个实施例中,在至少一个节点中具有至少一个第二数据中心中的一个节点的情况下,根据至少一个节点中的至少一个第二数据中心中的一个节点发送的投票请求,对至少一个节点中的至少一个第二数据中心中的一个节点投票。
或者,在本申请另一个实施例中,在至少一个节点中具有至少一个第二数据中心中的至少两个节点的情况下,根据至少一个节点中的至少一个第二数据中心中的至少两个节点中的一个节点发送的投票请求,对至少一个节点中的至少一个第二数据中心中的至少两个节点中的一个节点投票,例如,该其中一个节点可以从至少一个节点中的至少一个第二数据中心中的至少两个节点种选择一个节点,并对选择的这一个节点投票。
2004、在至少一个节点不具有至少一个第二数据中心中的节点的情况下,拒绝响应至少一个节点中的每一个节点发送的投票请求。
其中,根据“至少一个第二数据中心中的节点在投票时只能对至少一个第二数据中心中的节点投票,而不能不能对非至少一个第二数据中心中的节点投票”的原则,在至少一个节点不具有至少一个第二数据中心中的节点的情况下,该其中一个节点可以拒绝为至少一个节点中的每一个节点投票。
在步骤S202中,将至少一个第二数据中心中的、得到的选举票数大于至少一个第二数据中心中的节点的总数量的一半的节点确定为至少一个第二数据中心中的第二leader节点。
在本申请另一个实施例中,在一个场景中,至少一个第二数据中心的节点的数量与第一数据中心中的节点的数量相同,也即,至少一个第二数据中心中的节点的数量等于分布式系统中包括的所有节点的数量的一半。
有时候,在一个情况下,是由于“第一数据中心所在地的通信设备宕机(第一数据中心中的节点均能够正常运行)使得第一数据中心中的所有节点无法与外界通信”而导致第一数据中心中的所有节点无法对外提供数据服务。也即,只要第一数据中心中的能够正常跟外界通信即可对有对外提供数据服务的能力。
在至少一个第二数据中心中正在选举第二leader节点的过程中,第一数据中心所在地的通信设备可能有恢复正常了,使得第一数据中心中的节点可以正常跟外界通信了,例如,使得第一数据中心中的节点与至少一个第二数据中心中的节点之间可以正常通信了。也即,第一数据中心中的所有节点恢复了对外提供数据服务的能力。
这样,在第一数据中心中的所有节点恢复对外提供数据服务的能力的情况下,第一数据中心中的所有节点是可以参与选举leader节点的选举工作的。
但是,此时第一数据中心的所有节点选举leader节点遵循的是raft协议中的“获取分布式系统中的各个节点的选票(每一个节点均可以向分布式系统中的一个节点投出一个选票)中的多于一半选票的节点才能成为leader节点”的准则,而至少一个第二数据中心中的所有节点选举leader节点咨询的是本申请中的“获取至少一个第二数据中心中的各个节点的选票(每一个节点均可以向至少一个第二数据中心中的一个节点投出一个选票)中的多于一半选票的节点才能成为leader节点”的准则。
如此,若至少一个第二数据中心中的略超过一半的节点的选票被投至至少一个第二数据中心的一个节点中,则至少一个第二数据中心中的这一个节点即会成为leader节点。
以及,若至少一个第二数据中心中的其他的略少于一半的节点的选票以及第一数据中心中的所有节点的选票均被投至第一数据中心的一个节点,则第一数据中心的一个节点即会成为leader节点。
但是,这样就出现了包括至少一个第二数据中心以及第一数据中心的分布式系统中具有两个leader节点的情况,也即,出现了“脑裂”情况,两个节点都有在分布式系统中均具有执行写操作的能力,可能会导致分布式系统中的数据不一致的情况发生。
因此,需要避免出现分布式系统中具有两个leader节点的情况。
为了避免分布式系统中具有两个leader节点的情况,在另一个实施例中,在执行步骤S202时,也即,在将至少一个第二数据中心中的、得到的选举票数大于至少一个第二数据中心中的节点的总数量的一半的节点确定为至少一个第二数据中心中的第二leader节点时,可以将至少一个第二数据中心中的、得到的选举票数等于至少一个第二数据中心中的节点的总数量的节点确定为至少一个第二数据中心中的第二leader节点。
这样,在“至少一个第二数据中心的节点的数量与第一数据中心中的节点的数量相同,也即,至少一个第二数据中心中的节点的数量等于分布式系统中包括的所有节点的数量的一半”的情况下,一方面,在至少一个第二数据中心中的一个节点被选举为leader节点的情况下,则至少一个第二数据中心中的这一个节点得到的选举票数等于至少一个第二数据中心中的节点的总数量(也等于分布式系统中的所有节点的选举票数的一半),这样,第一数据中心中的任意一个节点得到的选举票数的数量都不会超过分布式系统中的所有节点的选举票数的一半,这样就不会在第一数据中心中选举出一个leader节点,如此使得分布式系统中不会具有两个leader节点。
以及,另一方面,在第一数据中心中的一个节点被选举为leader节点的情况下,则第一数据中心中的这一个节点得到的选举票数大于分布式系统中的所有节点的选举票数的一半,这样,至少一个第二数据中心中的任意一个节点得到的选举票数的数量都不会超过分布式系统中的所有节点的选举票数的一半(也即,不会超过至少一个第二数据中心中的节点的总数量),这样就不会在至少一个第二数据中心中选举出一个leader节点,如此使得分布式系统中不会具有两个leader节点。
其中,在至少一个第二数据中心选举第二leader节点之后,至少一个第二数据中心中的节点基于第二leader节点就可以对外提供数据服务。
然而,在至少一个第二数据中心中的节点基于第二leader节点对外提供数据服务之后,有时候,第一数据中心中的节点可能恢复对外提供数据服务的能力。
发明人又发现:至少一个第二数据中心中的节点是分布式系统中的部分节点,至少一个第二数据中心中的节点对外提供数据服务的效率是低于分布式系统中的所有节点对外提供数据服务的效率的。
如此,在第一数据中心中的节点又恢复了对外提供数据服务的能力的情况下,为了提高对外提供数据服务的效率,在一个方式中,之后可以结合第一数据中心以及至少一个第二数据中心共同对外提供数据服务。
发明人发现,在至少一个第二数据中心中的数据与第一数据中心中的数据相同的情况下,可以结合第一数据中心以及至少一个第二数据中心共同对外提供数据服务,这样可以保障数据一致性,否则,若至少一个第二数据中心与第一数据中心对外提供数据服务所基于的数据不同,则会导致服务异常,或者,会降低被服务的客户的体验。
因此,为了避免这种情况发生,在结合第一数据中心以及至少一个第二数据中心共同对外提供数据服务之前,在一个方式中,可以使得至少一个第二数据中心中的数据与第一数据中心中的数据相同。
为了使得至少一个第二数据中心中的数据与第一数据中心中的数据相同,在本申请另一实施例中,参见图4,该方法还包括:
在步骤S301中,在第一数据中心中的节点恢复具有对外提供数据服务的能力的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据是否相同。
其中,在至少一个第二数据中心中的节点与第一数据中心中的节点之间恢复通信连接且第一数据中心中的节点恢复至能够正常运行的情况下,可以确定至少一个第二数据中心中的数据与第一数据中心中的数据是否相同。
在本申请一个实施例中,本步骤可以通过如下流程实现,包括:
3011、获取在第一数据中心中的节点中最近一次写入的数据对应的第三索引标识;越早在分布式系统中的节点中写入的数据对应的索引标识小于越晚在分布式系统中的节点中写入的数据对应的索引标识。
每当需要在分布式系统中写入一个数据,则分布式系统中的leader节点可以为数据分配索引标识,然后在leader节点中存储这一个数据以及这一个数据的索引标识,以及向分布式系统中的除leader节点以外的follower节点同步这一个数据以及这一个数据的索引标识,以使follower节点在follower节点中写入这一个数据以及这一个数据的索引标识。
每一次在分布式系统中写入的数据的索引标识不同。
在第一数据中心中的各个节点中分别最近一次写入的数据是相同的,如此,在第一数据中心中的各个节点中分别最近一次写入的数据对应的第三索引标识是相同的。
如此,对于该其中一个节点(其是至少一个第二数据中心)而言,该其中一个节点可以获取在第一数据中心中的任意一个节点中最近一次写入的数据对应的第三索引标识,并作为在第一数据中心中的节点中最近一次写入的数据对应的第三索引标识。
如此,对于第一数据中心的任意一个节点,该其中一个节点可以获取该任意一个节点的节点标识,该任意一个节点的节点标识可以携带在该任意一个节点发送的投票请求中,如此,可以从该任意一个节点发送的投票请求中提取该任意一个节点的节点标识。
然后,该其中一个节点可以根据该任意一个节点的节点标识获取在该任意一个节点中最近一次写入的数据对应的第一索引标识。例如,该其中一个节点可以根据该任意一个节点的节点标识向该任意一个节点发送获取请求,该任意一个节点在接收到该获取请求之后,可以根据该获取请求向该其中一个节点发送在该任意一个节点中最近一次写入的数据对应的第一索引标识,如此,该其中一个节点可以接收在该任意一个节点中最近一次写入的数据对应的第一索引标识。
3012、获取在至少一个第二数据中心中的节点中最近一次写入的数据对应的第四索引标识。
其中,该其中一个节点中可以直接在该其中一个节点中获取最近一次写入的数据对应的第二索引标识,并作为在至少一个第二数据中心中的节点中最近一次写入的数据对应的第四索引标识。
3013、在第三索引标识等于第四索引标识的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据相同。
3014、在第三索引标识小于第四索引标识的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据不同。
在步骤S302中,在至少一个第二数据中心中的数据与第一数据中心中的数据不同的情况下,向第一数据中心同步至少一个第二数据中心中的数据,以使至少一个第二数据中心中的数据与第一数据中心中的数据相同。
在本申请一个实施例中,本步骤可以通过如下流程实现,包括:
3021、根据第三索引标识以及第四索引标识,在至少一个第二数据中心中的数据中获取需要向第一数据中心同步的数据。
在本申请一个实施例中,在第三索引标识以及第四索引标识为顺序相邻的两个索引标识的情况下,该其中一个节点可以在至少一个第二数据中心中的数据中确定第四索引标识对应的第一数据,并根据第一数据获取需要向第一数据中心同步的数据。
或者,在本申请另一个实施例中,在第三索引标识以及第四索引标识不为顺序相邻的两个索引标识的情况下,该其中一个节点可以在至少一个第二数据中心中的数据中确定第四索引标识对应的第一数据,以及,在至少一个第二数据中心中的数据中确定位于第三索引标识与第四索引标识之间的索引标识对应的第二数据,并根据第一数据以及第二数据获取需要向第一数据中心同步的数据。
3022、向第一数据中心同步确定出的数据。
例如,向第一数据中心中的各个节点同步确定出的数据等。
在本申请另一实施例中,在至少一个第二数据中心中的数据与第一数据中心中的数据相同的情况下,则不需要向第一数据中心同步至少一个第二数据中心中的数据,可以结束流程。
在本申请另一个实施例中,在步骤S101中至少一个第二数据中心中的该其中一个节点在获取到应急配置信息的情况下,可以存储应急配置信息,例如,在该其中一个节点中存储应急配置信息。
在存储有应急配置信息的情况下,该其中一个节点之后参与的选举leader节点的范围均是根据应急配置信息确定选举范围:至少一个第二数据中心中的节点,而不会在超过至少一个第二数据中心外的范围参与选举。
例如,之后若需要在至少一个第二数据中心中重新选举leader节点的情况下,该其中一个节点存储有应急配置信息,如此,该其中一个节点根据应急配置信息可以获知此时需要在包括“应急配置信息中的各个节点标识对应的节点”的范围内(也即至少一个第二数据中心的范围内)重新第二leader节点。
进一步地,在第一数据中心中的节点又恢复了对外提供数据服务的能力之后,且在至少一个第二数据中心中的数据与第一数据中心中的数据相同并结合第一数据中心以及至少一个第二数据中心共同对外提供数据服务的情况下,之后选举leader节点的范围可以包括至少一个第二数据中心以及第一数据中心,如此,可以删除应急配置信息。
在删除应急配置信息的情况下,该其中一个节点之后参与的选举leader节点的范围是包括至少一个第二数据中心以及第一数据中心,而不再是根据应急配置信息确定的选举范围:至少一个第二数据中心中的节点,可以避免选举工作遗漏掉第一数据中心中的节点。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作并不一定是本申请所必须的。
参照图5,示出了本申请的一种在分布式系统中选举的装置的结构框图,所述分布式系统中包括:第一数据中心以及至少一个第二数据中心,每一个数据中心中分别部署有所述分布式系统中的一个以上的节点,各个数据中心中分别部署的节点不重合,第一数据中心中具有所述分布式系统中的第一引领者节点,所述装置应用于至少一个第二数据中心中的节点,所述装置包括:
获取模块11,用于获取应急配置信息,所述应急配置信息是在第一数据中心中的节点不再具有对外提供数据服务的能力且至少一个第二数据中心中的节点仍旧具有对外提供数据服务的能力的情况下获取到的,所述应急配置信息中包括至少一个第二数据中心中的节点的节点标识;至少一个第二数据中心中的节点的数量小于或等于所述分布式系统中的所有节点的总数量的一半;
选举模块12,用于根据至少一个第二数据中心中的节点的节点标识,以被至少一个第二数据中心中的多于一半以上的节点支持即具有成为至少一个第二数据中心中的引领者节点的资格为准则,在至少一个第二数据中心选举第二引领者节点。
在一个可选的实现方式中,所述选举模块包括:
第一获取子模块,用于根据至少一个第二数据中心中的节点的节点标识,获取至少一个第二数据中心中的每一个节点分别被投票后得到的选举票数;
第一确定子模块,用于将至少一个第二数据中心中的、得到的选举票数大于至少一个第二数据中心中的节点的总数量的一半的节点确定为至少一个第二数据中心中的第二引领者节点。
在一个可选的实现方式中,所述第一确定子模块包括:
第一确定单元,用于将至少一个第二数据中心中的、得到的选举票数等于至少一个第二数据中心中的节点的总数量的节点确定为至少一个第二数据中心中的第二引领者节点。
在一个可选的实现方式中,所述选举模块还包括:
投票子模块,用于根据至少一个第二数据中心中的节点的节点标识,对至少一个第二数据中心中的节点投票。
在一个可选的实现方式中,所述投票子模块包括:
接收单元,用于接收至少一个节点发送的投票请求;
第二确定单元,用于根据至少一个第二数据中心中的节点的节点标识,确定所述至少一个节点中是否具有至少一个第二数据中心中的节点;
投票单元,用于在所述至少一个节点具有至少一个第二数据中心中的节点的情况下,根据所述至少一个节点中的至少一个第二数据中心中的一个节点发送的投票请求,对所述至少一个节点中的至少一个第二数据中心中的一个节点投票。
在一个可选的实现方式中,所述第二确定单元包括:
第一获取子单元,用于对于所述至少一个节点中的任意一个节点,根据所述节点的节点标识获取在所述节点中最近一次写入的数据对应的第一索引标识;越早在分布式系统中的节点中写入的数据对应的索引标识小于越晚在分布式系统中的节点中写入的数据对应的索引标识;
第二获取子单元,用于获取在至少一个第二数据中心中的节点中最近一次写入的数据对应的第二索引标识;
第一确定子单元,用于在第一索引标识等于第二索引标识的情况下,确定所述节点为至少一个第二数据中心中的节点;
或者,
第二确定子单元,用于在第一索引标识小于第二索引标识的情况下,确定所述节点不为至少一个第二数据中心中的节点。
在一个可选的实现方式中,所述装置还包括:
确定模块,用于在第一数据中心中的节点恢复具有对外提供数据服务的能力的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据是否相同;
同步模块,用于在至少一个第二数据中心中的数据与第一数据中心中的数据不同的情况下,向第一数据中心同步至少一个第二数据中心中的数据,以使至少一个第二数据中心中的数据与第一数据中心中的数据相同。
在一个可选的实现方式中,所述确定模块包括:
第二获取子模块,用于获取在第一数据中心中的节点中最近一次写入的数据对应的第三索引标识;越早在分布式系统中的节点中写入的数据对应的索引标识小于越晚在分布式系统中的节点中写入的数据对应的索引标识;
第三获取子模块,用于获取在至少一个第二数据中心中的节点中最近一次写入的数据对应的第四索引标识;
第二确定子模块,用于在第三索引标识等于第四索引标识的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据相同;
或者,
第三确定子模块,用于在第三索引标识小于第四索引标识的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据不同。
在一个可选的实现方式中,所述同步模块包括:
第四获取子模块,用于根据第三索引标识以及第四索引标识,在至少一个第二数据中心中的数据中获取需要向第一数据中心同步的数据;
同步子模块,用于向第一数据中心同步确定出的数据。
在一个可选的实现方式中,所述第四获取子模块包括:
第一获取单元,用于在第三索引标识以及第四索引标识为顺序相邻的两个索引标识的情况下,在至少一个第二数据中心中的数据中确定第四索引标识对应的第一数据,根据第一数据获取需要向第一数据中心同步的数据;
或者,
第二获取单元,用于在第三索引标识以及第四索引标识不为顺序相邻的两个索引标识的情况下,在至少一个第二数据中心中的数据中确定第四索引标识对应的第一数据,以及,在至少一个第二数据中心中的数据中确定位于第三索引标识与第四索引标识之间的索引标识对应的第二数据,根据第一数据以及第二数据获取需要向第一数据中心同步的数据。
在一个可选的实现方式中,所述装置还包括:
存储模块,用于在获取到所述应急配置信息的情况下,存储所述应急配置信息。
在一个可选的实现方式中,所述装置还包括:
删除模块,用于在至少一个第二数据中心中的数据与第一数据中心中的数据相同的情况下,删除所述应急配置信息。
在本申请中,获取应急配置信息,所述应急配置信息是在第一数据中心中的节点不再具有对外提供数据服务的能力且至少一个第二数据中心中的节点仍旧具有对外提供数据服务的能力的情况下获取到的,所述应急配置信息中包括至少一个第二数据中心中的节点的节点标识;至少一个第二数据中心中的节点的数量小于或等于所述分布式系统中的所有节点的总数量的一半。根据至少一个第二数据中心中的节点的节点标识,以被至少一个第二数据中心中的多于一半以上的节点支持即具有成为至少一个第二数据中心中的引领者节点的资格为准则,在至少一个第二数据中心选举第二引领者节点。
通过本申请,在“具有第一引领者节点的第一数据中心中的所有节点无法对外提供数据服务而至少一个第二数据中心中的所有节点还具有对外提供数据服务的能力(例如能够正常运行且能够正常与外界通信等),且至少一个第二数据中心中的所有节点的数量小于或等于分布式系统中的所有节点的总数量的一半”的情况下,至少一个第二数据中心中的任意一个节点均有获取到至少一个第二数据中心中的各个节点的选票(至少一个第二数据中心中的每一个节点均可以向至少一个第二数据中心中的一个节点投出一个选票)中的多于一半选票的可能性,如此,基于“获取至少一个第二数据中心中的各个节点的选票(至少一个第二数据中心中的每一个节点均可以向至少一个第二数据中心中的一个节点投出一个选票)中的多于一半选票的节点就可以成为引领者节点,也即,获取至少一个第二数据中心中的所有节点中的多于一半的节点的支持就可以成为引领者节点”的准则,在至少一个第二数据中心中的所有节点中能够选举出引领者节点。在至少一个第二数据中心中选举出引领者节点之后,至少一个第二数据中心中的所有节点就可以对外提供数据服务,从而可以避免服务中断。
本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备时,可以使得该设备执行本申请实施例中各方法步骤的指令(instructions)。
本申请实施例提供了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得电子设备执行如上述实施例中一个或多个的方法。本申请实施例中,电子设备包括服务器、网关、子设备等,子设备为物联网设备等设备。
本公开的实施例可被实现为使用任意适当的硬件,固件,软件,或及其任意组合进行想要的配置的装置,该装置可包括服务器(集群)、终端设备如IoT设备等电子设备。
图6示意性地示出了可被用于实现本申请中的各个实施例的示例性装置1300。
对于一个实施例,图6示出了示例性装置1300,该装置具有一个或多个处理器1302、被耦合到(一个或多个)处理器1302中的至少一个的控制模块(芯片组)1304、被耦合到控制模块1304的存储器1306、被耦合到控制模块1304的非易失性存储器(NVM)/存储设备1308、被耦合到控制模块1304的一个或多个输入/输出设备1310,和被耦合到控制模块1304的网络接口1312。
处理器1302可包括一个或多个单核或多核处理器,处理器1302可包括通用处理器或专用处理器(例如图形处理器、应用处理器、基频处理器等)的任意组合。在一些实施例中,装置1300能够作为本申请实施例中网关等服务器设备。
在一些实施例中,装置1300可包括具有指令1314的一个或多个计算机可读介质(例如,存储器1306或NVM/存储设备1308)和与该一个或多个计算机可读介质相合并被配置为执行指令1314以实现模块从而执行本公开中的动作的一个或多个处理器1302。
对于一个实施例,控制模块1304可包括任意适当的接口控制器,以向(一个或多个)处理器1302中的至少一个和/或与控制模块1304通信的任意适当的设备或组件提供任意适当的接口。
控制模块1304可包括存储器控制器模块,以向存储器1306提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。
存储器1306可被用于例如为装置1300加载和存储数据和/或指令1314。对于一个实施例,存储器1306可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,存储器1306可包括双倍数据速率四同步动态随机存取存储器(DDR4SDRAM)。
对于一个实施例,控制模块1304可包括一个或多个输入/输出控制器,以向NVM/存储设备1308及(一个或多个)输入/输出设备1310提供接口。
例如,NVM/存储设备1308可被用于存储数据和/或指令1314。NVM/存储设备1308可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD)、一个或多个光盘(CD)驱动器和/或一个或多个数字通用光盘(DVD)驱动器)。
NVM/存储设备1308可包括在物理上作为装置1300被安装在其上的设备的一部分的存储资源,或者其可被该设备访问可不必作为该设备的一部分。例如,NVM/存储设备1308可通过网络经由(一个或多个)输入/输出设备1310进行访问。
(一个或多个)输入/输出设备1310可为装置1300提供接口以与任意其他适当的设备通信,输入/输出设备1310可以包括通信组件、拼音组件、传感器组件等。网络接口1312可为装置1300提供接口以通过一个或多个网络通信,装置1300可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信,例如接入基于通信标准的无线网络,如WiFi、2G、3G、4G、5G等,或它们的组合进行无线通信。
对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器(例如,存储器控制器模块)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器的逻辑封装在一起以形成系统级封装(SiP)。对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(SoC)。
在各个实施例中,装置1300可以但不限于是:服务器、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)等终端设备。在各个实施例中,装置1300可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,装置1300包括一个或多个摄像机、键盘、液晶显示器(LCD)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC)和扬声器。
本申请实施例提供了一种电子设备,包括:一个或多个处理器;和,其上存储有指令的一个或多个机器可读介质,当由一个或多个处理器执行时,使得电子设备执行如本申请中一个或多个的方法。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、和流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程信息处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程信息处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程信息处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程信息处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例和落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的在分布式系统中选举的方法及装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。
Claims (11)
1.一种在分布式系统中选举的方法,其特征在于,所述分布式系统中包括:第一数据中心以及至少一个第二数据中心,每一个数据中心中分别部署有所述分布式系统中的一个以上的节点,各个数据中心中分别部署的节点不重合,第一数据中心中具有所述分布式系统中的第一引领者节点,所述方法应用于至少一个第二数据中心中的节点,所述方法包括:
获取应急配置信息,所述应急配置信息是在第一数据中心中的节点不再具有对外提供数据服务的能力且至少一个第二数据中心中的节点仍旧具有对外提供数据服务的能力的情况下获取到的,所述应急配置信息中包括至少一个第二数据中心中的节点的节点标识;至少一个第二数据中心中的节点的数量小于或等于所述分布式系统中的所有节点的总数量的一半;
根据至少一个第二数据中心中的节点的节点标识,对至少一个第二数据中心中的节点投票;
根据至少一个第二数据中心中的节点的节点标识,以被至少一个第二数据中心中的多于一半以上的节点投票支持即具有成为至少一个第二数据中心中的引领者节点的资格为准则,在至少一个第二数据中心选举第二引领者节点;
其中,所述根据至少一个第二数据中心中的节点的节点标识,对至少一个第二数据中心中的节点投票,包括:
接收至少一个节点发送的投票请求;
根据至少一个第二数据中心中的节点的节点标识,确定所述至少一个节点中是否具有至少一个第二数据中心中的节点;
在所述至少一个节点具有至少一个第二数据中心中的节点的情况下,根据所述至少一个节点中的至少一个第二数据中心中的一个节点发送的投票请求,对所述至少一个节点中的至少一个第二数据中心中的一个节点投票;
其中,所述根据至少一个第二数据中心中的节点的节点标识,确定所述至少一个节点中是否具有至少一个第二数据中心中的节点,包括:
对于所述至少一个节点中的任意一个节点,根据所述节点的节点标识获取在所述节点中最近一次写入的数据对应的第一索引标识;越早在分布式系统中的节点中写入的数据对应的索引标识小于越晚在分布式系统中的节点中写入的数据对应的索引标识;
获取在至少一个第二数据中心中的节点中最近一次写入的数据对应的第二索引标识;
在第一索引标识等于第二索引标识的情况下,确定所述节点为至少一个第二数据中心中的节点;
或者,
在第一索引标识小于第二索引标识的情况下,确定所述节点不为至少一个第二数据中心中的节点。
2.根据权利要求1所述的方法,其特征在于,所述根据至少一个第二数据中心中的节点的节点标识,以被至少一个第二数据中心中的多于一半以上的节点投票支持即具有成为至少一个第二数据中心中的引领者节点的资格为准则,在至少一个第二数据中心选举第二引领者节点,包括:
根据至少一个第二数据中心中的节点的节点标识,获取至少一个第二数据中心中的每一个节点分别被投票后得到的选举票数;
将至少一个第二数据中心中的、得到的选举票数大于至少一个第二数据中心中的节点的总数量的一半的节点确定为至少一个第二数据中心中的第二引领者节点。
3.根据权利要求2所述的方法,其特征在于,所述将至少一个第二数据中心中的、得到的选举票数大于至少一个第二数据中心中的节点的总数量的一半的节点确定为至少一个第二数据中心中的第二引领者节点,包括:
将至少一个第二数据中心中的、得到的选举票数等于至少一个第二数据中心中的节点的总数量的节点确定为至少一个第二数据中心中的第二引领者节点。
4.一种在分布式系统中选举的方法,其特征在于,所述分布式系统中包括:第一数据中心以及至少一个第二数据中心,每一个数据中心中分别部署有所述分布式系统中的一个以上的节点,各个数据中心中分别部署的节点不重合,第一数据中心中具有所述分布式系统中的第一引领者节点,所述方法应用于至少一个第二数据中心中的节点,所述方法包括:
获取应急配置信息,所述应急配置信息是在第一数据中心中的节点不再具有对外提供数据服务的能力且至少一个第二数据中心中的节点仍旧具有对外提供数据服务的能力的情况下获取到的,所述应急配置信息中包括至少一个第二数据中心中的节点的节点标识;至少一个第二数据中心中的节点的数量小于或等于所述分布式系统中的所有节点的总数量的一半;
根据至少一个第二数据中心中的节点的节点标识,以被至少一个第二数据中心中的多于一半以上的节点支持即具有成为至少一个第二数据中心中的引领者节点的资格为准则,在至少一个第二数据中心选举第二引领者节点;
所述方法还包括:
在第一数据中心中的节点恢复具有对外提供数据服务的能力的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据是否相同;
在至少一个第二数据中心中的数据与第一数据中心中的数据不同的情况下,向第一数据中心同步至少一个第二数据中心中的数据,以使至少一个第二数据中心中的数据与第一数据中心中的数据相同;
其中,所述确定至少一个第二数据中心中的数据与第一数据中心中的数据是否相同,包括:
获取在第一数据中心中的节点中最近一次写入的数据对应的第三索引标识;越早在分布式系统中的节点中写入的数据对应的索引标识小于越晚在分布式系统中的节点中写入的数据对应的索引标识;
获取在至少一个第二数据中心中的节点中最近一次写入的数据对应的第四索引标识;
在第三索引标识等于第四索引标识的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据相同;
或者,
在第三索引标识小于第四索引标识的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据不同。
5.根据权利要求4所述的方法,其特征在于,所述向第一数据中心同步至少一个第二数据中心中的数据,包括:
根据第三索引标识以及第四索引标识,在至少一个第二数据中心中的数据中获取需要向第一数据中心同步的数据;
向第一数据中心同步确定出的数据。
6.根据权利要求5所述的方法,其特征在于,所述根据第三索引标识以及第四索引标识,在至少一个第二数据中心中的数据中获取需要向第一数据中心同步的数据,包括:
在第三索引标识以及第四索引标识为顺序相邻的两个索引标识的情况下,在至少一个第二数据中心中的数据中确定第四索引标识对应的第一数据,根据第一数据获取需要向第一数据中心同步的数据;
或者,
在第三索引标识以及第四索引标识不为顺序相邻的两个索引标识的情况下,在至少一个第二数据中心中的数据中确定第四索引标识对应的第一数据,以及,在至少一个第二数据中心中的数据中确定位于第三索引标识与第四索引标识之间的索引标识对应的第二数据,根据第一数据以及第二数据获取需要向第一数据中心同步的数据。
7.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在获取到所述应急配置信息的情况下,存储所述应急配置信息;
进一步地,在至少一个第二数据中心中的数据与第一数据中心中的数据相同的情况下,删除所述应急配置信息。
8.一种在分布式系统中选举的装置,其特征在于,所述分布式系统中包括:第一数据中心以及至少一个第二数据中心,每一个数据中心中分别部署有所述分布式系统中的一个以上的节点,各个数据中心中分别部署的节点不重合,第一数据中心中具有所述分布式系统中的第一引领者节点,所述装置应用于至少一个第二数据中心中的节点,所述装置包括:
获取模块,用于获取应急配置信息,所述应急配置信息是在第一数据中心中的节点不再具有对外提供数据服务的能力且至少一个第二数据中心中的节点仍旧具有对外提供数据服务的能力的情况下获取到的,所述应急配置信息中包括至少一个第二数据中心中的节点的节点标识;至少一个第二数据中心中的节点的数量小于或等于所述分布式系统中的所有节点的总数量的一半;
投票模块,用于根据至少一个第二数据中心中的节点的节点标识,对至少一个第二数据中心中的节点投票;
选举模块,用于根据至少一个第二数据中心中的节点的节点标识,以被至少一个第二数据中心中的多于一半以上的节点投票支持即具有成为至少一个第二数据中心中的引领者节点的资格为准则,在至少一个第二数据中心选举第二引领者节点;
其中,所述投票模块包括:
接收单元,用于接收至少一个节点发送的投票请求;
第二确定单元,用于根据至少一个第二数据中心中的节点的节点标识,确定所述至少一个节点中是否具有至少一个第二数据中心中的节点;
投票单元,用于在所述至少一个节点具有至少一个第二数据中心中的节点的情况下,根据所述至少一个节点中的至少一个第二数据中心中的一个节点发送的投票请求,对所述至少一个节点中的至少一个第二数据中心中的一个节点投票;
其中,所述第二确定单元包括:
第一获取子单元,用于对于所述至少一个节点中的任意一个节点,根据所述节点的节点标识获取在所述节点中最近一次写入的数据对应的第一索引标识;越早在分布式系统中的节点中写入的数据对应的索引标识小于越晚在分布式系统中的节点中写入的数据对应的索引标识;
第二获取子单元,用于获取在至少一个第二数据中心中的节点中最近一次写入的数据对应的第二索引标识;
第一确定子单元,用于在第一索引标识等于第二索引标识的情况下,确定所述节点为至少一个第二数据中心中的节点;
或者,
第二确定子单元,用于在第一索引标识小于第二索引标识的情况下,确定所述节点不为至少一个第二数据中心中的节点。
9.一种在分布式系统中选举的装置,其特征在于,所述分布式系统中包括:第一数据中心以及至少一个第二数据中心,每一个数据中心中分别部署有所述分布式系统中的一个以上的节点,各个数据中心中分别部署的节点不重合,第一数据中心中具有所述分布式系统中的第一引领者节点,所述装置应用于至少一个第二数据中心中的节点,所述装置包括:
获取模块,用于获取应急配置信息,所述应急配置信息是在第一数据中心中的节点不再具有对外提供数据服务的能力且至少一个第二数据中心中的节点仍旧具有对外提供数据服务的能力的情况下获取到的,所述应急配置信息中包括至少一个第二数据中心中的节点的节点标识;至少一个第二数据中心中的节点的数量小于或等于所述分布式系统中的所有节点的总数量的一半;
选举模块,用于根据至少一个第二数据中心中的节点的节点标识,以被至少一个第二数据中心中的多于一半以上的节点支持即具有成为至少一个第二数据中心中的引领者节点的资格为准则,在至少一个第二数据中心选举第二引领者节点;
所述装置还包括:
确定模块,用于在第一数据中心中的节点恢复具有对外提供数据服务的能力的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据是否相同;
同步模块,用于在至少一个第二数据中心中的数据与第一数据中心中的数据不同的情况下,向第一数据中心同步至少一个第二数据中心中的数据,以使至少一个第二数据中心中的数据与第一数据中心中的数据相同;
所述确定模块包括:
第二获取子模块,用于获取在第一数据中心中的节点中最近一次写入的数据对应的第三索引标识;越早在分布式系统中的节点中写入的数据对应的索引标识小于越晚在分布式系统中的节点中写入的数据对应的索引标识;
第三获取子模块,用于获取在至少一个第二数据中心中的节点中最近一次写入的数据对应的第四索引标识;
第二确定子模块,用于在第三索引标识等于第四索引标识的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据相同;
或者,
第三确定子模块,用于在第三索引标识小于第四索引标识的情况下,确定至少一个第二数据中心中的数据与第一数据中心中的数据不同。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,处理器执行程序时实现如权利要求1至7中任一项的方法的步骤。
11.一种计算机可读存储介质,其特征在于,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如权利要求1至7中任一项的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210552471.8A CN115037745B (zh) | 2022-05-18 | 2022-05-18 | 一种在分布式系统中选举的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210552471.8A CN115037745B (zh) | 2022-05-18 | 2022-05-18 | 一种在分布式系统中选举的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115037745A CN115037745A (zh) | 2022-09-09 |
CN115037745B true CN115037745B (zh) | 2023-09-26 |
Family
ID=83120313
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210552471.8A Active CN115037745B (zh) | 2022-05-18 | 2022-05-18 | 一种在分布式系统中选举的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115037745B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106603645A (zh) * | 2016-12-02 | 2017-04-26 | 广东电网有限责任公司电力科学研究院 | 一种大规模云存储的副本服务器一致性处理方法及系统 |
CN107046552A (zh) * | 2016-02-05 | 2017-08-15 | 华为技术有限公司 | 基于心跳的数据同步装置、方法及分布式存储系统 |
CN107295080A (zh) * | 2017-06-19 | 2017-10-24 | 北京百度网讯科技有限公司 | 应用于分布式服务器集群的数据存储方法和服务器 |
CN111563115A (zh) * | 2020-05-09 | 2020-08-21 | 北京奇艺世纪科技有限公司 | 一种分布式数据库中数据分布信息的统计方法及装置 |
CN112202834A (zh) * | 2020-09-03 | 2021-01-08 | 金证财富南京科技有限公司 | 一种数据处理方法、数据处理装置及节点服务器 |
CN113055430A (zh) * | 2019-12-27 | 2021-06-29 | 华为技术有限公司 | 一种数据同步的方法及相关设备 |
CN113242296A (zh) * | 2021-05-08 | 2021-08-10 | 山东英信计算机技术有限公司 | 一种集群中主节点选举方法、系统及介质 |
CN113515408A (zh) * | 2020-04-10 | 2021-10-19 | 华为技术有限公司 | 一种数据容灾方法、装置、设备及介质 |
CN113810216A (zh) * | 2020-12-31 | 2021-12-17 | 京东科技控股股份有限公司 | 一种集群的故障切换方法、装置及电子设备 |
CN114143175A (zh) * | 2021-10-15 | 2022-03-04 | 湖南麒麟信安科技股份有限公司 | 主备集群实现方法及系统 |
CN114189421A (zh) * | 2022-02-17 | 2022-03-15 | 江西农业大学 | 一种领导者节点选举方法、系统、存储介质及设备 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8061589B2 (en) * | 2006-10-20 | 2011-11-22 | Barry Cohen | Electronic voting system |
US9152501B2 (en) * | 2012-12-19 | 2015-10-06 | International Business Machines Corporation | Write performance in fault-tolerant clustered storage systems |
US9985832B2 (en) * | 2016-01-29 | 2018-05-29 | Dell Products L.P. | Method and system for syncronization and distribution of configuration cross cluster without blocking |
-
2022
- 2022-05-18 CN CN202210552471.8A patent/CN115037745B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107046552A (zh) * | 2016-02-05 | 2017-08-15 | 华为技术有限公司 | 基于心跳的数据同步装置、方法及分布式存储系统 |
CN106603645A (zh) * | 2016-12-02 | 2017-04-26 | 广东电网有限责任公司电力科学研究院 | 一种大规模云存储的副本服务器一致性处理方法及系统 |
CN107295080A (zh) * | 2017-06-19 | 2017-10-24 | 北京百度网讯科技有限公司 | 应用于分布式服务器集群的数据存储方法和服务器 |
CN113055430A (zh) * | 2019-12-27 | 2021-06-29 | 华为技术有限公司 | 一种数据同步的方法及相关设备 |
CN113515408A (zh) * | 2020-04-10 | 2021-10-19 | 华为技术有限公司 | 一种数据容灾方法、装置、设备及介质 |
CN111563115A (zh) * | 2020-05-09 | 2020-08-21 | 北京奇艺世纪科技有限公司 | 一种分布式数据库中数据分布信息的统计方法及装置 |
CN112202834A (zh) * | 2020-09-03 | 2021-01-08 | 金证财富南京科技有限公司 | 一种数据处理方法、数据处理装置及节点服务器 |
CN113810216A (zh) * | 2020-12-31 | 2021-12-17 | 京东科技控股股份有限公司 | 一种集群的故障切换方法、装置及电子设备 |
CN113242296A (zh) * | 2021-05-08 | 2021-08-10 | 山东英信计算机技术有限公司 | 一种集群中主节点选举方法、系统及介质 |
CN114143175A (zh) * | 2021-10-15 | 2022-03-04 | 湖南麒麟信安科技股份有限公司 | 主备集群实现方法及系统 |
CN114189421A (zh) * | 2022-02-17 | 2022-03-15 | 江西农业大学 | 一种领导者节点选举方法、系统、存储介质及设备 |
Non-Patent Citations (2)
Title |
---|
一种改进的主从节点选举算法用于实现集群负载均衡;任乐乐;何灵敏;;中国计量学院学报(03);全文 * |
一种改进的选举算法在分布式OLAP系统中的应用研究;王立军;;河北软件职业技术学院学报(03);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN115037745A (zh) | 2022-09-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107295080B (zh) | 应用于分布式服务器集群的数据存储方法和服务器 | |
CN106899648B (zh) | 一种数据处理方法和设备 | |
CN109240840B (zh) | 集群系统的容灾方法、装置和机器可读介质 | |
CN107832138B (zh) | 一种扁平化的高可用namenode模型的实现方法 | |
KR20180105675A (ko) | 데이터 동기화 방법, 장치, 및 시스템 | |
US20190238414A1 (en) | Online capacity-expanding and online capacity-reducing methods and apparatuses for distributed consensus system | |
CN109802986B (zh) | 设备管理方法、系统、装置及服务器 | |
US20170168756A1 (en) | Storage transactions | |
US20150378840A1 (en) | Ensuring the same completion status for transactions after recovery in a synchronous replication environment | |
CN105069152B (zh) | 数据处理方法及装置 | |
US20200112499A1 (en) | Multiple quorum witness | |
CN113297013A (zh) | 设备切换方法、装置、电子设备和存储介质 | |
CN108228581B (zh) | Zookeeper兼容通信方法、服务器及系统 | |
CN107734017B (zh) | 数据服务方法及系统 | |
CN111459749A (zh) | 基于Prometheus的私有云监控方法、装置、计算机设备及存储介质 | |
CN106817387B (zh) | 一种数据同步方法、装置和系统 | |
CN113467873A (zh) | 虚拟机的调度方法、装置、电子设备及存储介质 | |
CN103248656A (zh) | 一种实现数据读写的方法以及分布式文件系统、客户端 | |
CN107025257B (zh) | 一种事务处理方法及装置 | |
CN103823727B (zh) | 一种直播录制的备份方法和装置 | |
CN111049886A (zh) | 多区域sdn控制器数据同步方法、服务器及系统 | |
CN112929438B (zh) | 一种双站点分布式数据库的业务处理方法及装置 | |
CN115037745B (zh) | 一种在分布式系统中选举的方法及装置 | |
CN107528703B (zh) | 一种用于管理分布式系统中节点设备的方法与设备 | |
CN110737543B (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 |