Docs 菜单

Docs 主页开发应用程序MongoDB Manual

rs.add()

在此页面上

  • 定义
  • IP 绑定
  • 行为
  • 例子
rs.add(host, arbiterOnly)

将成员添加到副本集。要运行该方法,必须连接到副本集的主节点

范围
类型
说明
host
字符串或文档

将新节点添加到副本集中。指定为字符串或配置文档:

  • 如果是文档,请指定可在 members 数组中找到的副本集节点配置文档。您必须在节点配置文件中指定 host 字段。

    {
    _id: <int>,
    host: <string>, // required
    arbiterOnly: <boolean>,
    buildIndexes: <boolean>,
    hidden: <boolean>,
    priority: <number>,
    tags: <document>,
    secondaryDelaySecs: <int>,
    votes: <number>
    }

    有关该配置字段的说明,请参阅 members

  • 如果是字符串,请指定新节点的主机名和可选端口号。

arbiterOnly
布尔
可选。仅在 <host> 值为字符串时才适用。如果为 true,则添加的主机是仲裁节点。

rs.add()封装了replSetReconfig数据库命令和相应的mongosh辅助程序rs.reconfig()的部分功能。有关所有副本集配置选项的完整文档,请参阅副本集配置文档。

警告

在绑定到非本地主机(例如可公开访问)IP 地址之前,请确保您已保护集群免受未经授权的访问。有关安全建议的完整列表,请参阅安全检查清单。至少应考虑启用身份验证强化网络基础设施。

MongoDB 二进制文件 mongodmongos 默认绑定到本地主机。如果为此二进制文件设置了 net.ipv6 配置文件设置或 --ipv6 命令行选项,则该二进制文件还会绑定到本地主机 IPv6 地址。

默认情况下,绑定到本地主机的mongodmongos只接受来自同一计算机上运行的客户端的连接。这种绑定行为包括mongosh以及副本集或分片集群的其他成员。远程客户端无法连接到仅绑定到本地主机的二进制文件。

要覆盖默认绑定并绑定到其他 IP 地址,请使用 net.bindIp 配置文件设置或 --bind_ip 命令行选项来指定主机名或 IP 地址的列表。

例如,以下 mongod 实例会绑定到本地主机和主机名 My-Example-Associated-Hostname,而该主机名与 IP 地址 198.51.100.1 相关联:

mongod --bind_ip localhost,My-Example-Associated-Hostname

为了连接到此实例,远程客户端必须指定主机名或其关联的 IP 地址 198.51.100.1

mongosh --host My-Example-Associated-Hostname
mongosh --host 198.51.100.1

重要

要避免因 IP 地址变更而更新配置,请使用 DNS 主机名而非 IP 地址。在配置副本集成员或分片集群成员时,使用 DNS 主机名而非 IP 地址尤为重要。

使用主机名而不是 IP 地址在分割网络范围内配置集群。从 MongoDB 5开始。 0 ,仅配置了 IP 地址的节点未通过启动验证,因此不会启动。

在某些情况下, rs.add()可以触发主节点选举,这将断开 Shell 的连接(例如添加优先级高于当前主节点的新成员)。在这种情况下,即使操作成功, mongosh也可能会显示错误。

警告

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

要将具有默认投票和优先级设置的新从节点添加到新副本集,可以使用以下命令调用rs.add()方法:

  • 成员配置文件

    rs.add( { host: "mongodbd4.example.net:27017" } )
  • 主机名

    rs.add( "mongodbd4.example.net:27017" )

将具有默认投票和优先级设置的新从节点添加到现有副本集:

rs.add( { host: "mongodbd4.example.net:27017" } )

警告

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

以下操作添加 mongod 实例,作为优先级为 0 的从节点,该实例在主机 mongodb4.example.net 上运行且可通过默认端口 27017 访问:

rs.add( { host: "mongodbd4.example.net:27017", priority: 0 } )

您必须在该节点配置文档中指定 members[n].host 字段。

请参阅 members,了解可用的副本集节点配置设置。

以下操作添加一个mongod实例,该实例在主机mongodb3.example.net上运行,并可作为仲裁节点通过默认端口27017进行访问:

  • 成员配置文件

    rs.add( { host: "mongodb3.example.net:27017", arbiterOnly: true } )
  • 主机名

    rs.add("mongodb3.example.net:27017", true)

在下列的 MongoDB 版本中,对于带有仲裁节点的副本集,与 pv0 协议版本(MongoDB 4.0+ 中不再支持)相比,pv1 协议版本增加了 w:1 回滚的可能性:

  • MongoDB 3.4.1

  • MongoDB 3.4.0

  • MongoDB 3.2.11 或更早的版本

请参阅副本集协议版本。

另请参阅:

← 复制方法