如果副本集的大多数成员仍然可用,应按照“副本集重新配置流程”中的示例,在当前主节点上执行 rs.reconfig() 操作。
本文介绍只有少数成员仍然可访问时,如何重新配置副本集。
例如,对于跨地域部署的副本集,当任一本地成员组都无法联系到多数成员时,可能需要采用这一流程。更多信息见“副本集选举”。
通过强制重新配置恢复副本集
当多数副本集成员停机或无法访问时,此流程可以用于恢复。连接任意一个存活成员,然后调用 rs.reconfig(),并设置 force 选项。
force 会强制该成员接受新配置。此流程只应用于灾难性中断后的恢复,不能每次重新配置都使用 force。也不要在任何自动化脚本中使用 force;只要仍存在主节点,就不要使用这个选项。
警告
强制重新配置可能产生意外行为,包括回滚已按 “majority” 确认提交的写入。
强制重新配置的步骤如下:
备份一个存活成员。
连接一个存活成员并保存当前配置。例如,可以使用以下命令保存配置:
cfg conf(printjson(在同一成员上,将 members 数组设置为只包含存活成员,移除停机或无法访问的成员。以下示例使用上一步创建的 cfg 变量:
cfg.members members[0] members[4] members[7]]仍在同一成员上执行 rs.reconfig(),把 force 设置为 true,以重新配置副本集:
rs.reconfig(true})此操作会强制从节点采用新配置,随后将配置传播到 members 数组列出的所有存活成员。之后,副本集会选举新的主节点。
说明
使用 force : true 时,副本集配置中的版本号会大幅增加,通常增加数万或数十万。这是正常行为,目的是避免在网络分区两侧意外同时执行强制重新配置后,网络恢复时出现配置版本冲突。
如果故障或网络分区只是暂时的,应尽快关闭或退役被移除的成员。
提示
另请参阅:重新同步自管理副本集成员。
原文:Reconfigure Self-Managed Replica Set for Unavailable Members。作者/来源:MongoDB 文档团队。本文依据所列原文整理为中文,代码、命令与配置示例保留原文。











暂无评论内容