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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 线上一个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

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
1月前
|
负载均衡
网络分区容错性
网络分区容错性
27 2
|
3月前
|
NoSQL 算法 关系型数据库
redis与mysql的数据一致性问题( 网络分区)
redis与mysql的数据一致性问题( 网络分区)
23 0
|
9月前
RabbmitMQ 网络分区
RabbmitMQ 网络分区
29 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目录结构
119 0
Linux:1.linux文学常识+2.安装VM和Centos+3.linux三大分区+4.网络连接三模式+5.虚拟机的克隆+6.安装vmtools+7.llinux目录结构
|
存储 安全 网络协议
系统安装和分区经验与网络配置| 学习笔记
快速学习系统安装和分区经验与网络配置。
100 0
系统安装和分区经验与网络配置| 学习笔记
|
存储 安全 网络协议
系统安装和分区经验与网络配置
一、系统安装和分区经验 二、服务器网络配置
系统安装和分区经验与网络配置
|
消息中间件 存储 算法
生产环境出现网络分区,RocketMQ集群表示毫无压力!!!
生产环境出现网络分区,RocketMQ集群表示毫无压力!!!
生产环境出现网络分区,RocketMQ集群表示毫无压力!!!
|
运维 Linux
跟老男孩学linux运维 -- 摘要,虚拟机网络,分区等
跟老男孩学linux运维 -- 摘要,虚拟机网络,分区等
106 0
跟老男孩学linux运维 -- 摘要,虚拟机网络,分区等
|
消息中间件 网络协议 监控
模拟RabbitMQ网络分区
1. 概述 正常情况下,很难观察到RabbitMQ网络分区的发生。为了更好的理解网络分区,需要某些手段将其模拟出来,以便对其做相应的分析处理,进而在正式应用环境中遇到类似情形可以处理的游刃有余。
2245 0