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
- Conéctese a una base de datos desde el cliente.
- 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.
- Analice la información del fragmento basándose en el resultado de la consulta en 2.
- 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> }})
- 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> }})
- Si se determina un modo de sharding, no se puede cambiar fácilmente. El modo de sharding debe considerarse completamente en la fase de diseño.
- Para obtener más información acerca de cómo establecer fragmentos de datos, consulte ¿Cómo mejoro el rendimiento de la base de datos mediante la configuración de Sharding?
- 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.
- Si no se consulta ninguna información de fragmento, las colecciones no se fragmentan.