rs.add()
定义
rs.add(host, arbiterOnly)
将成员添加到 副本集。要运行该方法,必须连接到副本集的 主节点。
Parameter类型说明host
字符串或文档
将新节点添加到副本集中。指定为字符串或配置文档:
arbiterOnly
布尔
可选。仅在
<host>
值为字符串时才适用。如果为true
,则添加的主机是仲裁节点。rs.add()
封装了replSetReconfig
数据库命令和相应的mongosh
辅助程序rs.reconfig()
的部分功能。 有关所有副本集配置选项的完整文档,请参阅自管理副本集配置文档。
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
IP 绑定
警告
将实例绑定到可公开访问的 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)
另请参阅: