丢失单分片的MongoDB分片集群恢复相关问题咨询
问题1:RS3副本集成员恢复可能性
- 你当前3-1节点启动时被ABRT信号终止,通常是副本集配置修改后与本地元数据不匹配、或数据文件损坏导致的崩溃,首先优先查看mongod运行日志(默认路径/var/log/mongodb/mongod.log),定位崩溃前的具体报错类型,比如WiredTiger文件损坏、副本集配置版本冲突等。
- 若日志仅提示配置冲突,可以尝试强制加载单节点副本集配置启动:保持原有mongod配置的端口、数据目录参数不变,确认
replication.replSetName为原RS3的名称,使用命令mongod --config /etc/mongod.conf --replSetReconfig '{"_id":"替换为你的RS3副本集名称","members":[{"_id":0,"host":"3-1节点原访问地址:端口","priority":1}]}'临时启动,启动成功后正常关闭进程,去掉启动参数后即可正常启动。 - 若日志提示WiredTiger数据文件损坏,先完整备份3-1节点的整个数据目录,再使用
mongod --config /etc/mongod.conf --repair参数启动修复数据文件,修复完成后再正常启动进程。 - 只要任意一个RS3节点的底层数据文件没有物理损坏,该节点就可以恢复正常运行。
问题2:Shard3分片数据恢复可能性
- 若你可以正常启动RS3中任意一个节点,可直接导出该节点的全量数据,重新搭建Shard3的三副本集群后导入数据,再将新的Shard3接入原有分片集群即可。数据完整度取决于恢复节点的最后同步进度,最多丢失宕机前极短时间内未持久化的写入请求。
- 若所有RS3节点的数据文件均完全损坏无法修复,且你没有提前对Shard3做过逻辑备份、磁盘快照备份,Shard3上的分片数据无法找回。
- 恢复操作完成前,不要开启分片集群的balancer,避免chunk元数据混乱,可登录mongos执行
sh.stopBalancer()先关闭均衡器。
内容的提问来源于stack exchange,提问作者pseudokool
相关产品推荐
相关产品推荐

