恢复mongodump时出现性能问题。我能做得更好吗?

时间:2019-07-17 19:51:16

标签: mongodb kubernetes stdin mongodump mongorestore

我的公司正在将数据从一个kubernetes集群迁移到另一个。

迁移的一部分是从mongoDB中移动数据。

mongoDB安装随附一些备份脚本,我将其用作自定义还原的入口点。

我成功完成的工作(至少就我现在所知)是在旧集群上运行mongodump并将其通过管道传输到新集群中的mongorestore

它可以工作,但是真的很慢。数据集(/data/db)约为65G。还原已运行了大约6个小时,并且几乎没有进展。

此外,在某些时候该过程被中断了,而不是删除所有数据,我只是再次开始编写脚本-认为它仍然会应用所有内容并为我可以忽略的重复键抛出错误。

这正是我的职责

kubectl --kubeconfig=old-cluster.conf exec -t $SOURCE_MONGO_POD -- \
  bash -c "mongodump --host $SOURCE_MONGO_REPLICASET \
  --username $SOURCE_USERNAME --password $SOURCE_PASSWORD \
  --authenticationDatabase admin --gzip --archive --oplog" |
kubectl exec -i $TARGET_MONGO_POD -- \
  bash -c "mongorestore --host $TARGET_MONGO_REPLICASET \
  --username $TARGET_USERNAME --password $TARGET_PASSWORD \
  --authenticationDatabase admin --gzip --archive --oplogReplay"

我的方法有什么问题。为什么我的表现这么差?

有人建议只复制/data/db文件夹,这样可能会更快,并且由于我需要进行1:1迁移,因此就足够了。

1 个答案:

答案 0 :(得分:0)

我们在Back Up and Restore with MongoDB Tools上可以看到:

  

mongodumpmongorestore实用程序可用于BSON数据转储,并且对于创建小型部署的备份非常有用。对于弹性备份和非破坏性备份,请使用文件系统或块级磁盘快照功能,例如MongoDB Backup Methods文档中所述的方法。

     

由于mongodumpmongorestore通过与正在运行的mongod实例进行交互来操作,因此它们可能会影响正在运行的数据库的性能。这些工具不仅会为正在运行的数据库实例创建流量,还会迫使数据库通过内存读取所有数据。当MongoDB读取不经常使用的数据时,它将驱逐出更频繁访问的数据,从而导致数据库常规工作负载的性能下降。

您应该考虑使用诸如Filesystem SnapshotsMongoDB Cloud Manager之类的替代方法。

您还考虑过将Replicaiton添加到当前的MongoDB中吗?