翻译或纠错本页面

为有不可用节点的复制集重设复制集配置

To reconfigure a replica set when a majority of members are available, use the rs.reconfig() operation on the current primary, following the example in the Replica Set Reconfiguration Procedure.

本文档提供了当复制集中 只有 少数 成员可用时,重新配置复制集的步骤。

You may need to use the procedure, for example, in a geographically distributed replica set, where no local group of members can reach a majority. See 复制集选举 for more information on this situation.

强制更新复制集配置

本文讲述了如何在 replica set 中多数节点不可用的时候恢复复制集的服务。我们可以连接到任意一个存活的节点上,在 rs.reconfig() 的时候使用 force 参数。

The force option forces a new configuration onto the member. Use this procedure only to recover from catastrophic interruptions. Do not use force every time you reconfigure. Also, do not use the force option in any automatic scripts and do not use force when there is still a primary.

强行应用复制集配置:

  1. 备份存活的节点。

  2. 连接进存货的节点,保存现有的配置。可以参考下列命令:

    cfg = rs.conf()
    
    printjson(cfg)
    
  3. 在相同的成员上,通过将 members 数组的值单独设置为存活节点,删除复制集中宕机和不可达成员。考虑下面的示例,它使用了之前的步骤中创建的 cfg 变量:

    cfg.members = [cfg.members[0] , cfg.members[4] , cfg.members[7]]
    
  4. 在同一个节点上,通过使用 forcetruers.reconfig() 命令来强行应用配置:

    rs.reconfig(cfg, {force : true})
    

    该操作强制从节点使用新的配置。该配置将会同步到所有存活着的在 members 中节点,并会新选举出一个主节点。

    注解

    当我们使用 force : true 的时候,复制及配置的版本会显著增加(increases significantly)(成百上千的)。这是正常现象,这样设计是为了防止当网络情况不好的时候版本号出现冲突。

  5. 如果出现暂时性的失败或是分离,需要尽快关闭移除的节点。