mongodb:客户端可以建议重新选择副本集吗?

mongodb:客户端可以建议重新选择副本集吗?

Mongodb 副本集提供自动故障转移。如果主节点发生故障(即主节点和任何辅助节点之间出现网络问题),则会发生重新选举。

但是,请考虑以下情况:

所有服务器均已启动,主服务器和辅助服务器之间的网络正常,因此副本集运行正常。但是,由于另一个网络问题(副本集未知),客户端无法访问主服务器。因此 HA 丢失。

在这种情况下,客户端能否 ping 辅助节点并通知辅助节点无法访问主节点,并且应运行新的选举。这可能吗?

答案1

您可能可以在灾难恢复情况下执行此操作,在这种情况下,启动数据库很重要,并且您不介意回滚。

就像是:

cfg = rs.conf()
cfg.members[0].priority = 2
rs.reconfig(cfg, { force: true })

其中,members[0] 是已知的“良好”服务器。

更安全的方法可能是在每个 mongo 节点上安装一个小型管理服务,您可以通过 rest api 访问该服务。如果可能的话,管理命令应该传递到主节点。

自动化这种事情会非常困难,因为你的应用程序和服务器可能没有简单的方法来就哪些服务器是“好的”、哪些服务器是坏的达成一致。

Mongo 集群的一个常见模型是在多个位置运行节点,其中一些位置的路由可能不太可靠。在这些情况下,我建议修改节点优先级。如果您有永远不想作为主服务器的服务器,请将其优先级设置为 0,并将您首选位置的节点设置为优先级 2(或更高)。

有关强制重新配置的更多信息,请阅读: https://docs.mongodb.com/v3.2/tutorial/reconfigure-replica-set-with-unavailable-members/

编辑:我想我会尝试使用 mongo 仲裁器。通过在运行客户端的位置运行 mongo 仲裁器,它们将能够在选举过程中投票。大多数投票服务器看不到的服务器不能成为主服务器。

相关内容