迁移分片集群中的数据段
MongoDB5.0 已于 10 月2024 结束生命周期。不再支持此版本的文档。要升级5.0 部署,请参阅 MongoDB6 。0 升级程序。
在大多数情况下,您应该让自动 负载均衡器 在 分片 之间 迁移数据段。但是,在某些情况下,您可能需要手动迁移数据段:
要手动迁移范围,请使用 moveChunk
命令。
有关自动负载均衡器如何在分片之间移动范围的更多信息,请参阅集群负载均衡器。
有关调整迁移的更多信息,请参阅chunkMigrationConcurrency
。
例子
迁移单个数据块
以下示例假定字段username
是myapp
数据库中名为users
的集合的分分片键,并且值smith
存在于数据块迁移的数据段中。 在mongosh
中使用以下命令数据块数据段。
db.adminCommand( { moveChunk : "myapp.users", find : {username : "smith"}, to : "mongodb-shard3.example.net" } )
此命令将包含分片键值“ smith ”的数据段移动到名为mongodb-shard3.example.net
的分片。 该命令将阻塞,直到迁移完成。
提示
要返回分片列表,请使用listShards
命令。
例子
均匀迁移数据段
要均匀迁移myapp.users
集合的数据段,请将每个前缀数据段分片彼此的下一个分mongo 数据块 shell运行以下命令:
var shServer = [ "sh0.example.net", "sh1.example.net", "sh2.example.net", "sh3.example.net", "sh4.example.net" ]; for ( var x=97; x<97+26; x++ ){ for( var y=97; y<97+26; y+=6 ) { var prefix = String.fromCharCode(x) + String.fromCharCode(y); db.adminCommand({moveChunk : "myapp.users", find : {email : prefix}, to : shServer[(y-97)/6]}) } }
有关预分割的介绍,请参阅在分片集群中创建数据段。
moveChunk
命令具有: _secondaryThrottle
参数和writeConcern
参数,该参数确定负载均衡器何时继续处理迁移数据段中的下一个文档。 有关详细信息,请参阅moveChunk
命令。