定义
startShardDraining启动从分片排干数据段的进程,为从分片集群中删除该数据段做好准备。
当命令运行时,它会告诉负载均衡器您要清空给定的分片。然后,负载均衡器开始将数据段从该分片异步移动到集群中的其他分片。当负载均衡器完成此进程时,分片将不包含任何数据,可以从集群中安全地删除。
注意
startShardDraining必须启用负载均衡器, 才能将分片移出分片。如果禁用负载均衡器,则不会迁移任何数据段,并且shardDrainingStatus会继续报告分片上的剩余工作量。如果分片不存在,该命令将返回错误,否则返回
ok。要检查排干分片的状态,请使用
shardDrainingStatus命令。要停止分片,请参阅
stopShardDraining命令。要删除已排空的分片,请参阅
commitShardRemoval命令。8.3版本新增。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
注意
MongoDB Atlas不支持此命令。请参阅修改Atlas分片集群以在Atlas 集群中添加或删除分片。
语法
该命令具有以下语法:
db.adminCommand( { startShardDraining: <shardToDrain> } )
行为
访问要求
如果已启用authorization ,则必须具有clusterManager角色或任何包含removeShard操作的角色。
在分片清空期间没有集群备份
在排干分片,您无法备份集群。
并发清空分片操作
您一次可以进行多个分片排干操作。
数据库迁移要求
分片集群中的每个数据库都有一个主分片。如果您要排空的分片也是集群数据库之一的主节点 (primary node in the replica set),则在迁移分片的所有数据后,您必须手动将数据库移动到新分片。有关更多信息,请参阅movePrimary 命令和从分片集群中删除分片。
集合迁移要求
未分片集合存储在单个分片上。如果其中一个集合位于要删除的分片上,则必须先将该集合迁移到其他分片。
要迁移未分片集合,请参阅moveCollection 命令。
数据块均衡
当您排出数据块分布不均匀的集群中的分片,负载均衡器首先从排干的分片删除数据段,然后均衡剩余的不均匀数据块分布。
写关注
mongos将 命令的写关注(write concern)转换为 startShardDraining"majority"。
Change Streams
DDL 操作
如果您在集群执行startShardDraining DDL 操作(修改集合,如reshardCollection 的操作)时运行 ,则仅在并发 DDL 操作完成后才会执行分片排干。
示例
要开始排干分片,请使用db.adminCommand() 方法:
db.adminCommand( { startShardDraining: "shard04" } )