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
- Conecte-se a um banco de dados a partir do cliente.
- 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.
- Analise as informações da partição com base no resultado da consulta em 2.
- 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> }})
- 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> }})
- Se um modo de fragmentação for determinado, ele não pode ser alterado facilmente. O modo de fragmentação deve ser totalmente considerado na fase de projeto.
- Para obter detalhes sobre como definir partições de dados, consulte Como melhorar o desempenho do banco de dados configurando a fragmentação?
- 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.
- Se nenhuma informação de partição for consultada, as coleções não serão fragmentadas.