从自管理副本集中移除成员
要移除一个副本集成员,可以使用以下任一程序。
使用以下方法移除成员rs.remove()
关闭要删除的成员的
mongod
实例。要关闭实例,请使用mongosh
并使用db.shutdownServer()
方法。连接到副本集的当前
primary
。要确定当前主节点,请在连接到副本集的任何成员时使用db.hello()
。使用以下任一形式使用
rs.remove()
来删除成员rs.remove("mongod3.example.net:27017") rs.remove("mongod3.example.net") 如果副本集需要选举新的主节点,MongoDB 可能会暂时断开 shell 的连接。在这种情况下,shell 将自动重新连接。即使命令成功执行,shell 也可能显示
DBClientCursor::init call() failed
错误。
使用 rs.reconfig()
删除成员
您可以通过使用一个不包含该成员的 replica configuration document
来从 members
数组中删除该成员来重新配置副本集。
rs.reconfig()
允许每次添加或删除不超过 1
个 voting
成员。要从副本集中删除多个投票成员,请执行一系列 rs.reconfig()
操作,每次删除一个成员。有关更多信息,请参阅 Reconfiguration Can Add or Remove No More than One Voting Member at a Time。
操作步骤
关闭您要移除的成员的
mongod
实例。要关闭实例,使用mongosh
并使用db.shutdownServer()
方法。连接到副本集的当前
primary
。要确定当前主节点,请在连接到副本集的任何成员时使用db.hello()
。执行
rs.conf()
方法以查看当前配置文档并确定要移除的成员在members
数组中的位置示例
mongod_C.example.net
在以下配置文件中位置为2
{ "_id" : "rs", "version" : 7, "members" : [ { "_id" : 0, "host" : "mongod_A.example.net:27017" }, { "_id" : 1, "host" : "mongod_B.example.net:27017" }, { "_id" : 2, "host" : "mongod_C.example.net:27017" } ] } 将当前配置文档赋值给变量
cfg
cfg = rs.conf() 修改
cfg
对象以移除成员。示例
要移除
mongod_C.example.net:27017
,使用以下 JavaScript 操作cfg.members.splice(2,1) 通过以下操作用新配置覆盖副本集配置文档
rs.reconfig(cfg) 要确认新配置,执行
rs.conf()
.上面的示例输出将如下
{ "_id" : "rs", "version" : 8, "members" : [ { "_id" : 0, "host" : "mongod_A.example.net:27017" }, { "_id" : 1, "host" : "mongod_B.example.net:27017" } ] }