Use este procedimento para analisar a distribuição de dados fragmentados. Você pode usar essas informações para determinar se haverá uma grande quantidade de balanceamento em seu cluster.
Sobre esta tarefa
Este procedimento mostra como você pode:
Atualize seu cluster de 5.0 para 6.0.
Determine a distribuição de seus dados fragmentados no cluster usando o
$shardedDataDistributionestágio.Atualize suas configurações do balanceador , se necessário.
Antes de começar
Mantenha o balanceador desligado durante o processo de atualização e durante todo este procedimento. Depois de entender a igualdade de suas coleções sob a nova política de balanceamento, você poderá ativar o balanceador novamente.
Passos
Atualize seu cluster de 5.0 para 6.0.
Para atualizar seu cluster de 5.0 6.0para, consulte Atualizar um cluster fragmentado 6.0 para.
Conecte-se ao mongos usando o mongosh.
Você pode se conectar a qualquer mongos no cluster.
Analise a distribuição de dados no cluster.
Para entender como a distribuição de dados de suas coleções impacto o balanceamento, use o $shardedDataDistribution estágio de agregação.
Para retornar todas as métricas de distribuição de dados fragmentados, execute o seguinte:
db.aggregate([ { $shardedDataDistribution: { } } ])
Saída de exemplo:
[ { "ns": "test.names", "shards": [ { "shardName": "shard-1", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 }, { "shardName": "shard-2", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 } ] } ]
Se a diferença entre o fragmento com o maior ownedSizeBytes e o fragmento com o menor número de ownedSizeBytes estiver dentro do limite de migração, a coleta será considerada balanceada. Quando o balanceador está habilitado para essas collections, ele não emite migrações.
(Opcional) Configure o balanceador 6.0 em.
Se sua coleção estiver desequilibrada e você quiser controlar o comportamento do balanceador , poderá usar um ou ambos os métodos a seguir:
Configure o balanceador para estar ativo somente em determinados momentos,modificando a janela de balanceamento.
Restringa as operações de balanceamento a collections específicas desativando o balanceador nas collections.
Modificar a janela de balanceamento
Mudar para o banco de dados de configuração.
Emita o seguinte comando para alternar para o banco de dados
config.use config Defina os horários de início e término da janela de balanceamento.
Para definir a janela ativa, use o
updateOne()método:db.settings.updateOne( { _id: "balancer" }, { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } }, { upsert: true } ) Substitua
<start-time>e<end-time>por valores de tempo usando valores de hora e minuto de dois dígitos (ou seja,HH:MM) que especificam os limites inicial e final da janela de balanceamento.Para valores de
HH, utilize valores na faixa de hora variando de00a23.Para o valor
MM, use valores de minuto que variam de00a59.
Para clusters fragmentados autogerenciados, o MongoDB avalia os horários de início e parada em relação ao zona horário do membro primário no conjunto de réplicas do servidor de configuração .
Para o Atlas cluster, o MongoDB avalia os horários de início e parada em relação ao fuso horário UTC.
Observação
A janela do balanceador deve ser suficiente para concluir a migração de todos os dados inseridos durante o dia.
Como as taxas de inserção de dados podem mudar de acordo com os padrões de atividade e uso, certifique-se de que a janela de balanceamento selecionada seja suficiente para dar suporte às necessidades de sua implantação.
(Opcional) Certifique-se de que a exclusão do intervalo seja síncrona.
Use somente esta etapa se quiser restringir a exclusão do intervalo à janela de balanceamento.
Por padrão, o balanceador não espera que a fase de exclusão da migração em andamento seja concluída antes de iniciar a próxima migração de partes. Para que a fase de exclusão bloqueie o início da próxima migração de fragmento, você pode definir
_waitForDeletecomo true.Atualize o valor do
_waitForDeletena coleçãosettingsdo banco de dados doconfig. Por exemplo:use config db.settings.updateOne( { "_id" : "balancer" }, { $set : { "_waitForDelete" : true } }, { upsert : true } )
Desativação do balanceamento para collections específicas
Por padrão, toda coleção tem o balanceamento ativado.
Para desabilitar o balanceamento de uma coleção específica, conecte-se a um mongos com o shell mongosh sh.disableBalancing() e chame o método.
Este exemplo desabilita o equilíbrio na coleção students.grades:
sh.disableBalancing("students.grades")
O sh.disableBalancing() método aceita o namespace completo da coleção como seu parâmetro.
Reative o balanceador em seu cluster.
Use este procedimento se você tiver desabilitado o balancer e estiver pronto para reativá-lo:
Conecte a qualquer
mongosno cluster utilizando o shellmongosh.Comande uma das seguintes operações para habilitar o balanceador:
A partir da shell
mongosh, execute:sh.startBalancer() Observação
Para habilitar o balanceador a partir de um driver, use o comando BalancerStart no
adminbanco de dados , como mostrado a seguir:db.adminCommand( { balancerStart: 1 } ) A partir do MongoDB 6.0.3, a divisão automática de partes não é executada. Isso se deve a melhorias na política de balanceamento. Os comandos de divisão automática ainda existem, mas não executam uma operação. Para obter detalhes, consulte Alterações na política de balanceamento.
Nas versões MongoDB anteriores a 6.0.3, o
sh.startBalancer()também habilita a divisão automática para o cluster fragmentado.