【问题标题】:Running MongoDB and Redis on two different containers in the same host machine在同一主机的两个不同容器上运行 MongoDB 和 Redis
【发布时间】:2015-02-02 21:23:02
【问题描述】:

我在某处读到过,MongoDB 和 Redis 服务器不应在同一主机上执行,因为 Redis 管理内存的方式会损坏 MongoDb。这是在 Docker.io 之前。但现在事情似乎完全不同了?在同一主机上的两个不同容器上运行 Redis 服务器和 MongoDB 是否方便?

【问题讨论】:

    标签: mongodb redis virtual-machine docker linux-containers


    【解决方案1】:

    Docker 不会改变你的硬件,它是处理非虚拟化资源的操作系统,所以这里应该适用与普通硬件相同的规则。

    内存

    MongoDB 和 Redis 不共享任何内存。使用同一主机的问题是这两个进程可能会耗尽内存,你可以为redis设置一个最大大小,你可能对MongoDB也可以这样做,这是强制性的。

    如果您的大小合适(MongoDB RAM + Redis RAM

    如果您将备份与 redis 一起使用,它使用的 RAM 比其数据集更多来生成转储,因此请注意这一点。这意味着也使用 IO。

    IO

    在这种情况下(更少的 RAM)mongo 会做更多的 IO 来访问数据。 Redis,取决于您的备份策略,可以使用或不使用 IO(您的选择)。最坏的情况:如果你在 redis 上使用 AOF,它会产生很多 IO,所以 IO 可能会成为这个架构的瓶颈。如果你不使用 redis 备份:你不会有问题。对于 Mongo 来说,SSD 也是一个不错的选择。

    CPU

    我不知道 MongoDB 是否使用大量 CPU,但除了备份期间,redis 大部分时间都不会。如果您在 redis 中使用备份:尝试为其提供两个 CPU 内核(一个用于 redis,一个用于备份任务)。

    网络

    这取决于您的客户数量。但是你应该检查你的机器的吞吐量/输入负载,看看你是否没有饱和(例如使用 monit 和警报)。有时是瓶颈,一台机器的吞吐量不够!

    【讨论】:

      【解决方案2】:

      当今的许多服务,尤其是数据库,都非常消耗资源,并且在设计时认为它们将(或应该)在专用机器上为它们执行。 MongoDB 和 Redis 尝试将大量数据保存在内存中,并会尝试为自己占用更多内存。为避免此服务占用主机的所有内存,您可以使用-m="<number><optional unit>" 中的docker run 限制容器使用的最大内存。例如:docker run -d -m="2g" -p 27017:27017 --name mongodb dockerfile/mongodb

      因此,您可以轻松控制服务的资源限制,并在同一主机上运行它们,并对资源进行细粒度控制。无论如何,重要的是要考虑到这些服务的性能是在设计时考虑到主机的资源将完全可供它们使用的。例如,Cassandra 等其他数据库会消耗大量内存,此外,它们的设计目的是对磁盘进行顺序访问。在这些情况下,Docker 会让你运行限制使用的资源,但是如果你在同一主机上运行多个服务,它们的性能会严重下降。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-31
        • 2015-11-18
        • 1970-01-01
        • 2021-10-07
        • 2022-07-06
        • 1970-01-01
        • 2020-09-29
        • 2021-03-13
        相关资源
        最近更新 更多