在成员不可用时重新配置自管理副本集

如果副本集的大多数成员仍然可用,应按照“副本集重新配置流程”中的示例,在当前主节点上执行 rs.reconfig() 操作。

本文介绍只有少数成员仍然可访问时,如何重新配置副本集。

例如,对于跨地域部署的副本集,当任一本地成员组都无法联系到多数成员时,可能需要采用这一流程。更多信息见“副本集选举”。

当多数副本集成员停机或无法访问时,此流程可以用于恢复。连接任意一个存活成员,然后调用 rs.reconfig(),并设置 force 选项。

force 会强制该成员接受新配置。此流程只应用于灾难性中断后的恢复,不能每次重新配置都使用 force。也不要在任何自动化脚本中使用 force;只要仍存在主节点,就不要使用这个选项。

警告

强制重新配置可能产生意外行为,包括回滚已按 “majority” 确认提交的写入。

强制重新配置的步骤如下:

  1. 备份一个存活成员。

  2. 连接一个存活成员并保存当前配置。例如,可以使用以下命令保存配置:

    cfg conf(printjson(
  3. 在同一成员上,将 members 数组设置为只包含存活成员,移除停机或无法访问的成员。以下示例使用上一步创建的 cfg 变量:

    cfg.members members[0] members[4] members[7]]
  4. 仍在同一成员上执行 rs.reconfig(),把 force 设置为 true,以重新配置副本集:

    rs.reconfig(true})

    此操作会强制从节点采用新配置,随后将配置传播到 members 数组列出的所有存活成员。之后,副本集会选举新的主节点。

    说明

    使用 force : true 时,副本集配置中的版本号会大幅增加,通常增加数万或数十万。这是正常行为,目的是避免在网络分区两侧意外同时执行强制重新配置后,网络恢复时出现配置版本冲突。

  5. 如果故障或网络分区只是暂时的,应尽快关闭或退役被移除的成员。

提示

另请参阅:重新同步自管理副本集成员。


原文:Reconfigure Self-Managed Replica Set for Unavailable Members。作者/来源:MongoDB 文档团队。本文依据所列原文整理为中文,代码、命令与配置示例保留原文。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容