Definição
commitShardRemovalRemove um fragmento de um cluster.
Para executar este comando, você deve primeiro drenar o fragmento com o comando
startShardDraining. Este comando diz ao balanceador para mover partes do fragmento para outros fragmentos no cluster. Você também deve mover manualmente quaisquer bancos de dados que utilizam o fragmento como fragmento primário e coleções não fragmentadas armazenadas no fragmento antes de executar o comandocommitShardRemoval.O comando retorna um erro se o fragmento não for completamente drenado ou se contiver um banco de dados ou uma coleção não fragmentada. Se o fragmento for drenado e todos os bancos de dados e coleções não fragmentadas migrarem do fragmento, o comando retornará
ok.Para iniciar a drenagem de um fragmento, consulte o comando
startShardDraining.Para verificar o status de um fragmento de drenagem, consulte o comando
shardDrainingStatus.Para interromper a drenagem de um fragmento, consulte o comando
stopShardDraining.Novidades na versão 8.3.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Observação
Este comando não é suportado no MongoDB Atlas. Consulte Modificar seu Atlas Cluster Sharded para adicionar ou remover shards do seu Atlas cluster.
Sintaxe
O comando tem a seguinte sintaxe:
db.adminCommand( { commitShardRemoval: <shard> } )
Comportamento
Requisitos de acesso
Se você tiver authorization habilitado, deverá ter a função clusterManager ou qualquer função que inclua a ação removeShard .
Requisitos de migração de reconhecimento de data center
Cada banco de dados em um cluster fragmentado tem um fragmento primário. Se o fragmento que você deseja drenar também for o primário de um dos bancos de dados do cluster, mova manualmente os bancos de dados de seu fragmento primário para um novo fragmento depois de migrar todos os dados do fragmento.
Se houver um banco de dados que usa o fragmento que você deseja usar como primário, o comando commitShardRemoval retornará um erro.
Para obter detalhes, consulte o comando movePrimary e Remover fragmentos de um cluster compartilhado para obter mais informações.
Requisitos de migração de coleção
As coleções não fragmentadas são armazenadas em fragmentos individuais. Se uma dessas coleções estiver no fragmento que você deseja remover, primeiro você deverá migrar a coleção para um fragmento diferente.
Se houver uma coleção não fragmentada armazenada no fragmento que você deseja remover, o comando commitShardRemoval retornará um erro.
Para migrar uma collection não fragmentada, consulte o comando moveCollection.
Exemplos
Para iniciar a drenagem de um shard, use o método db.adminCommand() para executar o comando startShardDraining:
db.adminCommand( { startShardDraining: "shard04" } )
Para verificar o status da operação de drenagem, use o comando shardDrainingStatus:
db.adminCommand( { shardDrainingStatus: "shard04" } )
{ "msg" : "draining completed successfully", "state" : "drainingComplete", "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1771839836, 139), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1771839836, 139) }
Se a saída mostrar qualquer banco de dados no campo dbsToMove, use o comando movePrimary para movê-lo para um fragmento diferente.
Se a saída mostrar quaisquer collections não fragmentadas no campo collectionsToMove, use o comando moveCollection para movê-las para um fragmento diferente.
Quando shardDrainingStatus mostra { state:
"drainingComplete" }, o balanceador terminou de mover chunks para fora do fragmento. Agora você pode remover o fragmento:
db.adminCommand( { commitShardRemoval: "shard04" } )
{ "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1771840037, 12), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1771840037, 12) }