0

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

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

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

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

4

2 回答 2

2

确实,最多 2 个成员的失败仍然应该留下投票多数来选择 5 成员副本集中的主节点,但是还有一些其他因素需要考虑。

写关注

副本中可用的数据承载成员的数量也会影响可以确认的写入问题。

例如,在您配置两个仲裁器的情况下,任何承载数据的成员都关闭意味着w:majority无法满足写入问题。成员离线可能有管理原因(例如,如果您正在运行修复或可能在辅助节点上构建索引),因此您可以安全使用而不影响应用程序可用性的最高写入问题将是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 并继续复制,并且还保持与大多数可用副本集成员匹配的多数写入关注的语义。

于 2014-01-29T12:02:21.363 回答
1

是的。

容错2 意味着您的两台服务器可以离线,而不会导致无法选择新的主服务器。

既然你有:

  • 1 个初级
  • 2 个次级
  • 2名仲裁员

这意味着如果 2 台服务器宕机,剩下的 3 台服务器将选举主服务器,其中至少有一台不会成为仲裁者。

于 2014-01-29T08:04:42.510 回答