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

相关推荐
码上上班9 小时前
Mongodb课程
数据库·mongodb
书中枫叶2 天前
从「上次几点喂奶」到全栈小程序:我做了个喂宝助手
mongodb·微信小程序·node.js
【云轩】2 天前
离散量输入输出电路设计:V/地、V/开、地/开信号与单片机接口的电路实现
单片机·嵌入式硬件·mongodb
冰茶丿2 天前
状态机在嵌入式系统中的应用:不只是switch-case这么简单
数据库·嵌入式硬件·mongodb
2301_768103492 天前
HarmonyOS宠物邻里实战第16篇:寄养申请状态机、记录时间线与回归测试
mongodb·集成测试·express·harmonyos·状态机
没钥匙的锁15 天前
04-Java面向对象基础
java·开发语言·mongodb
喜欢的名字被抢了5 天前
MongoDB生产实践:架构设计、分片集群与运维监控
数据库·mongodb·教程
JSON_L5 天前
MongoDB文档关系详解
数据库·mongodb
葫芦和十三6 天前
图解 MongoDB 30|查询路由与广播查询:带片键定向,不带就广播
后端·mongodb·agent
葫芦和十三6 天前
图解 MongoDB 29|分片键陷阱:jumbo chunk、孤儿文档和写入热点
后端·mongodb·agent