我在某处读到 MongoDB 和 Redis 服务器不应在同一主机上执行,因为 Redis 管理内存的方式会损坏 MongoDb。这是在 Docker.io 之前。但是现在事情似乎大不一样了?在同一台主机上的两个不同容器上运行 Redis 服务器和 MongoDB 方便吗?
最佳答案
Docker 不会更改您的硬件,它也是处理未虚拟化资源的操作系统,因此此处应适用与普通硬件相同的规则。
内存
MongoDB 和 Redis 不共享任何内存。使用同一主机的问题是您可能会用完这两个进程的 RAM,您可以为 Redis 设置最大大小,您可能可以为 MongoDB 做同样的事情,这是强制性的。
如果您的大小合适(MongoDB RAM + Redis RAM < 硬件 RAM),您将不会在磁盘上为 Redis 进行任何交换(这绝对是您想要防止的),但 mongodb 缓存可能不会那么好(没有足够的地方进行优化)。如果您的数据增长,减少 Redis 的内存总是一个挑战:如果数据大小不可预测,请注意内存不足!
如果您使用 redis 进行备份,它会使用比其数据集更多的 RAM 来生成转储,因此请注意这一点。这意味着还使用 IO。
输入输出
在这种情况下(更少的 RAM)mongo 将做更多的 IO 来访问数据。 Redis,取决于你的备份策略,可以使用或不使用 IO(你的选择)。最坏的情况:如果你在 redis 上使用 AOF,它会产生很多 IO,所以 IO 可能会成为这个架构的瓶颈。如果你不使用 redis 的备份:你不会有问题。 SSD 也是 Mongo 的不错选择。
中央处理器
我不知道 MongoDB 是否使用大量 CPU,但除了备份期间,redis 大部分时间不会。如果您使用 redis 进行备份:尝试为其提供两个 CPU 内核(一个用于 redis,一个用于备份任务)。
网络
这取决于您的客户数量。但是你应该检查你机器的吞吐量/输入负载,看看你是否没有饱和(例如使用 monit 和警报)。有时是瓶颈,一台机器的吞吐量不够!
关于mongodb - 在同一台主机的两个不同容器上运行 MongoDB 和 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28287021/