Definição
removeShardAviso
A partir do MongoDB 8.3, o comando
removeShardestá 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
removeShardpara 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.dbPathde todos os nós do fragmento para remover os arquivos do fragmento antes de poder adicioná-lo novamente.
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
This command is not supported in MongoDB Atlas. See Modify your Atlas Sharded Cluster to add or remove shards from your Atlas cluster.
Sintaxe
O comando tem a seguinte sintaxe:
db.adminCommand( { removeShard : <shardToRemove> } )
Comportamento
Nenhum backup de cluster durante a remoção de fragmentos
Você não pode fazer backup dos dados do cluster durante a remoção de fragmentos.
Operações removeShard simultâneas
You can have more than one removeShard operation in progress.
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 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.
Balanceamento de partes
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.
Escreva preocupação
mongos converts the write concern of the removeShard command to "majority".
Fluxos de alterações
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.
Operações de DDL
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.
Exemplo
From mongosh, the removeShard operation resembles the following:
db.adminCommand( { removeShard : "bristol01" } )
Replace bristol01 with the name of the shard to remove. When you run removeShard, the command returns with a message that resembles the following:
{ "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 ("drenagem") partes do shard chamado bristol01 para outros shards no cluster. Essas migrações acontecem lentamente para evitar a colocação de carga indevida no cluster.
If you run the command again, removeShard returns the current status of the process. For example, if the operation is in an ongoing state, the command returns an output that resembles the following:
{ "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 |
|---|---|
| Número total de chunks restantes atualmente no shard. |
| 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 |
| Do número total de Se o Depois que a sinalização |
| Número total de collections não fragmentadas que você precisa mover do shard. |
| Número estimado de bytes restantes no shard em processo de remoção. |
Ao executar transitionToDedicatedConfigServer, a saída removeShard pode incluir os seguintes campos. Esses campos aparecem somente depois que o balanceador tiver movido todas as partes e bancos de dados do servidor de configuração:
Campo | Descrição |
|---|---|
| O número de exclusões de faixa pendentes restantes no shard que está sendo removido. |
| A primeira coleção não vazia no shard em processo de remoção. |
Continue checking the status of the removeShard command (that is, rerun the command) until the number of chunks remaining is 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.
After the balancer completes moving all chunks off the shard and you have handled the dbsToMove and collectionsToMove, removeShard can finish. Running removeShard again returns output that resembles the following:
{ "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") } } }