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

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 os intervalos manualmente, use o comando moveChunk .

Para obter mais informações sobre como o balanceador automático move os intervalos entre os fragmentos, consulte Balanceador de cluster.

Para obter mais informações sobre como ajustar a migração, consulte chunkMigrationConcurrency.

Exemplo

Migrar uma única parte

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 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 as partes para a collection myapp.users, coloque cada parte 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 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.

Aviso

O comando moveChunk pode produzir a seguinte mensagem de erro:

The collection's metadata lock is already taken.

Isso ocorre quando os clientes têm muitos cursor abertos que acessam a parte. Você pode esperar até que os cursor concluam suas operações ou fechar os cursor manualmente.

Voltar

Gerenciar balancer de cluster fragmentado

Próximo

Administração