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