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 reconhecimento de data center em um cluster fragmentado tem um fragmento primário. Se o fragmento que você deseja remover também for o primário de um dos reconhecimento de data center do cluster, você deverá mover manualmente os reconhecimento de data center para um novo fragmento após migrar todos os dados do fragmento. Consulte o comando movePrimary
e a seção Remover Fragmentos de um Cluster Fragmentado Existente 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
Uma remoção de fragmento 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.
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 o reconhecimento de data center para os quais bristol01
é o fragmento primário. Depois que todos os chunks tiverem sido drenados do fragmento, você deverá movePrimary
para o(s) banco(s) de dados ou, alternativamente, drop esses bancos de dados.
Observação
Se o fragmento que você está removendo não for o fragmento primário de nenhum banco de dados, a array dbsToMove
estará vazia e removeShard
poderá concluir a migração sem intervenção.
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") } } }