mongoDB复制+ 2台服务器上的分片合理吗?

时间:2010-09-07 16:18:40

标签: mongodb replication sysadmin sharding

考虑以下设置:

有2个物理服务器被设置为常规mongodb复制集(包括仲裁进程,因此自动故障转移将正常工作)。

现在,据我所知,大多数实际工作都将在主服务器上完成,而奴隶主要只是努力使其数据集保持同步。

在这个设置中引入分片是否合理,是否会在同一个服务器上设置另一个复制集,以便每个服务器都有一个mongod进程作为主要运行,一个进程作为辅助运行。

预期的结果是两个服务器都将共享实际查询/插入的工作量,而两者都是up。在一台服务器发生故障的情况下,整个设置应优雅地故障转移以继续运行,直到另一台服务器恢复。

除了设置和进程数量(mongos / configservers / arbiters)的整体开销外,此设置是否有任何缺点?

4 个答案:

答案 0 :(得分:10)

这肯定有用。我之前在#mongodb IRC频道中问了一个问题,就是在一台机器上运行多个mongod进程是不是一个坏主意。答案是“只要你有RAM / CPU /带宽,就疯了”。

值得注意的是,如果您正在寻找高性能读取,并且不介意写入速度有点慢,您可以:

  • 以“安全模式”进行写入,写入在传播到 N 服务器之前不会返回(在这种情况下, N 是数字副本集中的服务器,所以所有这些)
  • 在连接代码中设置适合驱动程序的标志,以允许从从属设备读取。

这将为您提供类似于MySQL的集群设置 - 在主服务器上写入一次,但任何从服务器都有资格进行读取。在你有更多读取而不是写入(例如,一个数量级)的情况下,这可能是更高的性能,但我不知道当节点发生故障时它的行为如何(因为写入可能会停止尝试写入到3个节点,但只有2个节点,等等 - 需要测试)。

答案 1 :(得分:1)

有一点需要注意的是,当两台计算机都启动时,您的查询将在它们之间进行分割。当一个人关闭时,所有查询都将转到剩余的机器上,从而使对它的要求加倍。你必须确保你的机器可以承受突然加倍的查询。

答案 2 :(得分:0)

您缺少一个关键细节:如果您只有两个物理节点进行分片设置,如果有一个死亡,您的所有数据都将消失。这是因为在分片层下面没有任何冗余(建议的方法是每个分片都由副本集组成)。

您对副本集的说法是正确的:您可以在两个无共享节点上运行它并拥有一个额外的仲裁器。但是,推荐的设置是3个节点:一个主节点和两个辅助节点。

http://www.markus-gattol.name/ws/mongodb.html#do_i_need_an_arbiter

答案 3 :(得分:0)

在这种情况下,我首先会重新考虑分片,然后将其设为2台机器的非分片副本(+1仲裁者)。