CN112838965B - 一种强同步角色故障的识别与恢复方法 - Google Patents
一种强同步角色故障的识别与恢复方法 Download PDFInfo
- Publication number
- CN112838965B CN112838965B CN202110188539.4A CN202110188539A CN112838965B CN 112838965 B CN112838965 B CN 112838965B CN 202110188539 A CN202110188539 A CN 202110188539A CN 112838965 B CN112838965 B CN 112838965B
- Authority
- CN
- China
- Prior art keywords
- role
- strong
- strong synchronization
- fault
- synchronization
- 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
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/06—Management of faults, events, alarms or notifications
- H04L41/0654—Management of faults, events, alarms or notifications using network fault recovery
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Health & Medical Sciences (AREA)
- Cardiology (AREA)
- General Health & Medical Sciences (AREA)
- Hardware Redundancy (AREA)
Abstract
本发明涉及分布式共识协议技术领域,具体提供了一种强同步角色故障的识别与恢复方法,其特征在于,具有以下步骤:S1、强同步角色故障的识别;S2、告知用户强同步角色故障信息;S3、强同步角色故障的处理;S4、避免重复识别强同步角色故障。与现有技术相比,本发明在强同步角色恢复工作后,也能自动恢复其强同步配置,该自动恢复过程除了在命令行告知将要恢复强同步配置的表名以外,对用户无任何影响,具有良好的推广价值。
Description
技术领域
本发明涉及分布式共识协议技术领域,具体提供一种强同步角色故障的识别与恢复方法。
背景技术
在raft算法的etcd实现版本中,心跳与心跳回复消息用于维系领导者与其他节点的联系,默认发送心跳的时间间隔(即心跳超过时间)为5tick(raft算法中每个raft结构体定时执行的方法,tick间隔约200毫秒,5tick约为1秒);Progress结构体用于追踪其他节点的状态,包括角色类型、最后一条日志的索引等;配置变更则用于变更集群中的节点数量、角色(如强同步角色)等。写入数据和配置变更都会产生日志,都需要日志提交后才能生效。
根据《In Search of an Understandable Consensus Algorithm》,在raft分布式一致性算法中,日志的提交需要获得集群中半数以上的赞成投票,若没有获得,则集群将无法继续提交日志导致无法写入数据,即便集群中仍然有半数以上的节点正常工作,这将严重影响分布式集群的容灾能力。
若在raft算法中增加强同步角色,将在原有的日志提交策略的基础上,新增获得全部强同步角色赞成投票的条件,该方案打破了投票权重的均等性,在异地分布的集群中,更好地保证了数据一致性,也提供了更多的个性化功能。而强同步角色的故障处理也将成为随之而来的关键问题。
发明内容
本发明是针对上述现有技术的不足,提供一种实用性强的强同步角色故障的识别与恢复方法。
本发明解决其技术问题所采用的技术方案是:
一种强同步角色故障的识别与恢复方法,具有以下步骤:
S1、强同步角色故障的识别;
S2、告知用户强同步角色故障信息;
S3、强同步角色故障的处理;
S4、避免重复识别强同步角色故障。
进一步的,在步骤S1中,在progress结构体中添加整型计时变量SynchronizerElapsed,表示距离领导者上一次收到来自强同步角色的心跳回复消息的tick次数,在领导者的每次tick中,所有强同步角色的计时变量自增1,领导者每次收到强同步角色的心跳回复时,则将相应的计时变量清零。
进一步的,在步骤S1中,若领导者在一定时间内未收到强同步角色的心跳回复,致使计时变量达到强同步超时时间,则将该强同步角色的id录入raft结构体中用于记录故障强同步角色的映射表inactiveSynchronizers,至此成功识别强同步角色故障。
进一步的,在步骤S2中,识别到强同步角色故障后,领导者所在的节点通过内部SQL查询,获取发送失败的心跳对应range所属的表名,在数据库命令行告知用户故障信息,包括发送心跳失败的目标节点,以及该节点上将要取消同步配置的表名。
进一步的,在步骤S2中,在强同步角色恢复工作后,若发送成功的心跳对应的range在此之前发生了强同步角色故障,则查询上述映射表获取该range所属的表名,在命令行告知用户恢复工作的目标节点,以及该节点上将要恢复强同步配置的表名;
对于同一个table,每次识别到强同步角色故障或故障的强同步角色恢复时,只告知用户一次。
进一步的,在步骤S3中,在领导者决策行为的replicateQueue方法中触发对故障强同步角色的配置变更,强制取消其强同步属性。
进一步的,在步骤S3中,若领导者重新收到故障的强同步角色的心跳回复消息,则将对应的计时变量清零并将其id从inactiveSynchronizers中移除;
如果该强同步配置已经被取消,会自动复用设置强同步角色的逻辑,通过配置变更恢复其强同步属性。
进一步的,在步骤S4中,识别到强同步副本故障后,在取消强同步配置的过程中将inactiveSynchronizers从raft同步到用于描述range状态的基于protobuf的结构体rangeDescriptor,新分裂出的range初始化时获得旧range的inactiveSynchronizers,并同步到为它创建的raft中。
本发明的一种强同步角色故障的识别与恢复方法和现有技术相比,具有以下突出的有益效果:
(1)本发明在强同步角色发送故障后,识别故障信息,暂时取消了强同步配置,恢复了集群可用性,维持了raft分布式集群原有的容灾能力,并将故障信息告知用户。故障期间的写入操作也会成功。若后续发生range分裂、产生新的raft集群,不需要重新识别故障。在强同步角色恢复工作后,也能自动恢复其强同步配置,该自动恢复过程除了在命令行告知将要恢复强同步配置的表名以外,对用户无任何影响。
(2)强同步角色故障的RTO时间为上文提及的、用户可自行配置的强同步超时时间,而强同步超时时间的配置范围取决于心跳超时时间和往返延时,因此在往返延时为秒级别以内的条件下,RTO至少可以达到10秒级别。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
附图1是一种强同步角色故障的识别与恢复方法的时间轴示意图;
附图2是本发明中识别和处理强同步副本故障的流程示意图。
具体实施方式
为了使本技术领域的人员更好的理解本发明的方案,下面结合具体的实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。
下面给出一个最佳实施例:
如图1、2所示,本实施例中的一种强同步角色故障的识别与恢复方法,要通过4个阶段,阶段1为强同步角色故障到识别强同步角色故障告知用户故障信息;阶段2为从识别强同步角色故障告知用户故障信息到取消强同步配置;阶段3为取消强同步配置到强同步角色恢复;阶段4为从强同步角色到恢复强同步配置。
其中,强同步角色故障的识别:
在progress结构体中添加整型计时变量SynchronizerElapsed,表示距离领导者上一次收到来自该强同步角色的心跳回复消息的tick次数。在领导者的每次tick(即tickHeartbeat)中,所有强同步角色的计时变量自增1;领导者每次收到强同步角色的心跳回复时,则将相应的计时变量清零。
若领导者在一定时间内未收到强同步角色的心跳回复,致使其计时变量达到强同步超时时间(用户可配置),则将该强同步角色的id录入raft结构体中用于记录故障强同步角色的映射表inactiveSynchronizers,至此成功识别了强同步角色故障。由于写入数据和配置变更等行为产生的日志的提交忽略识别到的故障强同步角色的投票,集群可用性在这时也得到了恢复。
告知用户强同步角色故障信息:
识别到强同步角色故障后,领导者所在的节点通过内部SQL查询,获取发送失败的心跳对应range所属的表名(并存到一张映射表中以避免重复查询),在数据库命令行告知用户故障信息,包括发送心跳失败的目标节点,以及该节点上将要取消强同步配置的表名。
在强同步角色恢复工作后,若发送成功的心跳对应的range在此之前发生了强同步角色故障,则查询上述映射表获取该range所属的表名,在命令行告知用户恢复工作的目标节点,以及该节点上将要恢复强同步配置的表名。对于同一个table(可能包含一个或多个range),每次识别到强同步角色故障或故障的强同步角色恢复时,只告知用户一次。
强同步角色故障的处理:
在领导者决策行为的replicateQueue的方法中触发对故障强同步角色的配置变更,强制取消其强同步属性。若领导者重新收到故障的强同步角色的心跳回复消息(即强同步角色恢复),则将对应的计时变量清零并将其id从inactiveSynchronizers中移除;如果该强同步配置已经被取消,会自动复用设置强同步角色的逻辑,通过配置变更恢复其强同步属性。
在阶段2至4期间,日志的提交不再需要故障强同步角色的赞成投票。因此,阶段1期间进行的写入操作会处于等待中,并在阶段2期间得到操作成功的回应;阶段2至4期间进行的写入操作则完全不受影响。强同步角色故障引起的集群不可用时间(即RTO时间)就是图1中的阶段1,时长约为强同步超时时间。
避免重复识别强同步角色故障:
在已经识别并处理强同步角色故障的情况下,若对应的table因数据写入导致range分裂,为了避免重复识别强同步角色故障导致集群再次停用强同步超时时间,应该将记录故障强同步角色的映射直接传递到分裂出的新range的raft中。
具体实现方式是:识别到强同步副本故障后,在取消强同步配置的过程中将inactiveSynchronizers从raft同步到用于描述range状态的基于protobuf的结构体rangeDescriptor(之所以将该同步放在取消强同步配置的过程中,是因为rangeDescriptor的修改与配置变更一样需要获得多数赞成票才能应用)。新分裂出的range初始化时获得旧range的inactiveSynchronizers,并同步到为它创建的raft中。
上述具体的实施方式仅是本发明具体的个案,本发明的专利保护范围包括但不限于上述具体的实施方式,任何符合本发明的一种强同步角色故障的识别与恢复方法权利要求书的且任何所述技术领域普通技术人员对其做出的适当变化或者替换,皆应落入本发明的专利保护范围。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (2)
1.一种强同步角色故障的识别与恢复方法,其特征在于,具有以下步骤:
S1、强同步角色故障的识别;
在progress结构体中添加整型计时变量SynchronizerElapsed,表示距离领导者上一次收到来自强同步角色的心跳回复消息的tick次数,在领导者的每次tick中,所有强同步角色的计时变量自增1,领导者每次收到强同步角色的心跳回复时,则将相应的计时变量清零;
若领导者在一定时间内未收到强同步角色的心跳回复,致使计时变量达到强同步超时时间,则将该强同步角色的id录入raft结构体中用于记录故障强同步角色的映射表inactiveSynchronizers,至此成功识别强同步角色故障;
S2、告知用户强同步角色故障信息;
识别到强同步角色故障后,领导者所在的节点通过内部SQL查询,获取发送失败的心跳对应range所属的表名,在数据库命令行告知用户故障信息,包括发送心跳失败的目标节点,以及该节点上将要取消同步配置的表名;
S3、强同步角色故障的处理;
在领导者决策行为的replicateQueue方法中触发对故障强同步角色的配置变更,强制取消其强同步属性;
若领导者重新收到故障的强同步角色的心跳回复消息,则将对应的计时变量清零并将其id从inactiveSynchronizers中移除;
如果该强同步配置已经被取消,会自动复用设置强同步角色的逻辑,通过配置变更恢复其强同步属性;
S4、避免重复识别强同步角色故障;
识别到强同步副本故障后,在取消强同步配置的过程中将inactiveSynchronizers从raft同步到用于描述range状态的基于protobuf的结构体rangeDescriptor,新分裂出的range初始化时获得旧range的inactiveSynchronizers,并同步到为它创建的raft中。
2.根据权利要求1所述的一种强同步角色故障的识别与恢复方法,其特征在于,在步骤S2中,在强同步角色恢复工作后,若发送成功的心跳对应的range在此之前发生了强同步角色故障,则查询上述映射表获取该range所属的表名,在命令行告知用户恢复工作的目标节点,以及该节点上将要恢复强同步配置的表名;
对于同一个table,每次识别到强同步角色故障或故障的强同步角色恢复时,只告知用户一次。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110188539.4A CN112838965B (zh) | 2021-02-19 | 2021-02-19 | 一种强同步角色故障的识别与恢复方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110188539.4A CN112838965B (zh) | 2021-02-19 | 2021-02-19 | 一种强同步角色故障的识别与恢复方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112838965A CN112838965A (zh) | 2021-05-25 |
CN112838965B true CN112838965B (zh) | 2023-03-28 |
Family
ID=75933660
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110188539.4A Active CN112838965B (zh) | 2021-02-19 | 2021-02-19 | 一种强同步角色故障的识别与恢复方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112838965B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103560952A (zh) * | 2013-10-14 | 2014-02-05 | 广州捷能电力科技有限公司 | 微型网络中的节点故障恢复方法 |
CN111897671A (zh) * | 2020-07-23 | 2020-11-06 | 平安证券股份有限公司 | 故障恢复方法、计算机设备及存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10346430B2 (en) * | 2010-12-23 | 2019-07-09 | Mongodb, Inc. | System and method for determining consensus within a distributed database |
CN103198159B (zh) * | 2013-04-27 | 2016-01-06 | 国家计算机网络与信息安全管理中心 | 一种基于事务重做的异构集群多副本一致性维护方法 |
CN105095008B (zh) * | 2015-08-25 | 2018-04-17 | 国电南瑞科技股份有限公司 | 一种适用于集群系统的分布式任务故障冗余方法 |
CN107528710B (zh) * | 2016-06-22 | 2021-08-20 | 华为技术有限公司 | raft分布式系统领导节点的切换方法、设备及系统 |
CN107147540A (zh) * | 2017-07-19 | 2017-09-08 | 郑州云海信息技术有限公司 | 高可用性系统中的故障处理方法和故障处理集群 |
CN109117317A (zh) * | 2018-11-01 | 2019-01-01 | 郑州云海信息技术有限公司 | 一种集群故障恢复方法和相关装置 |
-
2021
- 2021-02-19 CN CN202110188539.4A patent/CN112838965B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103560952A (zh) * | 2013-10-14 | 2014-02-05 | 广州捷能电力科技有限公司 | 微型网络中的节点故障恢复方法 |
CN111897671A (zh) * | 2020-07-23 | 2020-11-06 | 平安证券股份有限公司 | 故障恢复方法、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112838965A (zh) | 2021-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7428657B2 (en) | Method for rolling back from snapshot with log | |
US7499954B2 (en) | Consistent reintegration of a failed primary instance | |
US7925633B2 (en) | Disaster recovery system suitable for database system | |
US6941327B2 (en) | Apparatus and method for database synchronization in a duplex system | |
JP3822381B2 (ja) | 分散データベースシステム障害回復方法 | |
US7457829B2 (en) | Resynchronization of multiple copies of a database after a divergence in transaction history | |
EP1499973A2 (en) | Database replication system | |
CN102891849B (zh) | 业务数据同步方法、恢复方法及装置和网络设备 | |
CN109688012A (zh) | 一种联盟链节点热备切换的方法 | |
CN110543386B (zh) | 一种数据存储方法、装置、设备和存储介质 | |
CN109189860A (zh) | 一种基于Kubernetes系统的MySQL主备增量同步方法 | |
CN113965578B (zh) | 一种集群中主节点的选举方法、装置、设备及存储介质 | |
CN107229540A (zh) | 一种基于时间点的数据库恢复方法及系统 | |
CN111752488B (zh) | 存储集群的管理方法、装置、管理节点及存储介质 | |
CN115473908B (zh) | 一种区块链节点故障恢复方法及区块链系统 | |
CN112511338A (zh) | 区块链共识网络动态恢复方法、电子设备、系统及介质 | |
CN112838965B (zh) | 一种强同步角色故障的识别与恢复方法 | |
CN105323271B (zh) | 一种云计算系统以及云计算系统的处理方法和装置 | |
CN111404737B (zh) | 一种容灾处理方法以及相关装置 | |
CN108009045B (zh) | 一种主备数据库故障处理方法及装置 | |
CN117376350A (zh) | 集群脑裂后子集群恢复成新集群的方法、设备和介质 | |
CN111338767B (zh) | PostgreSQL主从数据库自动切换系统及方法 | |
CN110109934A (zh) | 一种数据库管理方法、装置、服务器及存储介质 | |
KR102294048B1 (ko) | 블록체인 응용서비스의 복제 실행 방법 및 블록체인 응용서비스의 복제 실행 시스템 | |
JP2953639B2 (ja) | バックアップ装置及びその方法 |
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 |