Docs 菜单
Docs 主页
/
MongoDB Manual
/ / / /

替换自管理配置服务器

在此页面上

  • Overview
  • Considerations
  • 步骤

重要

以下步骤适用于 5.0 配置服务器。对于早期版本的 MongoDB,请参阅相应版本的 MongoDB 手册。

如果配置服务器副本集变为只读,即没有主节点,则分片集群无法支持更改集群元数据的操作,例如数据块分割和迁移。虽然无法分割或迁移任何数据块,但应用程序能够将数据写入分片集群。

如果其中一个配置服务器不可用或无法运行,请尽快修复或更换。 以下过程将配置服务器副本集的节点替换为新成员。

本教程仅适用于 MongoDB 5.0。 对于早期版本的 MongoDB,请参阅相应版本的 MongoDB 手册。

在用于配置服务器时,副本集的配置有以下限制:

1

启动 mongod 实例,指定 --configsvr--replSet--bind_ip 选项,以及适合您部署的其他选项。

警告

在绑定到非本地主机(例如 可公开访问的) IP解决,确保已保护集群免遭未经授权的访问权限。 有关安全建议的完整列表,请参阅自托管部署的安全检查清单。 至少应考虑启用身份验证强化网络基础架构。

mongod --configsvr --replSet <replicaSetName> --bind_ip localhost,<hostname(s)|ip address(es)>
2

mongosh连接到配置服务器副本集的主节点 (primary node in the replica set)节点,并使用rs.add()添加新成员。

警告

在 MongoDB 5.0 之前,新增的节点仍然算作投票成员,尽管在数据保持一致之前,它们既不能服务于读取,也不能成为主节点。如果您运行的是 5.0 之前的 MongoDB 版本,并添加了 votespriority 设置大于零的从节点,则可能会导致有大多数投票成员在线却无法选举主节点的情况。为避免出现这种情况,可考虑先添加 priority :0votes :0 的新从节点。然后运行 rs.status(),确保成员已过渡到 SECONDARY 状态。最后,使用 rs.reconfig() 更新其优先级和投票。

rs.add( { host: "<hostnameNew>:<portNew>", priority: 0, votes: 0 } )

初始同步过程将所有数据从配置服务器副本集的一个成员复制到新成员,而不重新启动。

mongos 实例会自动识别配置服务器副本集成员中的更改,而无需重新启动。

3
  1. 确保新成员已达到 SECONDARY 状态。要检查副本集成员的状态,请运行 rs.status()

    rs.status()
  2. 重新配置副本集以更新新节点的投票和优先级:

    var cfg = rs.conf();
    cfg.members[n].priority = 1; // Substitute the correct array index for the new member
    cfg.members[n].votes = 1; // Substitute the correct array index for the new member
    rs.reconfig(cfg)

    其中nmembers数组中新节点的数组索引。

警告

  • rs.reconfig() shell 方法可以强制当前的主节点下台,从而导致选举。当主服务器向下运行时,mongod 会关闭所有客户端连接。 虽然这通常需要 10-20 秒,但请尝试在计划维护期间进行这些更改。

  • 避免重新配置包含不同 MongoDB 版本节点的副本集,因为验证规则可能因 MongoDB 版本而异。

4

如果更换主节点,请在关闭之前先对主节点降级。

5

在完成替换配置服务器的初始同步后,从连接主节点的 mongosh 会话中,使用 rs.remove() 来删除旧成员。

rs.remove("<hostnameOld>:<portOld>")

mongos 实例会自动识别配置服务器副本集成员中的更改,而无需重新启动。

6

使用副本集配置服务器时,mongos 实例在 --configdbsharding.configDB 设置中指定配置服务器副本集名称和至少一个副本集节点。

因此,如果 mongos 实例未在 --configdbsharding.configDB 设置中指定已删除的副本集成员,则无需执行进一步操作。

但是,如果 mongos 实例在 --configdbconfigDB 设置中指定了已删除节点,则:

  • 下次重新启动 mongos 时更新设置,或者

  • 修改指向提供旧配置服务器的系统的 DNS 条目,使相同主机名指向新的配置服务器。

后退

配置服务器管理