Na maioria das circunstâncias, você deve permitir que obalanceador automático migre blocos entre fragmentos. No entanto, em alguns casos, talvez você queira migrar chunks manualmente:
Ao pré-dividir uma collection vazia, migre os chunks manualmente para distribuí-los uniformemente pelos shards. Use a pré-divisão em situações limitadas para dar suporte à ingestão de dados em massa.
Se o balanceador em um cluster ativo não puder distribuir blocos dentro da janela de balanceamento, você precisará migrar os blocos manualmente.
Para migrar manualmente as faixas, use o comando moveChunk
.
Para obter mais informações sobre como o balanceador automático move intervalos entre fragmentos, consulte Balanceador de cluster.
Exemplo
Migrar um único chunk
O exemplo a seguir pressupõe que o campo username
seja a chave de shard para uma collection chamada users
no banco de banco de dados myapp
e que o valor smith
exista dentro do chunk a ser migrado. Migre o chunk usando o seguinte comando em mongosh
.
db.adminCommand( { moveChunk : "myapp.users", find : {username : "smith"}, to : "mongodb-shard3.example.net" } )
Este comando move o chunk que inclui o valor da chave de shard " Smith " para o shard denominado mongodb-shard3.example.net
. O comando bloqueará até que a migração seja concluída.
Dica
Para retornar uma lista de shards, utilize o comando listShards
.
Exemplo
Migre uniformemente os blocos
Para migrar uniformemente os blocos para a coleção myapp.users
, coloque cada bloco de prefixo no próximo fragmento do outro e execute os seguintes comandos no 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]}) } }
Consulte Criar chunks em um cluster fragmentado para obter uma introdução à pré-divisão.
O comando moveChunk
tem o parâmetro: _secondaryThrottle
e o parâmetro writeConcern
que determina quando o balanceador prossegue com o próximo documento no bloco de migração. Consulte o comando moveChunk
para obter detalhes.