rs.add()

在本页面

Definition

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 二进制文件mongodmongos绑定到 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

当新添加的辅助节点的votespriority设置大于零时,在其初始同步期间,即使辅助节点不能提供读取或成为主节点,因为其数据仍不一致,所以该辅助节点仍会计为有表决权的成员。

这可能导致大多数投票成员在线但无法选举主要成员的情况。为避免这种情况,请考虑首先使用priority :0votes :0添加新的辅助服务器。然后,一旦成员已转换为SECONDARY状态,请使用rs.reconfig()更新其优先级和投票。

Example

将辅助副本添加到新副本集

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

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

将辅助副本添加到现有副本集中

Tip

当新添加的辅助节点的votespriority设置大于零时,在其初始同步期间,即使辅助节点不能提供读取或成为主节点,因为其数据仍不一致,所以该辅助节点仍会计为有表决权的成员。

这可能导致大多数投票成员在线但无法选举主要成员的情况。为避免这种情况,请考虑首先使用priority :0votes :0添加新的辅助服务器。然后,一旦成员已转换为SECONDARY状态,请使用rs.reconfig()更新其优先级和投票。

要将具有默认投票和优先级设置的新辅助成员添加到现有副本集,请执行以下操作:

rs.add( { host: "mongodbd4.example.net:27017", priority: 0, votes: 0 } )
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)

其中nmembers数组中新成员的数组索引。

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 } )
rs.add("mongodb3.example.net:27017", true)

对于以下 MongoDB 版本,具有仲裁器的副本集与pv0相比,pv1增加了w:1回滚的可能性:

See 副本集协议版本.

See also:

首页