Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

removeShard (comando de banco de dados)

removeShard

Aviso

A partir do MongoDB 8.3, o comando removeShard está obsoleto e será removido em uma versão futura.

O processo de drenagem de fragmentos foi substituído pelos seguintes comandos:

Depois que o fragmento for drenado, você poderá removê-lo com o comando commitShardRemoval.

Para obter detalhes, consulte Remover fragmentos de um cluster fragmentado.

Remove um shard de um cluster fragmentado. Quando você executa removeShard, o MongoDB drena o fragmento usando o balanceador para mover os fragmentos do fragmento para outros fragmentos no cluster.

Observação

O balanceador deve estar habilitado para removeShard para ser concluído. Se o balanceador estiver desabilitado, o comando permanecerá no estado de drenagem e não será concluído, mesmo que você já tenha movido todos os dados para fora do fragmento.

Se o shard tiver collections não fragmentadas, você deverá drenar todas as collections não fragmentadas do shard. A partir do MongoDB 8.0, você pode usar sh.moveCollection() para mover collection não fragmentadas. Para obter detalhes sobre o procedimento de drenagem de um shard, consulte Remover fragmentos de um cluster fragmentado.

Depois que o fragmento é drenado, o MongoDB remove o fragmento do cluster.

Observação

Se quiser adicionar novamente um fragmento removido ao cluster fragmentado, você deverá limpar o storage.dbPath de todos os nós do fragmento para remover os arquivos do fragmento antes de poder adicioná-lo novamente.

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.

O comando tem a seguinte sintaxe:

db.adminCommand(
{
removeShard : <shardToRemove>
}
)

Você não pode fazer backup dos dados do cluster durante a remoção de fragmentos.

Você pode ter mais de uma operação em removeShard andamento.

Se você tiver authorization habilitado, deverá ter a função clusterManager ou qualquer função que inclua a ação removeShard .

Cada banco de dados de dados em um cluster fragmentado tem um fragmento primário. Se o fragmento que você deseja remover também for o principal de um dos bancos de dados do cluster, você deverá mover manualmente os bancos de dados para um novo fragmento após migrar todos os dados do fragmento. Consulte o comando movePrimary e Remover fragmentos de um cluster fragmentado para obter mais informações.

Quando você remove um fragmento em um cluster com uma distribuição desigual de fragmentos, o balanceador primeiro remove os fragmentos do fragmento de drenagem e, em seguida, equilibra a distribuição desigual de fragmentos restante.

mongos converte a preocupação de removeShard gravação do "majority" comando para.

A remoção de um shard pode fazer com que um cursor de fluxo de alteração aberto feche e o cursor de fluxo de alteração fechado pode não ser totalmente retomável.

Se você executar o removeShard enquanto o cluster executa uma operação DDL (operação que modifica uma collection como reshardCollection), o removeShard somente executará após a conclusão da operação DDL simultânea.

A partir mongosh de, a operação é semelhante ao removeShard seguinte:

db.adminCommand( { removeShard : "bristol01" } )

Substitua bristol01 pelo nome do shard a ser removido. Quando você executa, o comando retorna com uma mensagem semelhante à removeShard seguinte:

{
"msg" : "draining started successfully",
"state" : "started",
"shard" : "bristol01",
"note" : "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
"dbsToMove" : [
"fizz",
"buzz"
],
"collectionsToMove" : [
"fizz.coll1",
"buzz.coll1"
],
"ok" : 1,
"operationTime" : Timestamp(1575398919, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1575398919, 2),
"signature" : {
"hash" : BinData(0,"Oi68poWCFCA7b9kyhIcg+TzaGiA="),
"keyId" : Long("6766255701040824328")
}
}
}

O balanceador começa a migrar ("drenando") blocos do fragmento denominado bristol01 para outros fragmentos no cluster. Essas migrações ocorrem lentamente para evitar uma carga excessiva no cluster.

Se você executar o comando novamente, retornará o status atual do processo. Por exemplo, se a operação estiver emremoveShard um ongoing estado, o comando retornará uma saída semelhante à seguinte:

