Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Menu Docs
Página inicial do Docs
/ /

Solucionar problemas de migrações de chunks travadas

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.

Verifique se seu cluster é afetado por migrações paralisadas ou jumbo chunks.

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 })

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.

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

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

Um chunk se torna jumbo quando excede o tamanho configurado do chunk e não pode ser divisão automaticamente.

A partir de mongos:

sh.status(true)

Localize chunks rotulados como 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 :

Para obter mais detalhes sobre como resolver jumbo chunks, jumbo consulte Limpar sinalizador .

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.

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 .

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.

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)

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

Voltar

Refragmentação para adicionar e remover fragmentos

Nesta página