Mongodb副本集提供自动故障转移。 如果主要发生故障(即小学和其中任何一个次要networking之间存在networking问题),则发生重选。
但是,请考虑以下情况:
所有的服务器都启动了,主副本之间的networking也没有问题,因此复制副本是可以的。 但是,由于另一个networking问题(未知到副本集),客户端无法访问主服务器。 因此HA丢失了。
在这种情况下,客户端是否可以ping通一个辅助节点,并通知辅助节点不能到达主节点,并且应该执行新的选举。 这可能吗?
您可能可以在灾难恢复情况下执行此操作,将数据库升级至关重要,并且您不介意回滚。
就像是:
cfg = rs.conf() cfg.members[0].priority = 2 rs.reconfig(cfg, { force: true })
成员[0]是已知的“好”服务器。
一个更安全的方法可能会在每个mongo节点上安装一个小的pipe理服务,你可以通过rest api命令。 如果可能的话,pipe理员命令应该被转发到主服务器。
将这种事情自动化将是非常困难的,因为您的应用程序和服务器可能没有简单的方法就什么样的服务器“好”以及哪台服务器不好达成一致。
mongo集群的一个通用模型是在多个位置运行节点,其中一些可能具有不可靠的路由。 在这些情况下,我会build议修改您的节点优先级。 如果您拥有不希望作为主服务器的服务器,请将其优先级设置为0,并将您的首选位置中的节点设置为优先级2(或更高)。
有关更多信息强制重新configuration,请阅读: https : //docs.mongodb.com/v3.2/tutorial/reconfigure-replica-set-with-unavailable-members/
编辑:我想我会很想和mongo仲裁者一起玩。 通过在您经营客户的地点运行mongo仲裁者,他们将能够在选举过程中进行投票。 大多数投票服务器无法看到的服务器不能成为主服务器。