Migrar intervalos em um cluster fragmentado
Nesta página
Na maioria das circunstâncias, você deve permitir que obalanceador automático migre intervalos entre os fragmentos. No entanto, em alguns casos, recomendamos migrar as faixas manualmente:
Ao pré-divisão uma collection vazia, migre os intervalos manualmente para distribuí-los uniformemente pelos fragmentos. Use a pré-divisão em situações limitadas para oferecer suporte à ingestão de dados em massa.
Se o balanceador em um cluster ativo não puder distribuir as faixas dentro da janela de balanceamento, você terá que migrar as faixas manualmente.
Para migrar os intervalos manualmente, use o comando moveChunk
ou moveRange
.
Para obter mais informações sobre como o balanceador automático move os intervalos entre os fragmentos, consulte Balanceador interno e migração de intervalo.
Para obter mais informações sobre como ajustar a migração, consulte chunkMigrationConcurrency
.
Exemplo
Migrar um único intervalo
O exemplo a seguir pressupõe que o campo username
seja a chave de shard para uma collection chamada users
no banco de dados myapp
e que o valor smith
exista dentro da faixa a ser migrada. Migre a faixa usando o seguinte comando em mongosh
.
db.adminCommand( { moveChunk : "myapp.users", find : {username : "smith"}, to : "mongodb-shard3.example.net" } )
Este comando move o intervalo que inclui o valor da chave de fragmento "ferramentas" para o fragmento chamado mongodb-shard3.example.net
. O comando será bloqueado até que a migração seja concluída.
Dica
Para retornar uma lista de shards, utilize o comando listShards
.
Exemplo
Migrar intervalos uniformemente
Para migrar uniformemente os intervalos da collection myapp.users
, coloque cada intervalo de prefixo no próximo fragmento do outro e execute os seguintes comandos no shell do mongo:
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 faixas em um cluster fragmentado para uma introdução à pré-divisão.
Use o comando
moveChunk
com os campos_secondaryThrottle
ewriteConcern
para determinar quando o balanceador prossegue com o próximo documento no intervalo de migração.Use o comando
moveRange
com os campossecondaryThrottle
ewriteConcern
para determinar quando o balanceador prossegue com o próximo documento no intervalo de migração.
Consulte moveChunk
e moveRange
para obter detalhes.
Alterar fluxos e documentos órfãos
A partir do MongoDB 5.3, durante a range migration, os eventosde change stream não são gerados para atualizações de documentos órfãos.