在分片集群中迁移范围
在此页面上
在大多数情况下,您应该让自动 负载均衡器 在 分片 之间迁移 范围 。但是,在某些情况下,您可能需要手动迁移范围:
要手动迁移范围,请使用 moveChunk
或moveRange
命令。
有关自动负载均衡器如何在分片之间移动范围的更多信息,请参阅负载均衡器内部知识和范围迁移。
有关调整迁移的更多信息,请参阅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
collection的范围,请将每个前缀范围放在彼此的下一个分片上,并在 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]}) } }
有关预分片的介绍,请参阅在分片集群中创建范围。
使用带有
_secondaryThrottle
和writeConcern
字段的moveChunk
命令来确定负载均衡器何时继续处理迁移范围中的下一个文档。使用带有
secondaryThrottle
和writeConcern
字段的moveRange
命令来确定负载均衡器何时继续处理迁移范围中的下一个文档。
有关详细信息,请参阅moveChunk
和moveRange
。
变更流和孤立文档
从 MongoDB 5.3 开始,在范围迁移期间,不会为孤立文档的更新生成 change stream 事件。