我需要容错2,我不想为此使用额外的服务器。我计划对每个副本集使用以下配置。每台mongodbX都是不同的服务器。
DC1 (main):
mongodb0-0 - primary
mongodb0-1 - secondary
DC2:
mongodb0-2 - secondary, priority 0.5
mongodb0-3 - arbiter
mongodb0-4 - arbiter
这是正确的吗?我找不到任何关于相同配置的讨论。
发布于 2014-01-29 12:02:21
的确,如果不超过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-29 08:04:42
是的。
容错性 2意味着您的两台服务器可以脱机,而不需要选择新的主服务器。
既然你有:
这意味着,如果两台服务器发生故障,将有三台服务器将选出一个主服务器,而其中至少一台服务器将不会成为仲裁者。
https://stackoverflow.com/questions/21423500
复制相似问题