文档菜单
文档首页
/
MongoDB 手册
/ / / /

替换自托管配置服务器

本页内容

  • 概述
  • 注意事项
  • 步骤

重要

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

如果配置服务器副本集变为只读,即没有主节点,分片集群无法支持更改集群元数据的操作,例如分片拆分和迁移。虽然无法拆分或迁移分片,但应用程序仍然可以向分片集群写入数据。

如果某个配置服务器不可用或无法使用,请尽快修复或替换它。以下步骤用新成员替换配置服务器副本集的一个成员。配置服务器副本集

本教程针对MongoDB 8.0。对于MongoDB的早期版本,请参阅MongoDB手册的相应版本。

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

1

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

警告

在将您的实例绑定到公开可访问的 IP 地址之前,您必须确保您的集群免受未经授权的访问。有关安全建议的完整列表,请参阅 自托管部署安全清单。至少,请考虑 启用身份验证强化网络基础设施

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

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

警告

在 MongoDB 5.0 之前,即使新添加的副节点既不能处理读取操作也不能成为主节点直到其数据一致,它仍然被视为一个投票成员。如果您正在运行 MongoDB 5.0 之前的版本,并添加了一个副节点,其 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)

    其中 n 是新成员在 members 数组中的数组索引。

警告

  • shell 方法 rs.reconfig() 可以强制当前主节点降级,这将触发一个 选举。当主节点降级时,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 条目,以便相同的主机名指向新的配置服务器。

返回

配置服务器管理