目录
一、方法定义
二、IP绑定
三、方法特点
四、使用示例
1.向新副本集中添加辅助节点
2.向现有副本集中添加辅助节点
3.向副本集中添加优先级为0的成员
4.向副本集中添加仲裁节点
一、方法定义
rs.add(host, arbiterOnly)
方法作用:将成员添加到副本集。要使用此方法,必须连接到副本集的主节点上。
参数说明:
参数名 | 类型 | 说明 |
host |
string 或 document |
必须在配置文档中指定host字段,如下所示:
{ _id: <int>, host: <string>, // required arbiterOnly: <boolean>, buildIndexes: <boolean>, hidden: <boolean>, priority: <number>, tags: <document>, slaveDelay: <int>, votes: <number> }
有关配置详情,请参阅members。
|
arbiterOnly | boolean | 可选。 仅在<host>值为string时适用。如果为true,则添加的主机为仲裁器。 |
rs.add()提供了replSetReconfig数据库命令的某些功能以及相应的mongo shell方法rs.reconfig()的包装。有关所有副本集配置选项的完整文档,请参阅副本集配置文档。
二、IP绑定
从MongoDB 3.6开始,默认情况下,MongoDB二进制文件mongod和mongos绑定到localhost。如果为二进制文件设置了net.ipv6配置文件设置或--ipv6命令行选项,则该二进制文件还会绑定到本地IPv6地址。
以前,从MongoDB 2.6开始,默认情况下,只有正式MongoDB RPM(Red Hat,CentOS,Fedora Linux和派生版本)和DEB(Debian,Ubuntu和派生版本)软件包中的二进制文件绑定到localhost。
当仅绑定到localhost时,这些MongoDB 3.6二进制文件只能接受来自在同一台计算机上运行的客户端(包括mongo shell,部署中副本集和分片群集的其他成员)的连接。远程客户端无法连接到仅绑定到本地主机的二进制文件。
要覆盖并绑定到其他IP地址,可以使用net.bindIp配置文件设置项或--bind_ip命令行选项来指定主机名或IP地址的列表。
警告
绑定到非本地主机(例如可公开访问)的IP地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参阅“安全检查表”。至少应考虑启用身份验证并加强网络基础结构。
例如,将mongod实例同时绑定到localhost和主机名My-Example-Associated-Hostname(该主机名与IP地址198.51.100.1关联):
mongod --bind_ip localhost,My-Example-Associated-Hostname
为了连接到该实例,远程客户端必须指定主机名或其关联的IP地址198.51.100.1:
mongo --host My-Example-Associated-Hostname
mongo --host 198.51.100.1
提示:
如果可能,请使用逻辑DNS主机名代替IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
三、方法特点
在某些情况下,rs.add()可能会触发新一轮的主节点(primary)选举,这将断开shell程序的连接(例如,添加新成员的优先级高于当前主节点的优先级)。在这种情况下,即使操作成功,mongo shell也会显示错误。
提示1:
当新添加的辅助节点的投票和优先级大于零时,在其初始同步期间,即使辅助节点不能提供读取功能或成为主节点,因为其数据仍不一致,所以该辅助节点仍算作有表决权的成员。
这可能导致大多数投票成员在线但无法选举主要成员的情况。为避免这种情况,请考虑首先添加优先级为0且投票为0的新辅助节点。然后,一旦成员转换为SECONDARY状态,再使用rs.reconfig()更新其优先级和投票。
四、使用示例
1.向新副本集中添加辅助节点
将具有默认票数和优先级设置的新辅助成员添加到新副本集,使用rs.add()方法2种形式如下:
- 成员配置文件形式
rs.add( { host: "mongodbd4.example.net:27017" } )
- 主机名形式
rs.add( "mongodbd4.example.net:27017" )
2.向现有副本集中添加辅助节点
提示:
参考 提示1
将具有默认投票和优先级值的新辅助成员添加到现有副本集中,执行以下操作:
1.添加一个无投票权、优先级为0的成员:
rs.add( { host: "mongodbd4.example.net:27017", priority: 0, votes: 0 } )
2.等待新成员的状态变成SECONDARY。检查副本集成员的状态的方法:
rs.status()
3.重新配置副本集,来更新新成员的投票(vote)和优先级(priority):
var cfg = rs.conf();
cfg.members[n].priority = 1; // 新成员数组索引
cfg.members[n].votes = 1; // 新成员数组索引
rs.reconfig(cfg)
其中n是新成员在成员数组中的数组索引。
警告
- shell方法rs.reconfig()可以强制当前主节点降级,从而发起新一轮选举。当主节点降级时,mongod将关闭所有客户端连接。尽管这通常需要10到20秒,但最好在计划的维护期间进行这些更改。
- 不要重新配置包含不同MongoDB版本成员的副本集,因为验证规则在MongoDB版本之间可能有所不同。
3.向副本集中添加优先级为0的成员
以下操作将在主机mongodb4.example.net上运行并且通过默认端口27017访问的mongod实例添加到副本集,并且作为优先级为0的辅助成员(secondary):
rs.add( { host: "mongodbd4.example.net:27017", priority: 0 } )
必须在成员配置文档中指定member [n] .host字段。
可以参阅成员以获取副本集成员配置信息。
4.向副本集中添加仲裁节点
以下操作将在主机mongodb3.example.net上运行并且通过默认端口27017访问的mongod实例添加到副本集,并且作为仲裁节点(arbiter):
- 成员配置文件形式
rs.add( { host: "mongodb3.example.net:27017", arbiterOnly: true } )
- 主机名形式
rs.add("mongodb3.example.net:27017", true)