用不可用的成员重新配置副本集

在本页面

要在大多数成员可用时重新配置replica set,请按照副本集重新配置过程中的示例对当前primary使用rs.reconfig()操作。

本文档提供了仅当成员的少数成员可以访问时重新配置副本集的步骤。

您可能需要使用该过程,例如,在地理上分散的副本集中,其中没有本地成员组可以达到多数。有关此情况的更多信息,请参见副本集选举

通过强制重新配置进行重新配置

通过此过程,您可以在大多数replica set成员掉线或无法访问时恢复。您连接到任何尚存的成员,并对rs.reconfig()方法使用force选项。

force选项将新配置强加到该成员上。仅使用此过程可从灾难性中断中恢复。请勿在每次重新配置时使用force。另外,请勿在任何自动脚本中使用force选项,并且在仍然存在primary时也不要使用force

强制重新配置:

  • 备份尚存的成员。

  • 连接到尚存的成员并保存当前配置。考虑以下示例命令以保存配置:

cfg = rs.conf()

printjson(cfg)
  • 在同一成员上,通过将数组设置为仅与尚存的成员相等,从members数组中删除副本集的 down 和 unreachable 成员。考虑以下示例,该示例使用上一步中创建的cfg变量:
cfg.members = [cfg.members[0] , cfg.members[4] , cfg.members[7]]
  • 在同一成员上,使用rs.reconfig()命令并将force选项设置为true来重新配置集合:
rs.reconfig(cfg, {force : true})

此操作将强制辅助服务器使用新配置。然后,该配置将传播到members阵列中列出的所有尚存成员。然后,副本集选择一个新的主副本。

Note

当您使用force : true时,副本集配置中的版本号显着增加,成千上万。这是正常现象,旨在防止在不小心在网络分区的两侧强制重新配置然后网络分区结束时发生版本冲突。

  • 如果故障或分区只是暂时的,请尽快关闭或撤消已删除的成员。