MongoDB副本集:主节点和辅助节点中的磁盘大小差异

MongoDB副本集:主节点和辅助节点中的磁盘大小差异,mongodb,replication,Mongodb,Replication,我刚刚做了mongodb副本集配置,一切看起来都很好。所有数据都正确地移动到辅助节点。但是当我查看数据目录时,我可以看到主目录有大约140G的数据,同时辅助目录只有大约110G的数据 是否有人在设置复制集时遇到此类问题。这是正常行为吗?当您在辅助设备上从头开始执行初始同步时,它会将所有数据写入新数据。这将删除填充、空白(已删除的数据)等。因此,在这方面与运行修复类似 如果您在主服务器上运行修复(阻塞操作,只有在绝对必要时才执行),那么总体而言,这两个操作将更加接近 如果您检查来自db.stats

我刚刚做了mongodb副本集配置,一切看起来都很好。所有数据都正确地移动到辅助节点。但是当我查看数据目录时,我可以看到主目录有大约140G的数据,同时辅助目录只有大约110G的数据


是否有人在设置复制集时遇到此类问题。这是正常行为吗?

当您在辅助设备上从头开始执行初始同步时,它会将所有数据写入新数据。这将删除填充、空白(已删除的数据)等。因此,在这方面与运行修复类似

如果您在主服务器上运行修复(阻塞操作,只有在绝对必要时才执行),那么总体而言,这两个操作将更加接近


如果您检查来自
db.stats()
的输出,您应该会看到不同的数据库具有相同的对象计数,数据目录大小的差异无需担心。

我们可以做些什么来定期优化数据库,而不影响生产环境?@geek-Hmm不确定,你必须发布一个db.stats(),但2个大小的分配可能会有所帮助,毕竟我会说28GB(考虑到2GB的预分配)可能来自移动文档。除了Sammaye提到的(usePowerOf2Sizes最初效率较低,但如果你移动/删除很多则会更有效)然后,完整的副本集为您提供了选项。从集合中取出一个辅助节点,运行修复或执行完全重新同步,然后重复,直到完成集合中的所有节点(在某个点上执行主步骤)。这将允许您定期恢复空间,而不会产生大的影响(选举总是需要考虑短暂的停顿)。