从副本集中删除节点
要删除副本集的节点,请使用以下任一过程。
使用删除节点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 会自动重新连接。DBClientCursor::init call() failed
即使命令成功,shell 也可能会显示错误。
使用删除成员rs.reconfig()
您可以通过使用从阵列中删除该节点的副本配置文档重新配置副本集来删除该节点。members
从 MongoDB 4.4 开始,一次rs.reconfig()
只允许添加或删除1
voting
节点。要从副本集中删除多个投票节点,请发出一系列rs.reconfig()
操作以一次删除一个节点。有关详细信息,请参阅重新配置一次最多只能添加或删除一个投票节点。
程序
要删除的节点。要关闭
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" } ] }
原文链接 - https://docs.mongodb.com/manual/tutorial/remove-replica-set-member/
译者:陆文龙