【问题标题】:Does every server in a MongoDB replica set need to have exactly the same RAM?MongoDB 副本集中的每个服务器是否都需要完全相同的 RAM?
【发布时间】:2011-08-24 12:40:06
【问题描述】:

我可以在 MongoDB 1.8 中使用具有不同 RAM 量的服务器设置副本集吗?

  • server1:5GB
  • server2:2gb
  • server3:4gb

如果是,有什么优点和缺点?

【问题讨论】:

    标签: memory mongodb ram


    【解决方案1】:

    是的,您可以通过这种方式配置副本集。

    如果是,有什么优点和缺点?

    Here's a doc解释副本集的主要特征。让我们根据 RAM 的差异来看看这些。

    优点:

    • 更多的计算机意味着更好的数据冗余。拥有那个 2GB 的节点至少意味着您还有一份数据副本。
    • 在副本集上拥有完整的 3 个节点可以更轻松地删除一个以进行维护

    缺点:

    • 拥有不同大小的服务器不适合自动故障转移。假设您的 5GB 服务器是主服务器。 What happens when it goes down and the 2GB server wins the election?您仍有自动故障转移,但您的性能可能已大幅下降。
    • 读取缩放可能效果不佳。根据您的读取模式,将读取发送到 2GB 服务器可能会导致大量额外的磁盘命中和性能下降。

    所以,这里的大问题实际上是性能问题之一。如果您只是为开发设置执行此操作,那么它基本上可以工作。但是在生产环境中,您冒着完全破坏您的应用程序的风险。如果您的应用习惯于使用 4GB 以上的 RAM,然后突然降到 2GB,它可能会变得无法使用。

    大多数生产设置都希望故障转移到另一台“同等功率”的计算机。

    【讨论】:

    • 从 v4 开始,您也不能使用副本集进行 ACID 事务
    【解决方案2】:

    不,您不需要相等的 RAM。 (是的,您可以按照说明设置副本集。)

    MongoDB 使用内存映射文件进行所有缓存,这意味着缓存分页由操作系统处理。具有更多内存的副本将在内存中保留更多的数据库;那些更少的页面将更多的页面到磁盘。

    如果可以的话,MongoDB 最终会将整个数据库放入内存中。如果您将两个副本用于读取,一个用于写入,您可能希望使用 5gb 和 4gb 机器进行读取,因此它们更有可能占用 RAM。

    【讨论】:

    • 我会犹豫是否将 2GB 服务器作为主要服务器。这对更新和插入不利。更新不在内存中的数据非常昂贵。插入数据需要更新至少一个索引,因此更少的 RAM 意味着修改该索引通常会更昂贵。
    • @gates 说得好。这在很大程度上取决于您的用例。我假设是一个阅读繁重的环境。
    猜你喜欢
    • 1970-01-01
    • 2014-08-30
    • 2018-08-27
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多