Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Migrar intervalos em um cluster fragmentado

Nesta página

  • Alterar fluxos e documentos órfãos

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 moveRange com os campos _secondaryThrottle e writeConcern para determinar quando o balanceador prossegue com o próximo documento no intervalo de migração.

  • Use o comando moveRange com os campos secondaryThrottle e writeConcern para determinar quando o balanceador prossegue com o próximo documento no intervalo de migração.

Consulte moveRange e moveRange para obter detalhes.

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.

← Gerenciar balancer de cluster fragmentado