【发布时间】:2018-09-30 08:55:28
【问题描述】:
在当前设置中,有两个 Mongo Docker 容器,在主机 A 和 B 上运行,Mongo 版本为 3.4,并在副本集中运行。我想将它们升级到 3.6 并增加一个成员,以便容器可以在主机 A、B 和 C 上运行。容器有 8GB 内存限制并且没有分配交换空间(当前),并在Rancher 中进行管理。所以我的计划是启动三个新容器,为它们初始化一个副本集,从 3.4 容器中获取一个转储,然后将其恢复为新的副本集 master。
转储文件很顺利,其大小约为 16GB。当我尝试将其恢复到新的 3.6 主服务器时,恢复开始正常,但在恢复了大约 5GB 的数据后,mongo 进程似乎被 OS/Rancher 杀死,而容器本身没有重新启动,MongoDB 进程只是崩溃并重新加载自己再次备份。如果我再次将 mongorestore 运行到同一个数据库,它会为所有已插入的条目显示唯一键错误,然后从中断处继续,仅在 5GB 左右后再次执行相同操作。所以看起来 mongorestore 会将它恢复的所有条目加载到内存中。
所以我得想办法解决这个问题,并且:
- 每次它崩溃时,只需运行 mongorestore 命令,它就会从中断的地方继续。它应该可以工作,但我觉得这样做有点不安。
- 一次恢复数据库一个集合,但最大的集合大于 5GB,因此也无法正常工作。
- 向容器添加交换或物理内存(临时),这样进程就不会在物理内存用完后被终止。
- 还有其他问题,希望有更好的解决方案?
【问题讨论】:
-
这意味着您在单个主机上运行 3 个需要内存的进程:mongod v3.4、新的 mongod v3.6 和 mongorestore?
-
既然你这么说......是的。
标签: mongodb docker rancher mongorestore mongodb-3.6