在设置MongoDB集群时,我很好奇下面的情况。
2个数据中心,每个数据中心2个节点,共4个节点复制集。由于任何原因,这两个数据中心中的一个变得不可用,从而使主数据中心和次要数据中心关闭。
https://docs.mongodb.com/manual/core/replica-set-architectures/的每一个容错部分:我需要至少3张选票来选举一个新的初选,但只有两个幸存的选民。
我无法扩展到第三个数据中心。
如何设置群集,使其能够承受数据中心故障并继续写入幸存的数据中心?
发布于 2017-01-18 22:32:40
在这种情况下,需要从其余节点的服务器配置中删除丢失的节点的投票能力。这会将有效的集群大小缩小到2,其中优先级系统可以创建仲裁并选择主服务器。
示例:
#Note: members[0],[1] are in datacenter1, members[2],[3] are in datacenter2.
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[1].priority = 0
cfg.members[0].votes = 0
cfg.members[1].votes = 0
rs.reconfig(cfg)
#Now members[2] is elected primary.不幸的是,在数据中心失败时,需要手动干预,才能将服务恢复到任何依赖写入此数据库的服务。它还需要手动干预,以便在丢失的节点返回服务并已恢复后(给它们返回表决特权)将集群恢复到启动状态。
发布于 2017-01-18 17:59:11
您需要第三个数据中心中的另一个副本集成员(或仲裁者)。但是,如果不能扩展到第三个中心,那么将副本集的第5个成员添加到主数据中心。您的备份数据中心将保留在两个成员中。
如果备份数据中心关闭,主中心将保持不动,副本集操作将继续。
如果主中心关闭,复制集操作将被只读,您将需要执行手动干预。
参考文献:
https://dba.stackexchange.com/questions/161499
复制相似问题