On this page
rs.add()
在本页面
Definition
rs.
add
(* host , arbiterOnly *)- 将成员添加到replica set。若要运行该方法,必须连接到副本集的primary。
Parameter | Type | Description |
---|---|---|
host |
字符串或文件 | 要添加到副本集的新成员。指定为字符串或配置文档: |
如果是文档,请指定在members数组中找到的副本集成员配置文档。您必须在成员配置文档中指定host字段。
{
_id: <int>,
主持人:<string>,//必填
arbiterOnly: <boolean>,
buildIndexes: <boolean>,
hidden: <boolean>,
priority: <number>,
tags: <document>,
slaveDelay: <int>,
votes: <number>
}
有关配置字段的描述,请参阅members。
如果是字符串,请指定新成员的主机名和端口号(可选)。
| arbiterOnly
|布尔值|可选。仅在<host>
值为字符串时适用。如果true
,则添加的主机是仲裁器。
rs.add()提供了replSetReconfig database command和相应的mongo shell 助手rs.reconfig()的某些功能的包装。有关所有副本集配置选项的完整文档,请参见副本集配置文档。
IP Binding
从 MongoDB 3.6 开始,默认情况下,MongoDB 二进制文件mongod和mongos绑定到 localhost(127.0.0.1
)。如果为二进制文件设置了net.ipv6配置文件设置或--ipv6
命令行选项,则该二进制文件还会绑定到 IPv6 地址::1
。
以前,从 MongoDB 2.6 开始,默认情况下,只有正式 MongoDB RPM(Red Hat,CentOS,Fedora Linux 和派生版本)和 DEB(Debian,Ubuntu 和派生版本)程序包中的二进制文件绑定到 localhost。
当仅绑定到 localhost 时,这些 MongoDB 3.6 二进制文件只能接受来自同一台计算机上运行的 Client 端(包括mongo shell,副本集中的其他成员和分片群集)的连接。远程 Client 端无法连接到仅绑定到 localhost 的二进制文件。
要覆盖并绑定到其他 IP 地址,可以使用net.bindIp配置文件设置或--bind_ip
命令行选项来指定 IP 地址列表。
Warning
绑定到非 localhost(例如可公开访问)的 IP 地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参见Security Checklist。至少考虑enabling authentication和加强网络基础设施。
例如,以下mongod实例同时绑定到 localhost 和示例 IP 地址198.51.100.1
:
mongod --bind_ip localhost,198.51.100.1
为了连接到该实例,远程 Client 端必须指定 IP 地址198.51.100.1
或与该 IP 地址关联的主机名:
mongo --host 198.51.100.1
mongo --host My-Example-Associated-Hostname
Behavior
在某些情况下,rs.add()可以触发主节点的选举,这将断开 Shell 的连接(例如,添加优先级高于当前主节点的新成员)。在这种情况下,即使操作成功,mongo shell 也可能显示错误。
Tip
当新添加的辅助节点的votes和priority设置大于零时,在其初始同步期间,即使辅助节点不能提供读取或成为主节点,因为其数据仍不一致,所以该辅助节点仍会计为有表决权的成员。
这可能导致大多数投票成员在线但无法选举主要成员的情况。为避免这种情况,请考虑首先使用priority :0和votes :0添加新的辅助服务器。然后,一旦成员已转换为SECONDARY状态,请使用rs.reconfig()更新其优先级和投票。
Example
将辅助副本添加到新副本集
要将具有默认投票和优先级设置的新辅助成员添加到新副本集,可以使用以下方法调用rs.add()方法:
- 会员配置文件
rs.add( { host: "mongodbd4.example.net:27017" } )
- Host name
rs.add( "mongodbd4.example.net:27017" )
将辅助副本添加到现有副本集中
Tip
当新添加的辅助节点的votes和priority设置大于零时,在其初始同步期间,即使辅助节点不能提供读取或成为主节点,因为其数据仍不一致,所以该辅助节点仍会计为有表决权的成员。
这可能导致大多数投票成员在线但无法选举主要成员的情况。为避免这种情况,请考虑首先使用priority :0和votes :0添加新的辅助服务器。然后,一旦成员已转换为SECONDARY状态,请使用rs.reconfig()更新其优先级和投票。
要将具有默认投票和优先级设置的新辅助成员添加到现有副本集,请执行以下操作:
- 最初将成员添加为non-voting,priority 0成员:
rs.add( { host: "mongodbd4.example.net:27017", priority: 0, votes: 0 } )
- 确保新成员已达到SECONDARY状态。要检查副本集成员的状态,请运行rs.status():
rs.status()
- 重新配置副本集以更新新成员的投票和优先级:
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数组中新成员的数组索引。
Warning
rs.reconfig() shell 方法可以强制当前主节点降级,从而导致election。当主服务器降级时,mongod关闭所有 Client 端连接。尽管这通常需要 10 到 20 秒,但请尝试在计划的维护期间进行这些更改。
避免重新配置包含不同 MongoDB 版本成员的副本集,因为验证规则在 MongoDB 版本之间可能有所不同。
将优先级为 0 的成员添加到副本集中
以下操作添加了一个mongod实例,该实例在主机mongodb4.example.net
上运行并且可以在默认端口27017
上作为priority 0辅助成员访问:
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 } )
- Host name
rs.add("mongodb3.example.net:27017", true)
对于以下 MongoDB 版本,具有仲裁器的副本集与pv0
相比,pv1
增加了w:1回滚的可能性:
MongoDB 3.4.1
MongoDB 3.4.0
MongoDB 3.2.11 或更早版本
See 副本集协议版本.
See also: