网络分区引发的 oplog 乱序问题

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介: 线上一个Secondary节点crash,错误原因是出现了 OplogOutOfOrder 错误,也就是说Secondary 重放了一条比『已经重放过最新的 oplog』更早的操作,经过分析,发现问题是因网络分区导致出现2个 Primary 的问题导致,详细的过程如下表分析。 说明:Node2、N

线上一个Secondary节点crash,错误原因是出现了 OplogOutOfOrder 错误,也就是说Secondary 重放了一条比『已经重放过最新的 oplog』更早的操作,经过分析,发现问题是因网络分区导致出现2个 Primary 的问题导致,详细的过程如下表分析。

说明:Node2、Node1、Node0分别是优先级为2、1、0的复制集成员。

Timestamp Node2 Node1 Node0 Notes
t1 Primary Secondary Secondary Node2被选为主
t2 Primary write A Seconary sync A Secondary sync A Node2上写入A,并同步到 Node1、Node0
t3 Primary write B Secondary Secondary Node2上写入 B,但未同步到 Node1、Node0
t4 Primary Secondary Secondary Node2网络与 Node1、Node0隔离,发生新的选举
t5 Primary Primary Secondary Node1被选为主
t6 Primary Primary WRITE C Secondary SYNC C Node1上写入 C,同步到 Node0
t7 Primary Primary WRITE D Secondary SYNC D Node1上写入 D,同步到 Node0
t8 Primary Write E Primary Secondary Node2上写入 E, a实际上是一个耗时很长的建索引操作结束
t9 Secondary Primary Secondary network recovered, Node1发现 Node2的选举时间戳更早,请求Node2降级
t10 Secondary Secondary Secondary Node1发现 Node2优先级更高,并且oplog 足够,主动降级
t11 Primary Secondary Secondary Node2赢得新的选举
t12 Priamry Secondary Secondary Node1 Node0 从 Node2同步,先回滚 C D
t13 Primary Secondary Secondary Node1从 Node2 同步 B E
t14 Primary Secondary Secondary Node0从 Node2 同步 B E ,因为 Node0已经同步过 C D,时间戳比 B 更新,触发oplogOutOfOrder 错误 crash

上述问题也提给了MongoDB 官方团队,参考https://jira.mongodb.org/browse/SERVER-25838,这个问题在『3.0及以前的版本』或『使用 protocol version 为0的3.2版本』都有可能发生,但几率很小,使用 MongoDB 的同学不用担心,我们也是因为MongoDB云数据库 用户比较多,才触发了一例;MongoDB 3.2引入了 raft 协议,避免了上述场景发生,遇到类似问题的用户可以升级到 MongoDB-3.2,并使用复制集协议protocoal version 1

相关文章
RabbmitMQ 网络分区
RabbmitMQ 网络分区
201 0
|
负载均衡
网络分区容错性
网络分区容错性
331 2
|
NoSQL 算法 关系型数据库
redis与mysql的数据一致性问题( 网络分区)
redis与mysql的数据一致性问题( 网络分区)
144 0
|
Ubuntu Unix Linux
Linux:1.linux文学常识+2.安装VM和Centos+3.linux三大分区+4.网络连接三模式+5.虚拟机的克隆+6.安装vmtools+7.llinux目录结构
Linux:1.linux文学常识+2.安装VM和Centos+3.linux三大分区+4.网络连接三模式+5.虚拟机的克隆+6.安装vmtools+7.llinux目录结构
198 0
Linux:1.linux文学常识+2.安装VM和Centos+3.linux三大分区+4.网络连接三模式+5.虚拟机的克隆+6.安装vmtools+7.llinux目录结构
|
存储 安全 网络协议
系统安装和分区经验与网络配置| 学习笔记
快速学习系统安装和分区经验与网络配置。
系统安装和分区经验与网络配置| 学习笔记
|
存储 安全 网络协议
系统安装和分区经验与网络配置
一、系统安装和分区经验 二、服务器网络配置
系统安装和分区经验与网络配置
|
消息中间件 存储 算法
生产环境出现网络分区,RocketMQ集群表示毫无压力!!!
生产环境出现网络分区,RocketMQ集群表示毫无压力!!!
生产环境出现网络分区,RocketMQ集群表示毫无压力!!!
|
运维 Linux
跟老男孩学linux运维 -- 摘要,虚拟机网络,分区等
跟老男孩学linux运维 -- 摘要,虚拟机网络,分区等
162 0
跟老男孩学linux运维 -- 摘要,虚拟机网络,分区等
|
消息中间件 网络协议 监控
模拟RabbitMQ网络分区
1. 概述 正常情况下,很难观察到RabbitMQ网络分区的发生。为了更好的理解网络分区,需要某些手段将其模拟出来,以便对其做相应的分析处理,进而在正式应用环境中遇到类似情形可以处理的游刃有余。
2338 0
|
10月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
226 17