定义
rs.remove(hostname)从当前副本集中删除由
hostname参数描述的成员。此函数将短暂断开 Shell 连接,并在副本集重新协商哪个成员为主节点时强制重新连接。所以即使该命令成功执行,Shell 也会显示错误。rs.remove()方法具有以下参数:Parameter类型说明hostname字符串
副本集中系统的主机名。
注意
在运行
rs.remove()操作之前,最好关闭要删除的副本集成员。
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
行为
全局写关注
删除成员会更改副本集有投票权的成员数量,从而更改隐式默认写关注(write concern)。
在尝试使用会更改隐式默认写关注的配置重新副本集之前,必须显式设立全局默认写关注(write concern)写关注(write concern)。要设立全局默认写关注(write concern),请使用setDefaultRWConcern 命令。
等到大多数节点安装副本配置后才删除
rs.remove()replSetReconfig使用省略已删除成员的配置运行 命令。该方法会等到大多数投票副本集成员安装新的副本配置后才会返回成功。投票节点是members[n].votes 为1 的任何副本集节点,包括仲裁节点。要学习;了解副本集成员如何安装新配置,请参阅重新配置等待大多数成员安装副本配置。
rs.remove()不接受 maxTimeMS 限制。如果大多数投票成员从不安装新配置,则操作将无限期等待。
与已删除成员的连接
默认情况下,副本集节点等待 5 分钟,然后再删除到删除的节点的连接。在分片副本集中,您可以使用 ShardingTaskExecutorPoolHostTimeoutMS 服务器参数修改该超时。
要立即删除从副本集到已删除成员的所有传出连接,请对副本集的每个剩余成员运行 dropConnections 管理命令:
db.adminCommand( { "dropConnections" : 1, "hostAndPort" : [ "<hostname>:<port>" ] } )
将 <hostname> 替换为已删除成员的主机名,将 <port> 替换为 mongod 监听的端口。