我们有一个围绕Docker组织的apache / mongo架构。到目前为止,一切都很好,但是随着基础的增长,我们现在面临新的挑战。 目前,我们有3个项目正在生产中,总共有6个容器(每个项目1个apache容器和1个mongo容器)。
我们面临的问题是每个mongo容器都认为它们具有21GB的内存,因此他们尝试使用其中的80% 所以对我来说,解决方案是重新启动其中一个容器,并给mongo进程指定内存限制:
--wiredTigerCacheSizeGB 7
该解决方案的问题是每个mongo容器的限制都是固定的。如果一个基础需要更多内存,则必须使用另一个值重新启动容器。
所以请问一些问题。我认为这些问题通常可能会使其他人感兴趣,因为我没有在互联网上找到任何有关此的东西:
1)是否有一个全局解决方案来平衡mongo容器之间的内存? 那就是自动吗? (在没有人工监督的情况下,我必须检查磁盘上的I / O) 而且,无需重新启动容器?
2)缓存限制真的有用吗? 由于操作系统仍然限制容器,我是否应该删除限制并禁用收到的警报? (仍然不这样做)
3)每个基地只有一个容器真的有用吗? 在记忆方面,为所有三个基地配备一个大型mongo容器是否更实用? 这两种解决方案的利弊是什么?
所有项目基地的一个mongo容器 优点: 易于管理 更容易平衡内存
缺点: 安全性较低
每个基地一个mongo容器: 优点: 更安全 更容易备份? (不是真的)
缺点: 难以处理记忆
4)我们正在就内存如何与mongo磁盘相关联进行更一般的辩论。 就个人而言,如果磁盘上的基础大于其在内存中的占用空间,我认为这不是问题,即磁盘上的数据库部分很少被触摸,因此不会在内存中找到自己是可以的。
我的开发人员认为磁盘上的大小应该是内存中的大小。也就是说,如果我有40GB的数据库,则应该有40GB的内存,这对我来说似乎是不现实的。
您对此有何看法?
谢谢大家的回答!