Todos os produtos
Search
Central de documentação

ApsaraDB for MongoDB:Gerencie o balancer

Última atualização: Jul 04, 2026

O balancer distribui dados entre os nós de shard em uma instância de cluster com sharding do ApsaraDB for MongoDB. Verifique o status do balancer, agende uma janela de tempo ativa ou ative e desative o recurso.

Nota

Os exemplos neste tópico usam o mongo shell. Comandos e saídas podem variar em outras ferramentas.

Como funciona

O balancer monitora a distribuição de dados nos nós de shard e migra dados automaticamente. O comportamento varia conforme a versão do mecanismo de banco de dados.

MongoDB 5.0 e anteriores

O balancer rastreia a quantidade de chunks por nó de shard. Quando a diferença atinge o limiar de migração, ele migra chunks (moveChunk) para reequilibrar o cluster.

Versão do mecanismo de banco de dados

Limiar de migração

MongoDB 4.2, 4.4, 5.0

1

MongoDB 3.4 (descontinuado), MongoDB 4.0

Padrão: 2. Reduzido para 1 se o total de chunks for < 20 ou se os chunks migrados anteriormente forem < 20

MongoDB 3.2 (descontinuado)

Total de chunks < 20: limiar é 2. Total de chunks 20--80: limiar é 4. Total de chunks >= 80: limiar é 8

MongoDB 6.0

Em vez de contar chunks, o balancer monitora o tamanho dos dados por coleção em cada shard. Se a diferença de tamanho entre dois shards de uma coleção exceder 384 MB (três vezes o tamanho padrão do chunk), ele divide os dados por tag de shard e os migra usando moveRange.

Para verificar o equilíbrio dos dados, execute getShardDistribution() e concentre-se no tamanho dos dados, não na contagem de chunks.

Nota

Após atualizar para a V6.0 (versão secundária 7.0.1) ou posterior, o sh.status() pode indicar que a contagem de chunks entre os shards deixou de estar equilibrada ou que cada shard possui apenas um único chunk. Esse é o comportamento esperado do novo balancer. Para mais detalhes, consulte Contagem de chunks desequilibrada entre shards após uma atualização do MongoDB.

Observações de uso

  • Suportado apenas para instâncias de cluster com sharding.

  • Por padrão, o balancer opera continuamente (janela ativa de 24 horas).

  • A migração de chunks consome recursos e pode degradar o desempenho. Agende a janela ativa para horários de baixa demanda.

Verifique o status do balancer

Antes de desativar o balancer, verifique se nenhuma migração está em andamento.

  1. Conecte-se à instância de cluster com sharding usando o mongo shell.

  2. Execute o seguinte comando:

       sh.isBalancerRunning()
  3. Interprete o resultado com base no tipo de retorno: Valor de retorno Map Algumas versões do mongo shell retornam um objeto Map. Verifique o campo inBalancerRound conforme documentado em sh.isBalancerRunning().

    Valor de retorno Boolean

    Valor

    Significado

    false

    O balancer está ocioso. É seguro desativá-lo.

    true

    O balancer está migrando chunks. Não o desative para evitar inconsistência de dados.

    **Valor de inBalancerRound**

    Significado

    false

    O balancer está ocioso. É seguro desativá-lo.

    true

    O balancer está migrando chunks. Não o desative para evitar inconsistência de dados.

       {
         mode: 'full',
         inBalancerRound: false,
         numBalancerRounds: Long("1143"),
         ok: 1,
         '$clusterTime': {
           clusterTime: Timestamp({ t: 1639753724, i: 3 }),
           signature: {
             hash: Binary(Buffer.from("0000000000000000000000000000000000000000", "hex"), 0),
             keyId: Long("0")
           }
         },
         operationTime: Timestamp({ t: 1639753724, i: 3 })
       }

Defina uma janela de tempo ativa

Restrinja o balancer a horários específicos para reduzir o impacto no desempenho durante períodos de pico.

  1. Conecte-se à instância de cluster com sharding usando o mongo shell.

  2. Mude para o banco de dados config:

       use config
  3. Defina a janela de tempo ativa. Substitua os espaços reservados pelos seus valores. Exemplo: Execute o balancer diariamente das 01:00 às 03:00:

    Nota

    Os horários seguem o fuso horário local da região da instância.

    Espaço reservado

    Descrição

    Formato

    <start-time>

    Hora de início da janela de tempo ativa

    HH:MM (HH: 00--23, MM: 00--59)

    <stop-time>

    Hora de término da janela de tempo ativa

    HH:MM (HH: 00--23, MM: 00--59)

       db.settings.update(
          { _id: "balancer" },
          { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } },
          { upsert: true }
       )
       db.settings.update(
          { _id: "balancer" },
          { $set: { activeWindow : { start : "01:00", stop : "03:00" } } },
          { upsert: true }
       )
  4. Execute sh.status() para verificar. A saída mostra a janela de tempo ativa:

Remova a janela de tempo ativa

Para restaurar o balanceamento contínuo, remova a janela de tempo ativa:

db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })

Ative o balancer

Ativar o balancer inicia imediatamente a migração de dados caso o sharding esteja configurado, consumindo recursos da instância. Realize este procedimento em horários de baixa demanda.

  1. Conecte-se à instância de cluster com sharding usando o mongo shell.

  2. Mude para o banco de dados config:

       use config
  3. Ative o balancer:

       sh.setBalancerState(true)

Desative o balancer

Nota

Um balancer desativado interrompe a migração de dados entre os nós de shard, o que pode causar desequilíbrio de dados.

  1. Conecte-se à instância de cluster com sharding usando o mongo shell.

  2. Mude para o banco de dados config:

       use config
  3. Verifique se o balancer está migrando dados. Interprete o valor de retorno conforme descrito em Verifique o status do balancer.

    • Se o resultado for false (ou inBalancerRound: false para valores de retorno Map), prossiga para a próxima etapa.

    • Caso o resultado seja true (ou inBalancerRound: true), aguarde a conclusão da migração. Desativar o balancer durante uma migração pode causar inconsistência de dados.

       sh.isBalancerRunning()
  4. Quando o balancer estiver ocioso, desative-o:

       sh.stopBalancer()

Referências