为什么我们需要MongoDB复制中的“仲裁者”?

时间:2013-08-13 13:58:33

标签: mongodb replication

假设我们设置了一个没有仲裁的MongoDB复制,If the primary is unavailable, the replica set will elect a secondary to be primary.所以我认为它是一种隐式仲裁器,因为副本将自动选择一个主副本。

所以我想知道为什么我们需要一个专用的仲裁节点?谢谢!

4 个答案:

答案 0 :(得分:8)

created a spreadsheet以更好地说明仲裁服务器节点在副本集中的影响。

enter image description here

它基本上归结为以下几点:

  1. 如果RS为 2个数据节点,则丢失1个服务器会使您低于投票最低值(“大于N / 2”)。仲裁者解决了这个问题。
  2. 使用偶数数据节点的RS ,添加仲裁器会使您的容错能力提高1,而不会因为拆分而产生2个投票群集。
  3. 使用RS为奇数数据节点,添加Arbiter将允许拆分创建2个具有“大于N / 2”投票的隔离群集,因此是一个裂脑情景。
  4. 选举解释[在穷人]详细here。在该文件中,陈述 RS可以拥有50个成员(偶数)和7个投票成员。我强调“状态”,因为它不会解释它是如何工作的。对我来说,似乎如果你的一方有4名成员(所有投票)和另一方有46名成员(3名投票),那么你宁可让46人选出一名主要成员,4名成员阅读 - 只有集群。但是,这正是“有限投票”所阻止的。在这种情况下,您实际上将拥有一个4成员集群,其中一个主集群和一个46成员集群是只读的。解释这是有道理的是超出了我的知识的范围。

答案 1 :(得分:7)

这实际上归结为CAP定理,其中声明如果分区两侧的服务器数量相等,则数据库无法维护CAP(一致性,可用性和分区容差)。仲裁者专门设计用于在一方创造“不平衡”或多数,以便在这种情况下可以选出主要人员。

如果你在任何一方获得偶数个节点,MongoDB将不会选择主节点,你的集合将不接受写入。

修改

任何一方我的意思是,例如,一边是2,另一边是2。我的英语在那里不容易理解。

所以我的意思是双方。

修改

维基百科为解释CAP提供了很好的理由:http://en.wikipedia.org/wiki/CAP_theorem

答案 2 :(得分:2)

Arbiters是一种可选机制,当您在复制集中部署偶数个mongod时,允许投票成功。 Arbiters重量轻,意味着部署在不是专用mongo副本的服务器上,即:服务器的主要角色是其他任务,如redis服务器。由于它们很轻,它们不会(明显地)干扰系统的资源。

来自文档:

  

仲裁者没有数据集的副本,也不能成为数据集   主。副本集可能有仲裁者在选举中添加投票   对于小学。 Arbiters允许副本集的数量不均匀   成员,没有复制数据的成员的开销。

答案 3 :(得分:1)

由于以下原因,必须在复制中使用仲裁程序:

  • 如果复制具有奇数个副本集,则复制更可靠。如果存在偶数个副本集,则最好在复制中添加仲裁者。
  • 仲裁者确实拥有数据,他们只是在任何节点发生故障时投票选举。
  • Arbiter是一个轻量级的过程,它们不会消耗太多的硬件资源。
  • Arbiters只是在加密的副本集之间交换用户凭据数据。
  • 在选举期间投票,在副本集之间进行通信时,不会加密听力和配置数据。
  • 最好在单独的计算机上运行仲裁,而不是与任何一个副本集一起运行以保持高可用性。

希望这有帮助!!!