On this page
从副本集中删除成员
在本页面
要删除replica set的成员,请使用以下任一过程。
使用 rs.remove()删除成员
关闭您要删除的成员的mongod实例。要关闭实例,请使用mongo shell 和db.shutdownServer()方法进行连接。
连接到副本集的当前primary。若要确定当前的主数据库,请在连接到副本集的任何成员时使用db.isMaster()。
使用以下任何一种形式的rs.remove()删除该成员:
rs.remove("mongod3.example.net:27017")
rs.remove("mongod3.example.net")
如果副本集需要选择新的主数据库,则 MongoDB 可能会短暂断开 Shell 程序的连接。然后,在这种情况下,Shell 会自动重新连接。即使命令成功,Shell 程序也会显示DBClientCursor::init call() failed
错误。
使用 rs.reconfig()删除成员
要删除成员,您可以按照此处所述手动编辑副本集配置文档。
关闭您要删除的成员的mongod实例。要关闭实例,请使用mongo shell 和db.shutdownServer()方法进行连接。
连接到副本集的当前primary。若要确定当前的主数据库,请在连接到副本集的任何成员时使用db.isMaster()。
发出rs.conf()方法以查看当前配置文档并确定要删除的成员在
members
数组中的位置:
Example
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
对象以删除该成员。
Example
要删除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"
}
]
}