Clusters fragmentados podem encontrar situações em que as migrações de chunks param ou em que um ou mais chunks se tornam jumbo. Quando isso ocorre, o balanceador não pode distribuir uniformemente os dados entre os shards. Isso pode resultar em utilização desigual de recursos e desempenho degradado do cluster.
Esta página descreve as causas comuns de migrações de chunks paralisadas e jumbo chunks, juntamente com etapas para diagnosticar e resolver essas condições. Se o problema persistir após concluir as etapas abaixo, entre em contato com o Suporte técnico.
Verificações de pré-requisitos
Verifique se seu cluster é afetado por migrações paralisadas ou jumbo chunks.
Verifique o estado do balancer
A partir de uma instância do mongos, execute:
sh.getBalancerState()
Se esse método retornar true, mas a distribuição de dados permanecer desigual, será necessária uma pesquisa adicional.
Você também pode revisar informações detalhadas do balanceador :
db.adminCommand({ balancerStatus: 1 })
Verificar distribuição de chunk
Para analisar a distribuição de chunks em shards, execute:
sh.status(true)
Procure:
Grandes diferenças no número de chunks por fragmento
chunks marcados como
jumbo
Observação
Um chunk marcado como jumbo não pode ser migrado pelo balanceador até que seja divisão ou reduzido de tamanho.
Verifique as mensagens de registro
Registros do servidor de configuração
Revise os registros do servidor de configuração para entradas relacionadas ao balanceamento ou migração de chunk. Procure mensagens indicando:
Novas tentativas de migração
Migrações abortadas
Chunks marcados como jumbo
Falhas durante as fases de confirmação ou exclusão da migração
Registros de fragmentos
Nos nós de shards, revise os registros para:
Bloquear tempos limite de aquisição
Atraso de replicação que afeta a migração
Erros de espaço em disco
Falhas na etapa de migração
Problemas e Resoluções Comuns
Jumbo chunks impedem a migração
Um chunk se torna jumbo quando excede o tamanho configurado do chunk e não pode ser divisão automaticamente.
Identificar chunks jumbo
A partir de mongos:
sh.status(true)
Localize chunks rotulados como jumbo.
Resolver chunks jumbo
Os chunks divisíveis contêm vários valores de chave de shard exclusivos e podem ser divisão}. Para resolver um parte jumbo divisível, divisão o manualmente:
sh.splitAt("database.collection", { shardKeyField: <value> })
Em seguida, reinicie o balanceador , se necessário:
sh.startBalancer()
Para saber quando a divisão manual é apropriada, consulte Dividir chunks em um cluster fragmentado.
Blocos indivisíveis representam um único valor de chave de fragmento exclusivo e não podem ser divisão. Para resolver um parte jumbo indivisível :
Refine a chave de shard usando
refineCollectionShardKeypara adicionar um campo de sufixo , tornando o chunk divisível.Consulte Blocos divisíveis.Refragmente a collection usando uma chave de shard distribuída de forma mais uniforme. Consulte Refragmentar uma collection.
Para obter mais detalhes sobre como resolver jumbo chunks, jumbo consulte Limpar sinalizador .
Distribuição de chave de shard ineficaz
Se a chave de fragmento tiver baixa cardinalidade ou seguir um padrão monotonicamente crescente, os pedaços poderão crescer desigualmente e resistir ao equilíbrio.
Para mitigar:
Revise o padrão de chave de shard usado pela collection.
Determine se a maioria das gravações tem como alvo um intervalo limitado de chaves de shard. Se os valores de chave de shard de alta frequência estiverem fazendo com que as gravações se concentrem em um único shard, consulte Solução de problemas de chaves de shard.
Considere refragmentar a coleção usando uma chave de shard distribuída mais uniformemente.
Consulte Escolher uma chave de shard para obter as práticas recomendadas.
Balanceador desativado ou pausado
Se o balanceador estiver desabilitado, as migrações de chunks não ocorrerão.
Verifique o estado do balanceador :
sh.getBalancerState()
Se estiver desativado, habilite-o:
sh.startBalancer()
Consulte Balanceador de Cluster Fragmentado para obter detalhes adicionais sobre o comportamento do balanceador .
Migração bloqueada por operações em andamento
Operações de longa duração, construções de índices ou volumes de trabalho de escrita pesados podem atrasar ou bloquear migrações de chunks.
Para reduzir a contenção:
Identifique operações de longa duração:
db.currentOp() Balanceamento do agendamento durante períodos de menor atividade de gravação.
Garanta que haja espaço em disco suficiente disponível em todos os shards.
Observação
A migração de chunks envolve clonagem de dados e uma fase de exclusão. Espaço em disco insuficiente ou alto atraso de replicação podem atrasar essas fases.
Verificar resolução
Depois de resolver o problema:
Migrações de chunks concluídas com sucesso.
Nenhum chunk permanece marcado como
jumbo.A distribuição de chunks entre os shards se torna mais uniforme.
O balanceador permanece ativo e estável.
Verifique novamente a distribuição:
sh.status(true)
Diagnósticos a serem coletados para mais suporte
Se o problema persistir, colete o seguinte antes de entrar em contato com o Suporte técnico:
Saída de
sh.status(true)Saída de
db.adminCommand({ balancerStatus: 1 })Registros relevantes do servidor de configuração
Registros de fragmentos relevantes
Definição de chave de shard para collections afetadas
Versão do MongoDB
Descrição da topologia do cluster
Saída de
sh.getShardedDataDistribution()para contagem de chunk e tamanho dos dados por shard