removeShard
¶从分片集群中删除分片。在运行时
removeShard
,MongoDB通过使用平衡器将分片的块移动到集群中的其他分片来耗尽分片。一旦分片耗尽,MongoDB就会从集群中删除分片。
一次只能删除一个碎片。
removeShard
如果现有removeShard
操作正在进行,则返回错误
。
如果已authorization
启用,则必须具有该
clusterManager
角色或包含该removeShard
操作的任何角色。
分片群集中的每个数据库都有一个主分片。如果要删除的分片也是集群数据库之一的主数据库,则在从该分片迁移所有数据之后,必须手动将数据库移至新的分片。有关更多信息,请参见movePrimary
命令和从现有分片群集中删除分片。
当您在块分布不均匀的集群中删除一个分片时,平衡器首先从排水分片中删除这些块,然后平衡其余的不均匀块分布。
mongos
转换
写入关注的的
removeShard
命令"majority"
。
在mongo
shell中,该removeShard
操作类似于以下内容:
用bristol01
要删除的碎片名称替换。运行时removeShard
,该命令将返回类似于以下内容的消息:
平衡器开始将大块从名为shard的块迁移(“排出”)
bristol01
到集群中的其他shard。为了避免在群集上施加不必要的负载,这些迁移的速度很慢。
输出包括字段dbsToMove
指示该数据库针对bristol01
的是主碎片。将所有块都从分片中清除后,您必须
movePrimary
对数据库进行操作,或者删除这些数据库。
注意
如果要删除的分片不是任何数据库的主分片,则dbsToMove
阵列将为空,并且
removeShard
无需干预即可完成迁移。
如果再次运行该命令,则removeShard
返回进程的当前状态。例如,如果操作符处于某种
ongoing
状态,则该命令将返回类似于以下内容的输出:
在输出中,该remaining
字段包括以下字段:
chunks |
当前保留在分片上的块总数。 |
dbs |
主分片为分片的数据库总数。这些数据库在dbsToMove 输出字段中指定。 |
jumboChunks |
在总数中 如果 从4.2.2(和4.0.14)开始可用 |
继续检查removeShard
命令的状态(即重新运行命令),直到剩余的块数为0
。
在所有碎片都从分片中耗尽后,如果有
dbsToMove
,则可以使用movePrimary
这些数据库,也可以删除数据库(删除关联的数据文件)。
平衡器完成动过碎片所有大块之后,你已经处理了dbsToMove
,removeShard
就可以完成。removeShard
再次运行将返回类似于以下内容的输出: