1个主要的2个副仲裁器和2个仲裁器是否具有容错2的副本集的正确架构?

时间:2014-01-29 06:16:22

标签: mongodb replicaset

我需要容错2并且我不想为此使用额外的服务器。我计划为每个副本集使用以下配置。每个mongodbX-X都是不同的服务器。

DC1 (main):
mongodb0-0 - primary
mongodb0-1 - secondary

DC2:
mongodb0-2 - secondary, priority 0.5
mongodb0-3 - arbiter
mongodb0-4 - arbiter

这是对的吗?我找不到任何关于相同配置的讨论。

2 个答案:

答案 0 :(得分:2)

确实,最多2名成员的失败仍然会使投票多数人选出5人副本中的主要成员,但还有一些其他因素需要考虑。

写关注

副本中可用的数据承载成员数量也会影响可以确认的Write Concerns

例如,对于两个仲裁器的配置,任何数据承载成员都处于关闭状态意味着无法满足w:majority写入问题。成员离线可能存在管理原因(例如,如果您在辅助服务器上运行修复或building indexes),那么您可以安全使用的最高写入问题不会影响您的应用程序可用性将是w:2

如果由于某种原因,两个数据承载成员失败,您将只能满足单个节点的确认写入。在至少有一个其他数据承载成员重新加入副本集之前,不再进行任何复制。

网络连接

您的实际副本集成员可能没有问题,但如果DC1和DC2之间的连接丢失,则只有DC2有足够的投票成员来选择主要成员。这里的危险是DC2在您的配置中只有一个辅助设备,所以此时您在技术上没有成员关闭但单个成员故障(DC2中唯一的数据承载成员)可能导致数据丢失。

建议的配置

由于仲裁器没有任何写入负载,因此数据承载成员最容易出现故障或需要维护。添加两个仲裁器会让您看起来更容错,但需要注意上述注意事项。

更强有力的建议是:

 DC1: primary, secondary  (priority: 2)
 DC2: secondary, secondary  (default priority)
 DC3: arbiter

在此配置中,任何两个数据承载成员都可能失败您可能会丢失整个数据中心的连接,并且仍然具有主要和持续复制。 DC1成员的较高优先级更喜欢那些作为主要副本的候选者(假设它们是可用的并且是最新的)。

如果您不想拥有三个辅助节点,那么一个更小的配置可以提供类似的故障转移优势(尽管只有一个容错节点):

DC1: primary (priority 3)
DC2: secondary (priority 2)
DC3: secondary (default priority)

这允许通过继续复制将故障转移到DC1或DC2,并且还保持多数写入关注的语义与大多数可用的副本集成员匹配。

答案 1 :(得分:1)

是的。

Fault tolerance 2意味着您的两台服务器可以脱机而无需选择新的主服务器。

因为你有:

  • 1个主要
  • 2次要
  • 2个仲裁者

这意味着如果2个服务器关闭,剩下三个将选择主服务器,并且其中至少有一个将不是仲裁服务器。