在 Sharded Cluster 中迁移块

在大多数情况下,您应该让自动平衡器碎片之间迁移。但是,您可能希望在以下几种情况下手动迁移块:

  • pre-splitting为空集合时,请手动迁移块以在分片中均匀分布它们。在有限的情况下使用 pre-splitting 来支持批量数据提取。

  • 如果 active cluster 中的 balancer 无法在平衡窗口中分发块,则必须手动迁移块。

要手动迁移块,请使用moveChunk命令。有关自动平衡器如何在分片之间移动块的更多信息,请参阅Cluster Balancer块迁移

小费

要 return 一个分片列表,请使用listShards命令。

均匀地迁移块

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]})
  }
}

有关 pre-splitting 的介绍,请参见在 Sharded Cluster 中创建块

moveChunk命令具有:_secondaryThrottle参数和writeConcern参数,用于确定平衡器何时继续迁移块中的下一个文档。有关详细信息,请参阅moveChunk命令。

警告 moveChunk 命令可能会产生以下错误消息: 当 clients 有太多打开游标来访问迁移块时,会发生这种情况。您可以等到游标完成其操作或手动关闭游标。