我很好奇在搭建MongoDB集群的时候会出现下面的情况。
2 个数据中心,每个数据中心有 2 个节点,总共有 4 个节点的副本集。两个数据中心之一因任何原因变得不可用,从而使主要数据中心和其中一个辅助数据中心中断。
根据https://docs.mongodb.com/manual/core/replica-set-architectures/的容错部分:我至少需要 3 票才能选出一个新的主要成员,但只有 2 个幸存的选民。
我无法扩展到第三个数据中心。
我如何设置集群以能够承受数据中心故障并继续写入幸存的数据中心?
您需要第三个数据中心的另一个副本集成员(或仲裁者)。但是如果你不能扩展到第 3 个中心,那么将副本集的第 5 个成员添加到你的主数据中心。您的备份数据中心将保留两个成员。
如果备份数据中心宕机,主中心将保持运行,副本集操作将继续。
如果主中心宕机,副本集操作将是只读的,您将需要执行手动干预。
参考:
部署地理冗余副本集
分布在两个或多个数据中心的副本集
在这种情况下,需要从剩余节点的服务器配置中删除丢失节点的投票能力。这将有效集群大小缩小到 2,其中优先级系统可以创建一个仲裁并选举一个主要集群。
例子:
不幸的是,这需要在数据中心发生故障时进行人工干预,才能将服务恢复到依赖写入该数据库的任何事物。它还需要人工干预,在丢失的节点恢复服务并恢复后将集群恢复到启动状态(以恢复投票权)。