{
"msg" : "draining ongoing",
"state" : "ongoing",
"remaining" : {
"chunks" : Long(2),
"dbs" : Long(2),
"jumboChunks" : Long(0),
"collectionsToMove": Long(2)
},
"note" : "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
"dbsToMove" : [
"fizz",
"buzz"
],
"collectionsToMove" : [
"fizz.coll1",
"buzz.coll1"
],
"ok" : 1,
"operationTime" : Timestamp(1575399086, 1655),
"$clusterTime" : {
"clusterTime" : Timestamp(1575399086, 1655),
"signature" : {
"hash" : BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="),
"keyId" : Long("6766255701040824328")
}
}
}

Na saída, o campo remaining inclui os seguintes campos:

Campo
Descrição

chunks

Número total de chunks restantes atualmente no shard.

dbs

Número total de bancos de dados cujo shard primário é o shard. Estes bancos de dados são especificados no campo de saída dbsToMove.

jumboChunks

Do número total de chunks, o número que é jumbo.

Se o jumboChunks for maior que 0, aguarde até que apenas o jumboChunks permaneça no shard. Quando restarem apenas os parte jumbo, você deve limpar manualmente a bandeira jumbo antes que a drenagem possa ser concluída. Consulte Limpar bandeira jumbo.

Depois que a sinalização jumbo for limpa, o balanceador poderá migrar esses chunks. Para obter detalhes sobre o procedimento de migração, consulte Procedimento de migração de intervalo.

collectionsToMove

Número total de collections não fragmentadas que você precisa mover do shard.

estimatedRemainingBytes

Número estimado de bytes restantes no fragmento que está sendo removido.

Quando você executa transitionToDedicatedConfigServer, a saída removeShard pode incluir os seguintes campos. Esses campos aparecem somente após o balanceador ter movido todos os chunks e bancos de dados para fora do servidor de configuração:

Campo
Descrição

pendingRangeDeletions

O número de exclusões de intervalo pendentes restantes no fragmento que está sendo removido.

firstNonEmptyCollection

A primeira collection não vazia no shard que está sendo removida.

Continue verificando o status do comando removeShard (ou seja, execute novamente o comando) até que o número de blocos restantes seja 0.

{
"msg" : "draining ongoing",
"state" : "ongoing",
"remaining" : {
"chunks" : Long(0), // All chunks have moved
"dbs" : Long(2),
"jumboChunks" : Long(0),
"collectionsToMove": Long(2)
},
"note" : "you need to call moveCollection for collectionsToMove and afterwards movePrimary for the dbsToMove",
"dbsToMove" : [
"fizz",
"buzz"
],
"collectionsToMove" : [
"fizz.coll1",
"buzz.coll1"
],
"ok" : 1,
"operationTime" : Timestamp(1575400343, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1575400343, 1),
"signature" : {
"hash" : BinData(0,"9plu5B/hw4uWAgEmjjBP3syw1Zk="),
"keyId" : Long("6766255701040824328")
}
}
}

Depois que o balanceador drenar todos os fragmentos do fragmento, talvez seja necessário mover manualmente suas coleções e bancos de dados para fora do fragmento drenado.

Se a saída removeShard contiver collections no campo collectionsToMove, use moveCollection para mover essas collections para um shard diferente do shard de drenagem ou descartar as collections (o que exclui os arquivos de dados associados).

Se a saída removeShard contiver bancos de dados no campo dbsToMove, use movePrimary para esses bancos de dados ou solte os bancos de dados (o que exclui os arquivos de dados associados).

Observação

Para obter o melhor desempenho, mova suas coleções antes de mover seus bancos de dados.

Depois que o balanceador concluir a transferência de todos os chunks para fora do fragmento e você tiver lidado com dbsToMove e, poderá collectionsToMove removeShard ser concluído. A execução de novamente retorna uma saída semelhante à removeShard seguinte:

{
"msg" : "removeshard completed successfully",
"state" : "completed",
"shard" : "bristol01",
"ok" : 1,
"operationTime" : Timestamp(1575400370, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1575400370, 2),
"signature" : {
"hash" : BinData(0,"JjSRciHECXDBXo0e5nJv9mdRG8M="),
"keyId" : Long("6766255701040824328")
}
}
}