removeShard
Definição
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.
Compatibilidade
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
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.
removeShard
Operações simultâneas
Você pode ter mais de uma operação removeShard
em andamento.
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
converte a write concern do comando removeShard
para "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
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 Se o Depois que a sinalização |
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") } } }