2014-10-03 66 views
0

有人能帮助验证我们的设置MongoDB的分片,仲裁者和群集设置,

建立一个4节点的MongoDB集群 1初级(写),3个次级(读),如果主停机,3个次级可以打破领带和选择一个辅助初级

  1. 此设置是否有效?
  2. 是这种情况下需要的仲裁器吗?

一旦我在开始时以这种方式设置它,然后随着负载增加,我需要做的就是不断添加节点成对地集群。 (成对添加节点将帮助我们跟上性能并降低群集更改的频率,同时我们更重读比写入,在某些时候我们将不得不考虑扩展写入)

帮助非常非常感激。

谢谢。

+0

我已经在下面回答了,并且投票决定将它迁移到DBA Stack Exchange站点(http://dba.stackexchange.com/)。 StackOverflow是用于编程相关问题而不是数据库管理问题,所以你应该在将来问这种类型的问题。对于这个问题,你可以迁移它,或者一旦有足够的投票来移动它,它就会自动移动。 – 2014-10-03 13:03:38

+0

我想找到如何将其移动到dba。 – restack 2014-10-03 14:53:25

+0

无法弄清楚如何迁移到DBA.Stack – restack 2014-10-03 15:52:51

回答

0

是的,需要一个仲裁器,否则如果2个节点关闭或者不可用,则不会有主节点--MongoDB需要绝大多数(> 50%)的选票才能选出主节点,并且在您的情况下大多数人数是4人中的3人(4人中的2人不超过50%)。如果添加一个仲裁器,那么这个数字仍然是3,但是您将可以拥有一个主数据承载节点下降两个。

至于为什么,请考虑以下可能性:

2节点与其他2孤立 - 他们仍然上涨,功能性,但不能互相交谈。现在在这个“分裂”的两边有两张选票,并且没有办法打破平局 - 每一方对于小学投票方面都是一样的,如果没有严格的多数规则,你最终会得到两个初选,而且没有办法一旦分割解决,就可以解决写入问题。添加仲裁者到任何一方的分裂,你没有这样的歧义。

这种类型的场景有很多排列,当票数甚至是我不会在这里进入。可以这么说,运行副本集时的最佳做法是始终拥有奇数票,从而避免出现这些情况。

+0

看来MongoDB总是需要一个仲裁者(至少作为最佳实践)欣赏你的回应。 – restack 2014-10-03 13:07:22

+1

如果您有奇数个数据承载节点(3,5,7等),则不这样做。如果您有偶数个数据承载节点才能断开连接,则这是必需的。那么,你也可以操纵选票,但以上是一般情况 – 2014-10-03 13:09:59