Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

迁移分片集群中的数据段

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

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

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

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

有关自动负载均衡器如何在分片之间移动范围的更多信息,请参阅集群负载均衡器。

有关调整迁移的更多信息,请参阅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.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命令。

警告

moveChunk命令可能会生成以下错误消息:

The collection's metadata lock is already taken.

当客户端有太多打开的游标访问权限数据块时,就会出现这种情况。 您可以等待游标完成其操作,也可以手动关闭游标。

后退

管理