在当前设置中,有两个 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,因此它也无法正常工作。
- 将交换或物理内存(临时)添加到容器中,以便在进程用完物理内存后进程不会被杀死。
- 还有什么,希望有更好的解决方案?