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

removeShard

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Comportamento
  • Exemplo
removeShard

Remove um shard de umcluster fragmentado fragmentado . Quando você executa removeShard, o MongoDB drena o fragmento usando o balanceador para mover os blocos do fragmento para outros fragmentos no cluster. Depois que o fragmento é drenado, o MongoDB remove o fragmento do cluster.

Esse comando está disponível em implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

Importante

Este comando não é suportado em M10+ clusters ou instâncias sem servidor. Para obter mais informações, consulte Comandos não suportados.

  • 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

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 removeShard em 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.

Dica

Veja também:

mongos converte a write concern do comando removeShard para "majority".

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, a operação removeShard é semelhante ao seguinte:

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

Substitua bristol01 pelo nome do shard a ser removido. Ao executar removeShard, o comando retorna com uma mensagem semelhante à seguinte:

{
"msg" : "draining started successfully",
"state" : "started",
"shard" : "bristol01",
"note" : "you need to drop or movePrimary these databases",
"dbsToMove" : [
"fizz",
"buzz"
],
"ok" : 1,
"operationTime" : Timestamp(1575398919, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1575398919, 2),
"signature" : {
"hash" : BinData(0,"Oi68poWCFCA7b9kyhIcg+TzaGiA="),
"keyId" : NumberLong("6766255701040824328")
}
}
}

O balanceador começa a migrar ("drenar") blocos do fragmento denominado bristol01 para outros fragmentos no cluster. Essas migrações acontecem lentamente para evitar a colocação de carga inadequada no cluster.

A saída inclui o campo dbsToMove indicando os bancos de dados para os quais bristol01 é o fragmento primário. Depois que o balanceador mover todos os pedaços e depois que todas as coleções forem movidas por moveCollection, você deverá movePrimary para o(s) banco de dados(s) de dados.

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

{
"msg" : "draining ongoing",
"state" : "ongoing",
"remaining" : {
"chunks" : NumberLong(2),
"dbs" : NumberLong(2),
"jumboChunks" : NumberLong(0)
},
"note" : "you need to drop or movePrimary these databases",
"dbsToMove" : [
"fizz",
"buzz"
],
"ok" : 1,
"operationTime" : Timestamp(1575399086, 1655),
"$clusterTime" : {
"clusterTime" : Timestamp(1575399086, 1655),
"signature" : {
"hash" : BinData(0,"XBrTmjMMe82fUtVLRm13GBVtRE8="),
"keyId" : NumberLong("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 fragmento. Quando restarem apenas a parte jumbo, você deverá 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.

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

{
"msg" : "draining ongoing",
"state" : "ongoing",
"remaining" : {
"chunks" : NumberLong(0), // All chunks have moved
"dbs" : NumberLong(2),
"jumboChunks" : NumberLong(0)
},
"note" : "you need to drop or movePrimary these databases",
"dbsToMove" : [
"fizz",
"buzz"
],
"ok" : 1,
"operationTime" : Timestamp(1575400343, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1575400343, 1),
"signature" : {
"hash" : BinData(0,"9plu5B/hw4uWAgEmjjBP3syw1Zk="),
"keyId" : NumberLong("6766255701040824328")
}
}
}

Depois que todas as partes tiverem sido drenadas do fragmento, se você tiver dbsToMove, você poderá movePrimary para esses reconhecimento de data center ou, alternativamente, drop os reconhecimento de data center (o que exclui os Data Federation associados).

Depois que o balancer concluir a transferência de todos os chunks para fora do shard e você tiver lidado com o dbsToMove, removeShard poderá ser concluído. A execução removeShard novamente retorna uma saída semelhante à 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" : NumberLong("6766255701040824328")
}
}
}

Voltar

refineCollectionShardKey