定义
shardDrainingStatus显示排干分片的状态,即负载均衡器是否仍在将数据段移动到集群中的其他分片,或者该进程已完成。
如果分片不存在,该命令将返回错误,否则将返回排干操作的状态。
要开始排干分片,请参阅
startShardDraining命令。要停止排干分片,请参阅
stopShardDraining命令。要删除已排空的分片,请参阅
commitShardRemoval命令。8.3版本新增。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
注意
MongoDB Atlas不支持此命令。请参阅修改Atlas分片集群以在Atlas 集群中添加或删除分片。
语法
该命令具有以下语法:
db.adminCommand( { shardDrainingStatus: <shard> } )
输出字段
此命令返回以下输出:
字段 | 类型 | 说明 |
|---|---|---|
| 字符串 | 提供负载负载均衡器当前正在执行的排干操作。 |
| 字符串 | 提供排干操作的状态。 |
| 字符串 | 指示排干分片。 |
| 文档 | 显示负载均衡器为清空分片而必须执行的剩余任务。 |
| long | 表示仍在分片上的数据段数。 |
| long | 指示仍在分片上的数据库数量。 |
| long | 表示仍在分片上的大数据段的数量。 |
| long | 表示仍在分片上的集合数量。 |
| 字符串 | 为用户提供附加消息。 |
| 阵列 | 指示排干分片用主分片的数据库。从集群中删除分片之前,必须使用 |
| 阵列 | 表示存储在排干分片上的未分片集合。从集群中删除分片之前,必须使用 |
行为
访问要求
如果已启用authorization ,则必须具有clusterManager角色或任何包含removeShard操作的角色。
数据库迁移要求
分片集群中的每个数据库都有一个主分片。如果您要排空的分片也是集群数据库之一的主节点 (primary node in the replica set),则在迁移分片的所有数据后,您必须手动将数据库移动到新分片。有关更多信息,请参阅movePrimary 命令和从分片集群中删除分片。
集合迁移要求
未分片集合存储在单个分片上。如果其中一个集合位于要删除的分片上,则必须先将该集合迁移到其他分片。
要迁移未分片集合,请参阅moveCollection 命令。
示例
要开始排干分片,请使用db.adminCommand() 方法运行startShardDraining 命令:
db.adminCommand( { startShardDraining: "shard04" } )
要检查排干操作的状态,请使用 shardDrainingStatus 命令:
db.adminCommand( { shardDrainingStatus: "shard04" } )
{ msg: "draining ongoing", state: "ongoing", remaining: { chunks: Long(2), dbs: Long(2), jumboChunks: Long(0), collectionsToMove: Long(2) }, shard: "shard04", note: "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove", dbsToMove: [ "fizz", "buzz" ], collectionsToMove: [ "fizz.coll1", "buzz.coll1" ], ok: 1, operationTime: Timestamp(1575399086, 1655), $clusterTime: { clusterTime: Timestamp(1575399086, 1655), signature: { hash: BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="), keyId: Long("6766255701040824328") } } }