Analisar a distribuição de dados fragmentados
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 dos dados fragmentados no cluster usando o
$shardedDataDistribution
está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 horários 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 banco de dados de configuração.
Emita o seguinte comando para alternar para o banco de 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 de00
a23
.Para o valor
MM
, use valores de minuto que variam de00
a59
.
Para clusters fragmentados autogerenciados, o MongoDB avalia os horários de início e parada em relação ao fuso zona do membro primário no conjunto de réplicas do servidor de configuração 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
_waitForDelete
como true.Atualize o valor do
_waitForDelete
na coleçãosettings
do banco de 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
mongos
no 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
admin
banco 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.