Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

在分片集群中迁移范围

在此页面上

  • 变更流和孤立文档

在大多数情况下,您应该让自动 负载均衡器 分片 之间迁移 范围 。但是,在某些情况下,您可能需要手动迁移范围:

  • 预分割空集合时,请手动迁移范围,将其均匀分布在各分片上。 在有限的情况下使用预分片来支持批量数据摄取。

  • 如果活动集群中的负载均衡器无法在负载均衡窗口内分配范围,则必须手动迁移范围。

要手动迁移范围,请使用 moveChunkmoveRange命令。

有关自动负载均衡器如何在分片之间移动范围的更多信息,请参阅负载均衡器内部知识和范围迁移。

有关调整迁移的更多信息,请参阅chunkMigrationConcurrency

例子

迁移单个范围

以下示例假定字段usernamemyapp数据库中名为users的集合的分片键,并且值smith存在于要迁移的范围内。 在 mongosh中使用以下命令迁移范围。

db.adminCommand( { moveChunk : "myapp.users",
find : {username : "smith"},
to : "mongodb-shard3.example.net" } )

此命令将包含分片键值 " smith " 的范围移动到名为mongodb-shard3.example.net的分片。 该命令将阻塞,直到迁移完成。

提示

要返回分片列表,请使用listShards命令。

例子

均匀迁移范围

要均匀迁移myapp.userscollection的范围,请将每个前缀范围放在彼此的下一个分片上,并在 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]})
}
}

有关预分片的介绍,请参阅在分片集群中创建范围

  • 使用带有_secondaryThrottlewriteConcern字段的moveChunk命令来确定负载均衡器何时继续处理迁移范围中的下一个文档。

  • 使用带有secondaryThrottlewriteConcern字段的moveRange命令来确定负载均衡器何时继续处理迁移范围中的下一个文档。

有关详细信息,请参阅moveChunkmoveRange

从 MongoDB 5.3 开始,在范围迁移期间,不会为孤立文档的更新生成 change stream 事件。

后退

管理