我在我的数据库中使用 mongo 分片。我面临的情况是我删除了数据库中的一些收藏。但是为了回收空间,我需要运行修复选项,我无法在生产中使用 Mongos 运行它。因此,我的计划是通过将主服务器切换为副本服务器来在每个副本服务器上逐个运行修复,反之亦然,以便生产系统正常运行。这里我有两个困惑:
- 这是修复数据库的正确方法吗
- 我有一个像 1 TB 数据这样的大数据库,所以在这种情况下,修复选项可能需要一两天时间updated 在这种情况下会不会是一个错误。
- 从我的集群中删除一些旧数据库时,我停止了平衡器并在删除后重新启动它,但数据库仍然没有完全删除,它显示我使用了 2 或 3 GB 的内存空间。我检查了剩余的数据库,它没有显示其中的集合。
在我看来,如果您的碎片不超过 15-20%,那么不值得这样做(除非您的磁盘空间不足)。我会做的是:
1)为每个副本集添加一个仲裁者(可选)
2)关闭其中一个辅助并删除数据目录
3)启动辅助并让它进行初始同步以消除碎片
(此时您可以评估磁盘收益是否值得继续)
4)当中学赶上时,对下一个中学做同样的事情
5) 当所有 Secondaries 完成后,降级 Primary 并在 x-Primary 上做同样的事情
6) 移除仲裁器
重要提示:您的 oplog 大小必须能够在初始同步期间保留所有操作。否则你需要调整它的大小(如果你选择修复选项同样适用)
对于你的第二个问题,副本集成员不持有任何元数据。如果副本集的大部分始终可用,您将不会遇到任何问题。