定义
rs.add(host, arbiterOnly)将成员添加到副本集。要运行该方法,必须连接到副本集的主节点。
Parameter类型说明host字符串或文档
将新节点添加到副本集中。指定为字符串或配置文档:
如果是字符串,请指定新节点的主机名和可选端口号。
arbiterOnly布尔
可选。仅在
<host>值为字符串时才适用。如果为true,则添加的主机是仲裁节点。rs.add()provides a wrapper around some of the functionality of thereplSetReconfigdatabase command and the correspondingmongoshhelperrs.reconfig(). See the Self-Managed Replica Set Configuration document for full documentation of all replica set configuration options.
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
IP 绑定
警告
将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证和强化网络基础设施。
MongoDB 二进制文件 mongod 和 mongos 默认绑定到本地主机。如果为此二进制文件设置了 net.ipv6 配置文件设置或 --ipv6 命令行选项,则该二进制文件还会绑定到本地主机 IPv6 地址。
By default mongod and mongos that are bound to localhost only accept connections from clients that are running on the same computer. This binding behavior includes mongosh and other members of your replica set or sharded cluster. Remote clients cannot connect to binaries that are bound only to localhost.
要覆盖默认绑定并绑定到其他 IP 地址,请使用 net.bindIp 配置文件设置或 --bind_ip 命令行选项来指定主机名或 IP 地址的列表。
警告
从 MongDB5.0 开始,仅配置了IP解决的水平分割DNS 节点无法通过初创企业验证并报告错误。请参阅disableSplitHorizonIPCheck 。
例如,以下 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() can, in some cases, trigger an election for primary which will disconnect the shell (such as adding a new member with a higher priority than the current primary). In such cases, mongosh may display an error even if the operation succeeds.
警告
在 MongoDB 5.0 之前,新增的节点仍然算作投票成员,尽管在数据保持一致之前,它们既不能服务于读取,也不能成为主节点。如果您运行的是 5.0 之前的 MongoDB 版本,并添加了 votes 和 priority 设置大于零的从节点,则可能会导致有大多数投票成员在线却无法选举主节点的情况。为避免出现这种情况,可考虑先添加 priority :0 和 votes :0 的新从节点。然后运行 rs.status(),确保成员已过渡到 SECONDARY 状态。最后,使用 rs.reconfig() 更新其优先级和投票。
例子
向新副本集添加从节点
To add a new secondary member with default vote and priority settings to a new replica set, you can call the rs.add() method with:
成员配置文件
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 版本,并添加了 votes 和 priority 设置大于零的从节点,则可能会导致有大多数投票成员在线却无法选举主节点的情况。为避免出现这种情况,可考虑先添加 priority :0 和 votes :0 的新从节点。然后运行 rs.status(),确保成员已过渡到 SECONDARY 状态。最后,使用 rs.reconfig() 更新其优先级和投票。
向副本集添加优先级为 0 的节点
以下操作添加 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)
另请参阅: