如何快速镜像Mongo数据库?

时间:2017-06-21 15:07:11

标签: mongodb

什么是一种快速有效的方式来传输大型Mongo数据库?

我想将10GB生产的Mongo 3.4数据库转移到临时环境进行测试。我使用mongodump / mongorestore工具来测试这个传输到我的本地主机,但是花了8个多小时耗费了大量的CPU和内存,这是我将来要避免的。数据库没有任何索引,因此排除索引的mongodump选项不会提高性能。

我的暂存环境大部分都是只读的,但仍需要偶尔编写,因此无法将其设置为生产的永久性只读副本。

我已经阅读了[复制集] [1],但它们看起来非常复杂,设置和设计用于永久镜像主要到两个或更多辅助。我已经阅读了一些关于黑客入侵的帖子,因此他们可以进行一次性镜像,但我找不到任何可靠的文档,因为这不是该功能的预期用途。我读过的所有指南都说你需要至少3台服务器,这似乎不直观,因为我只有2台(生产和升级)而且不想创建第三台服务器。

1 个答案:

答案 0 :(得分:1)

根据Mongo文档,您应该能够cp/rsync个文件来创建备份(如果您能够暂时停止生产设置上的写操作 - 或者如果您在维护窗口中执行此操作)

https://docs.mongodb.com/manual/core/backups/#back-up-by-copying-underlying-data-files

  

使用cp或rsync备份

     

如果您的存储系统不支持快照,您可以使用cp,rsync或类似工具直接复制文件&gt ;.由于复制多个文件不是原子操作,因此在复制>文件之前必须停止对mongod的所有写入。否则,您将以无效状态复制文件。

     

通过复制基础数据产生的备份不支持时间点>恢复副本集,并且难以管理较大的分片>群集。此外,这些备份更大,因为它们包括>索引和重复的底层存储填充和碎片。相比之下,mongodump会创建更小的备份。

仅供参考 - 对于副本集,第三个"服务器"是一个仲裁者,在选举一个新的主要时,可以打破平局。它不会消耗与主要/次要资源一样多的资源。由于您要创建暂存环境,我不建议创建包含生产暂存环境的副本集。您的主实例可以切换到登台实例,而要访问生产实例的客户端将最终从登台实例读取/写入。