【MongoDB Shell方法】副本集方法rs.add()

目录

一、方法定义

二、IP绑定

三、方法特点

四、使用示例

1.向新副本集中添加辅助节点

2.向现有副本集中添加辅助节点

3.向副本集中添加优先级为0的成员

4.向副本集中添加仲裁节点


 

一、方法定义

rs.add(host, arbiterOnly)

方法作用:将成员添加到副本集。要使用此方法,必须连接到副本集的主节点上。

参数说明:

参数名

类型

说明

 

host

 

string

 document

 

  • 如果是document ,与members数组中的副本集成员(members)配置文档格式一样。

必须在配置文档中指定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)

 

更多:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值