Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Document Database Service/ Guia de usuário/ Ajuste de desempenho/ Desequilíbrio de carga de instâncias de cluster
Atualizado em 2025-08-07 GMT+08:00

Desequilíbrio de carga de instâncias de cluster

É comum que a carga seja desequilibrada entre nós shard em uma instância de cluster. Se a chave de partição for selecionada incorretamente, nenhum pedaço for predefinido e a velocidade de balanceamento de carga entre os nós shard for menor que a velocidade de inserção de dados, poderá ocorrer um desequilíbrio de carga.

Esta seção descreve como corrigir o desequilíbrio de carga.

Localização de falha

  1. Conecte-se a um banco de dados a partir do cliente.
  2. Execute o seguinte comando para verificar as informações de shard:

    sh.status()

    mongos> sh.status() 
     \--- Sharding Status --- 
       sharding version: { 
             "_id" : 1, 
             "minCompatibleVersion" : 5, 
             "currentVersion" : 6, 
             "clusterId" : ObjectId("60f9d67ad4876dd0fe01af84") 
       } 
       shards: 
             {  "_id" : "shard_1",  "host" : "shard_1/172.16.51.249:8637,172.16.63.156:8637",  "state" : 1 } 
             {  "_id" : "shard_2",  "host" : "shard_2/172.16.12.98:8637,172.16.53.36:8637",  "state" : 1 } 
       active mongoses: 
             "4.0.3" : 2 
       autosplit: 
             Currently enabled: yes 
       balancer: 
             Currently enabled:  yes 
             Currently running:  yes 
             Collections with active migrations: 
                     test.coll started at Wed Jul 28 2021 11:40:41 GMT+0000 (UTC) 
             Failed balancer rounds in last 5 attempts:  0 
             Migration Results for the last 24 hours: 
                     300 : Success 
       databases: 
             {  "_id" : "test",  "primary" : "shard_2",  "partitioned" : true,  "version" : {  "uuid" : UUID("d612d134-a499-4428-ab21-b53e8f866f67"),  "lastMod" : 1 } } 
                     test.coll 
                             shard key: { "_id" : "hashed" } 
                             unique: false 
                             balancing: true 
                             chunks: 
                                     shard_1 20 
                                     shard_2 20
    • databases lista os bancos de dados para os quais você ativa enableSharding.
    • test.coll é o namespace da coleção. test indica o nome do banco de dados onde a coleção está localizada e coll indica o nome da coleção para a qual a fragmentação está ativada.
    • shard key é a chave de partição da coleção anterior. _id: indica que a partição está com hash baseado em _id. _id: -1 indica que a partição está fragmentada com base no intervalo de _id.
    • chunks indica a distribuição de partições.

  3. Analise as informações da partição com base no resultado da consulta em 2.

    1. Se nenhuma informação de partição for consultada, as coleções não serão fragmentadas.

      Execute o seguinte comando para ativar a fragmentação:

      mongos> sh.enableSharding("<database>") 
      mongos> use admin 
      mongos> db.runCommand({shardcollection:"<database>.<collection>",key:{"keyname":<value> }})
    2. Se uma chave de partição imprópria for selecionada, a carga poderá estar desequilibrada. Por exemplo, se um grande número de solicitações for processado em uma faixa de partições, a carga nessas partições será mais pesada do que em outras partições, causando desequilíbrio de carga.

      Você pode redesenhar a chave de estilhaço, por exemplo, alterando fragmentação à distância para fragmentação de hash.

      mongos> db.runCommand({shardcollection:"<database>.<collection>",key:{"keyname":<value> }})
    3. Se uma grande quantidade de dados for inserida e o volume de dados exceder a capacidade de carga de uma única partição, ocorrerá desequilíbrio da partição e o uso de armazenamento da partição principal é muito alto.

      Você pode executar o seguinte comando para verificar a conexão de rede do servidor e verificar se a quantidade de dados transmitidos por cada adaptador de rede atinge o limite superior.

      sar -n DEV 1  //1 is the interval.
      Average: IFACE  rxpck/s  txpck/s    rxkB/s    txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 
      Average:    lo  1926.94  1926.94  25573.92  25573.92    0.00    0.00     0.00    0.00 
      Average:  A1-0     0.00     0.00      0.00      0.00    0.00    0.00     0.00    0.00 
      Average:  A1-1     0.00     0.00      0.00      0.00    0.00    0.00     0.00    0.00 
      Average:  NIC0     5.17     1.48      0.44      0.92    0.00    0.00     0.00    0.00 
      Average:  NIC1     0.00     0.00      0.00      0.00    0.00    0.00     0.00    0.00 
      Average:  A0-0  8173.06 92420.66  97102.22 133305.09    0.00    0.00     0.00    0.00 
      Average:  A0-1 11431.37  9373.06 156950.45    494.40    0.00    0.00     0.00    0.00 
      Average:  B3-0     0.00     0.00      0.00      0.00    0.00    0.00     0.00    0.00 
      Average:  B3-1     0.00     0.00      0.00      0.00    0.00    0.00     0.00    0.00
      • rxkB/s é o número de KBs recebidos por segundo.
      • txkB/s é o número de KBs enviados por segundo.

      Após a conclusão da verificação, pressione Ctrl+Z para sair.

      Se a carga de rede for muito alta, analise as instruções MQL, otimize o roteiro, reduza o consumo de largura de banda e aumente as especificações para expandir a taxa de transferência da rede.

      • Verifique se há coleções fragmentadas que não carregam ShardKey. Nesse caso, as solicitações são transmitidas, o que aumenta o consumo de largura de banda.
      • Controle o número de threads simultâneos no cliente para reduzir o tráfego de largura de banda da rede.
      • Se o problema persistir, aumente as especificações da instância em tempo hábil. Os nós de alta especificação podem fornecer maior taxa de transferência de rede.