首页 > 极客资料 博客日记
mongo集群同步数据异常,手动同步节点副本数据
2024-09-16 20:30:04极客资料围观19次
转载请注明出处:
数据同步方案
当副本集节点的复制进程落后太多,以至于主节点覆盖了该节点尚未复制的 oplog 条目时,副本集节点就会变为“陈旧”。节点跟不上,就会变得“陈旧”。出现这种情况时,必须删除副本集节点的数据,然后执行初始同步,从而完全重新同步该节点。
MongoDB 提供了两种执行初始同步的选项:
-
第一种:使用空数据目录重新启动
mongod
,然后让 MongoDB 的正常初始同步功能恢复数据。这是更简单的选项,但可能需要更长的时间替换数据。 -
第二种:使用副本集中另一个成员最近的数据目录副本重新启动计算机。此过程可以更快地替换数据,但需要较多的手动步骤。
逻辑初始同步流程
执行逻辑初始同步时,MongoDB 将:
-
克隆除本地数据库之外的所有数据库。要进行克隆,
mongod
会扫描每个源数据库中的每个集合,然后将所有数据插入自己的这些集合副本中。 -
在为每个集合复制文档时构建该集合的所有索引。
-
在数据复制过程中拉取新添加的 oplog 记录。确保目标成员在
local
数据库中有足够的磁盘空间,以便在此数据复制阶段期间临时存储这些 oplog 记录。 -
将所有更改应用于数据集。
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
标签:
上一篇:Go runtime 调度器精讲(十):异步抢占
下一篇:四类取整方式
相关文章
最新发布
- Nuxt.js 应用中的 prerender:routes 事件钩子详解
- 【问题解决】Tomcat由低于8版本升级到高版本使用Tomcat自带连接池报错无法找到表空间的问题
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit
- 六、Spring Boot集成Spring Security之前后分离认证流程最佳方案
- 《JVM第7课》堆区
- .NET 8 高性能跨平台图像处理库 ImageSharp
- 还在为慢速数据传输苦恼?Linux 零拷贝技术来帮你!
- 刚毕业,去做边缘业务,还有救吗?
- 如何避免 HttpClient 丢失请求头:通过 HttpRequestMessage 解决并优化
- 让性能提升56%的Vue3.5响应式重构之“版本计数”