Docs 主页 → 开发应用程序 → MongoDB Manual
rs.add()
定义
rs.add(host, arbiterOnly)
将成员添加到副本集。要运行该方法,必须连接到副本集的主节点。
范围类型说明host
字符串或文档将新节点添加到副本集中。指定为字符串或配置文档:
arbiterOnly
布尔可选。仅在<host>
值为字符串时才适用。如果为true
,则添加的主机是仲裁节点。rs.add()
封装了replSetReconfig
数据库命令和相应的mongosh
辅助程序rs.reconfig()
的部分功能。有关所有副本集配置选项的完整文档,请参阅副本集配置文档。
IP 绑定
MongoDB 二进制文件 mongod
和 mongos
默认绑定到本地主机。如果为此二进制文件设置了 net.ipv6
配置文件设置或 --ipv6
命令行选项,则该二进制文件还会绑定到本地主机 IPv6 地址。
默认情况下,绑定到本地主机的mongod
和mongos
只接受来自同一计算机上运行的客户端的连接。这种绑定行为包括mongosh
以及副本集或分片集群的其他成员。远程客户端无法连接到仅绑定到本地主机的二进制文件。
要覆盖默认绑定并绑定到其他 IP 地址,请使用 net.bindIp
配置文件设置或 --bind_ip
命令行选项来指定主机名或 IP 地址的列表。
警告
从 MongDB5 开始。0 、 水平分割 DNS 仅配置了 IP 地址的节点无法启动验证并报告错误。请参阅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()
可以触发主节点选举,这将断开 Shell 的连接(例如添加优先级高于当前主节点的新成员)。在这种情况下,即使操作成功, mongosh
也可能会显示错误。
警告
在 MongoDB 5.0 之前,新增的节点仍然算作投票成员,尽管在数据保持一致之前,它们既不能服务于读取,也不能成为主节点。如果您运行的是 5.0 之前的 MongoDB 版本,并添加了 votes
和 priority
设置大于零的从节点,则可能会导致有大多数投票成员在线却无法选举主节点的情况。为避免出现这种情况,可考虑先添加 priority :0
和 votes :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 版本,并添加了 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)
在下列的 MongoDB 版本中,对于带有仲裁节点的副本集,与 pv0
协议版本(MongoDB 4.0+ 中不再支持)相比,pv1
协议版本增加了 w:1
回滚的可能性:
MongoDB 3.4.1
MongoDB 3.4.0
MongoDB 3.2.11 或更早的版本
请参阅副本集协议版本。
另请参阅: