Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Document Database Service/ Guía del usuario/ Ajuste del rendimiento/ Desequilibrio de carga de instancias de clúster
Actualización más reciente 2023-02-21 GMT+08:00

Desequilibrio de carga de instancias de clúster

Es común que la carga esté desequilibrada entre los nodos de shard en una instancia de clúster. Si la clave de shard se selecciona incorrectamente, no hay chunk preestablecido y la velocidad de equilibrio de carga entre los nodos de shard es menor que la velocidad de inserción de datos, puede producirse un desequilibrio de carga.

Esta sección describe cómo solucionar el desequilibrio de carga.

Localización de fallas

  1. Conéctese a una base de datos desde el cliente.
  2. Ejecute el siguiente comando para comprobar la información 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
    • bases de datos enumera las bases de datos para las que se habilita enableSharding.
    • test.coll es el espacio de nombres de la colección. test indica el nombre de la base de datos donde se encuentra la colección, y coll indica el nombre de la colección para la que está habilitado el shard.
    • shard key es la clave shard de la colección anterior. _id: indica que el fragmento es hash basado en _id. _id: -1 indica que el fragmento se fragmenta en función del rango de _id.
    • chunks indican la distribución de los shards.

  3. Analice la información del fragmento basándose en el resultado de la consulta en 2.

    1. Si no se consulta ninguna información de fragmento, las colecciones no se fragmentan.

      Ejecute el siguiente comando para habilitar el fragmento:

      mongos> sh.enableSharding("<database>") 
      mongos> use admin 
      mongos> db.runCommand({shardcollection:"<database>.<collection>",key:{"keyname":<value> }})
    2. Si se selecciona una clave de shard incorrecta, la carga puede estar desequilibrada. Por ejemplo, si se procesa un gran número de solicitudes en un rango de shards, la carga en estos shards es más pesada que otros fragmentos, causando desequilibrio de carga.

      Puede rediseñar la clave de shard, por ejemplo, cambiando el shard a rango a fragmento hash.

      mongos> db.runCommand({shardcollection:"<database>.<collection>",key:{"keyname":<value> }})
    3. Si se inserta una gran cantidad de datos y el volumen de datos excede la capacidad de carga de un solo fragmento, se produce un desequilibrio del shard y el uso de almacenamiento del shard primario es demasiado alto.

      Puede ejecutar el siguiente comando para comprobar la conexión de red del servidor y si la cantidad de datos transmitidos por cada adaptador de red alcanza el límite 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 es el número de KB recibidos por segundo.
      • txkB/s es el número de KBs enviados por segundo.

      Una vez completada la comprobación, presione Ctrl+Z para salir.

      Si la carga de la red es demasiado alta, analice las sentencias MQL, optimice la hoja de ruta, reduzca el consumo de ancho de banda y proporcione especificaciones para ampliar el rendimiento de la red.

      • Comprueba si hay colecciones sharded que no lleven ShardKey. En este caso, se emiten solicitudes, lo que aumenta el consumo de ancho de banda.
      • Controle el número de subprocesos simultáneos en el cliente para reducir el tráfico de ancho de banda de la red.
      • Si el problema persiste, aumente las especificaciones de instancia de manera oportuna. Los nodos de alta especificación pueden proporcionar un mayor rendimiento de red.