Menu Docs
Página inicial do Docs
/ /

Solucionar problemas de migrações de partes travadas

Clusters podem encontrar situações em que as migrações de partes param ou em que uma ou mais partes 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 partes paralisadas e partes jumbo, 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 partes jumbo.

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 revisar a distribuição de partes em fragmentos, executar:

sh.status(true)

Procure:

  • Grandes diferenças no número de partes por fragmento

  • partes marcadas como jumbo

Observação

Uma parte marcada como jumbo não pode ser migrada pelo balanceador até que seja divisão ou reduzido de tamanho.

Revise os logs do servidor de configuração para entradas relacionadas ao balanceamento ou migração de parte. Procure mensagens indicando:

  • Novas tentativas de migração

  • Migrações abortadas

  • Partes marcadas como jumbo

  • Falhas durante as fases de confirmação ou exclusão da migração

Nos nós de shards, revise os registros para:

  • Bloqueio 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

Uma parte se torna jumbo quando excede o tamanho configurado da parte e não pode ser divisão automaticamente.

A partir de mongos:

sh.status(true)

Localize partes rotuladas como jumbo.

As partes divisíveis contêm vários valores da chave de fragmento 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 aprender quando a divisão manual é apropriada, consulte Dividir partes em um cluster.

Partes 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 partes jumbo, consulte Limpar sinalizador jumbo .

Se a chave de fragmento tiver baixa cardinalidade ou seguir um padrão monotonicamente crescente, as partes poderão crescer desigualmente e resistir ao equilíbrio.

Para mitigar:

  • Revise o padrão de chave de fragmento usado pela coleção.

  • Determine se a maioria das gravações tem como alvo uma faixa limitada de chaves de shard. Se os valores da chave de fragmento de alta frequência estiverem fazendo com que as gravações se concentrem em um único fragmento, consulte Solução de problemas de chaves de fragmento.

  • Considere refragmentar a coleção usando uma chave de fragmento distribuída mais uniformemente.

Consulte Escolher uma chave de fragmento para obter as melhores práticas.

Se o balanceador estiver desabilitado, as migrações de partes 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 índice ou pesadas cargas de trabalho de gravação podem atrasar ou bloquear migrações de partes.

Para reduzir a contenção:

  • Identifique operações de longa duração:

    db.currentOp()
  • Balanceamento do agendar durante períodos de menor atividade de gravar.

  • Garanta que haja espaço em disco suficiente disponível em todos os fragmentos.

Observação

A migração de partes 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 partes concluídas com sucesso.

  • Nenhuma parte permanece marcada como jumbo.

  • A distribuição de partes entre os fragmentos 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 fragmento para coleções afetadas

  • Versão do MongoDB

  • Descrição da topologia do cluster

  • Saída de sh.getShardedDataDistribution() para contagem de parte e tamanho dos dados por fragmento

Voltar

Refragmentação para adicionar e remover fragmentos

Nesta página