重新配置具有不可用成员的自管理副本集
在此页面上
要在 大多数 成员可用时重新配置 副本集 ,请按照 副本集重新配置过程 中的示例,对当前 主节点 rs.reconfig()
(primary node in the replica set) 节点使用 操作。
本文档提供了当只有少数节点可访问时重新配置副本集的步骤。
您可能需要使用该过程,例如在地理上分布的副本集中,任何本地成员群组都无法达到多数。有关这种情况的更多信息,请参阅副本集选举。
通过强制重新配置来重新配置
此程序可让您在大多数副本集成员关闭或无法访问时进行恢复。您可以连接任何幸存成员,并对 rs.reconfig()
方法使用 force
选项。
force
选项强制对节点进行新配置。此过程仅用于从灾难性中断中恢复。请勿在每次重新配置时都使用 force
。此外,请勿在任何自动脚本中使用 force
选项,也请勿在仍主节点时使用 force
。
强制重新配置:
备份幸存节点。
连接到幸存节点并保存当前配置。请考虑以下用于保存配置的示例命令:
cfg = rs.conf() printjson(cfg) 在同一节点上,通过将
members
数组设置为仅包含幸存节点,从该数组中移除副本集的下线和无法访问的节点。以下示例使用了在上一步中创建的cfg
变量:cfg.members = [cfg.members[0] , cfg.members[4] , cfg.members[7]] 在同一成员上,使用
rs.reconfig()
命令并将force
选项设置为true
,重新配置该集:rs.reconfig(cfg, {force : true}) 此操作将强制辅助成员使用新配置。然后,将配置传输到
members
数组所列的所有幸存成员。副本集将选举新的主副本。注意
使用
force : true
时,副本集配置中的版本号会显著增加,增加数万或数十万。这是正常现象,旨在防止设置版本冲突(如果意外在网络分区的两侧强制重新配置,则网络分区结束)。如果故障或分区只是暂时性的情况,请尽快关闭或停用已删除的节点。