我正在寻找一些关于如何处理与网络断开连接的主副本集(例如数据中心网络中断)的建议,以便我们将其中一个辅助副本提升为主副本以使用数据库恢复应用程序的服务.
在网络重新连接之前,我们是否应该杀死机器上运行的 mongodb 以允许重新添加作为辅助?还是主要从其设置的更改模式断开连接?
如果我们允许 mongodb 服务器回到网络上,并且 mongodb 作为主服务器运行,尽管在重新连接之前是隔离的,会发生什么?
抱歉,如果在我尝试查找的其他地方的文档中回答了这个问题,但我可能没有在寻找正确的术语。
自动故障转移是 MongoDB副本集设计的固有特性之一,因此您不必手动故障转移到辅助服务器,除非您有意更改了默认配置。两者
primary
和secondary
都是副本集中的成员状态(或角色),并且旨在与通常需要手动干预以进行故障转移的主/从拓扑不同。如果 MongoDB 副本集的大多数已配置投票成员无法访问当前主节点,则预期结果是:
有关更多信息,请参阅MongoDB 手册中的副本集选举。
rs.status()
副本集的隔离数据承载成员将保持辅助状态,但如果您检查副本集的其他成员,则会显示为“不健康/不可访问” 。以相同方式配置所有可选数据承载成员通常是一个好主意,这样任何成员都可以在需要时担任主要成员(而不是拥有一个专门配置的主要成员)。如果您希望您的副本集自动恢复,您应该让所有成员按原样运行,一旦连接恢复,它们将恢复同步(如果可能)。在默认配置中,以前是主要成员的隔离成员将作为辅助成员恢复同步。如果您对哪个成员被选为主要成员有强烈的偏好(例如,基于数据中心位置),您可以调整副本集成员的优先级。如果首选主节点被隔离,它将作为辅助节点重新加入副本集并恢复同步,直到它完全赶上来有资格成为主节点并触发选举。
恢复同步的注意事项是,隔离成员仍必须与健康副本集成员的复制 oplog有足够的重叠,以便赶上成员被隔离时发生的任何写入活动。oplog 不再与副本集的任何其他成员有任何重叠的辅助节点将被标记为“陈旧”并且需要重新同步。
除非您强制重新配置您的副本集以便没有其他投票成员,否则不可能有一个独立的主节点。一个副本集中不能有两个主节点。如果隔离的前主节点接受了任何未传播到大多数副本集成员的写入,则当前主节点恢复与副本集的其他成员的连接时,这些写入将被回滚(导出到磁盘以进行管理干预) . 您可以采取额外的步骤来避免回滚,包括使用
majority
写关注。如果您不熟悉 MongoDB 副本集,我建议您使用默认配置和配置来启用自动故障转移和恢复。只有在特殊情况下才需要人工干预。