Migrar partes em um cluster fragmentado
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.
Para obter mais informações sobre como ajustar a migração, consulte chunkMigrationConcurrency
.
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.