mongo集群同步数据异常,手动同步节点副本数据

转载请注明出处:

数据同步方案

当副本集节点的复制进程落后太多,以至于主节点覆盖了该节点尚未复制的 oplog 条目时,副本集节点就会变为"陈旧"。节点跟不上,就会变得"陈旧"。出现这种情况时,必须删除副本集节点的数据,然后执行初始同步,从而完全重新同步该节点。

MongoDB 提供了两种执行初始同步的选项:

  • 第一种:使用空数据目录重新启动 mongod,然后让 MongoDB 的正常初始同步功能恢复数据。这是更简单的选项,但可能需要更长的时间替换数据。

  • 第二种:使用副本集中另一个成员最近的数据目录副本重新启动计算机。此过程可以更快地替换数据,但需要较多的手动步骤。

逻辑初始同步流程

执行逻辑初始同步时,MongoDB 将:

  1. 克隆除本地数据库之外的所有数据库。要进行克隆,mongod 会扫描每个源数据库中的每个集合,然后将所有数据插入自己的这些集合副本中。

  2. 在为每个集合复制文档时构建该集合的所有索引。

  3. 在数据复制过程中拉取新添加的 oplog 记录。确保目标成员在 local 数据库中有足够的磁盘空间,以便在此数据复制阶段期间临时存储这些 oplog 记录。

  4. 将所有更改应用于数据集。mongod 使用来自源的 oplog,更新其数据集以反映副本集的当前状态。

完成初始同步后,节点从 STARTUP2 转换到 SECONDARY

命令查看节点数据同步

通过 rs.status()命令查看mongo集群的数据同步状态,其中主要观察optimeDate字段的值是否能基本保持一致,以及可以查看stateStr中查看状态是否正常。

以下是同步状态异常的服务查看示例:

解决方法

上图中mongo2:27017中的数据状态同步异常,当状态同步异常时,可以先尝试重启mongo,让异常节点去自动同步其他节点的数据。

如果还不能解决,则可以将当前节点的数据库目录文件删除,删除之后再重启整个mongo集群,这样在启动的时候,会自动同步数据。

参考链接

重新同步自管理副本集的成员https://www.mongodb.com/zh-cn/docs/manual/tutorial/resync-replica-set-member/#std-label-replica-set-resync-by-copying

相关推荐
杨云龙UP9 小时前
Docker 部署 MongoDB 6.0 数据库每日自动备份实践:本地 + 异地保留 7 天_20260429
linux·运维·数据库·mongodb·docker·容器·centos
稳联技术老娜1 天前
Profinet转EtherCAT网关通讯架构及EtherCAT超距故障解决原理
mongodb
别来无恙blwy2 天前
windows MongoDB升级-自动升级脚本-自动检测升级到任意版本
数据库·windows·mongodb
snow@li2 天前
数据库-MongoDB:常用语法 / MongoDB 核心知识技能梳理
数据库·mongodb
刘晨鑫16 天前
MongoDB数据库应用
数据库·mongodb
爬山算法6 天前
MongoDB(92)什么是变更流(Change Streams)?
数据库·mongodb
小冯不疯6 天前
旺店通与金蝶云星空入库单管理对接方案
mongodb
MongoDB 数据平台7 天前
为编码代理引入 MongoDB 代理技能和插件
数据库·mongodb
忍冬行者7 天前
MongoDB 三节点副本集离线部署运维手册
运维·数据库·mongodb
卢傢蕊8 天前
MongoDB
数据库·mongodb