重新配置具有不可用成员的自托管副本集
本页内容
要重新配置一个当大多数成员可用时,使用 副本集,在当前 主节点 上执行 rs.reconfig()
操作,按照 副本集重新配置过程 中的示例进行。
本文档提供了在只有少数成员可访问时重新配置副本集的步骤。
您可能需要使用此过程,例如,在地理位置分布式的副本集中,其中没有任何本地组成员可以达到多数。有关此情况的更多信息,请参阅 副本集选举。
强制重新配置
此过程允许在大多数 副本集 成员不可用或不可达时进行恢复。您连接到任何存活的成员,并使用 force
选项到 rs.reconfig()
方法。
force
选项将新的配置强制应用到成员上。仅当从灾难性中断中恢复时才使用此过程。不要每次重新配置时都使用 force
。另外,不要在任何自动脚本中使用 force
选项,也不要在仍有 主节点 时使用 force
。
要强制重新配置
备份一个存活的成员。
连接到存活的成员并保存当前配置。考虑以下示例命令来保存配置
cfg = rs.conf() printjson(cfg) 在同一成员上,通过将数组设置为仅包含存活的成员来从
members
数组中删除副本集的已下线和不可达的成员。考虑以下示例,其中使用了上一步中创建的cfg
变量cfg.members = [cfg.members[0] , cfg.members[4] , cfg.members[7]] 在同一成员上,使用带有
force
选项设置为true
的rs.reconfig()
命令重新配置集rs.reconfig(cfg, {force : true}) 此操作强制从属节点使用新配置。然后,配置被传播到在
members
数组中列出的所有存活成员。副本集随后选举一个新的主节点。注意
当使用
force : true
时,副本集配置中的版本号会显著增加,可能是几万到几十万。这是正常的,旨在防止在网络的分区两侧意外强制重新配置后,网络分区结束时的集合版本冲突。如果故障或分区只是暂时的,请尽快关闭或退役已移除的成员。