Saltar al contenido

¿Por qué hay un desequilibrio de memoria entre las particiones de mi clúster autoadministrado de ElastiCache para Valkey o ElastiCache para Redis OSS?

6 minutos de lectura
0

Mi clúster autoadministrado de Amazon ElastiCache para Valkey o Amazon ElastiCache para Redis con el modo de clúster habilitado tiene un uso de memoria desigual entre las particiones.

Descripción corta

De forma predeterminada, los clústeres de Valkey y Redis OSS con el modo de clúster habilitado intentan distribuir uniformemente el espacio de claves de la caché entre las particiones de un clúster. Para obtener más información, consulta Cómo trabajar con el modo de clúster en Amazon ElastiCache para Redis.

Los motivos siguientes pueden provocar un uso desequilibrado de la memoria, lo que hace que algunas particiones almacenen más datos que otras:

  • Distribución de claves desigual
  • Claves demasiado grandes
  • Particiones o claves de «acceso rápido»
  • Uso desigual de etiquetas hash
  • Aumento de los búferes de salida de los clientes

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Distribución de claves desigual

Si no distribuyes los espacios de hash de manera uniforme entre las particiones, es posible que algunas particiones manejen más claves que otros. Para resolver este problema, vuelve a equilibrar las ranuras del clúster.

Nota: La opción de reequilibrio de ranuras intenta distribuir uniformemente las 16 384 ranuras de hash entre las particiones disponibles. Esta opción no se reequilibra en función del uso de la memoria o del volumen de datos de cada partición.

Algunas teclas son demasiado grandes

Si algunas claves son mucho más grandes que otras, es posible que las particiones que alojan estas claves consuman más memoria. Para resolver este problema, puedes dividir las claves grandes en pares clave-valor más pequeños. O bien, quita las claves grandes innecesarias para liberar espacio.

Para analizar el conjunto de datos en busca de claves grandes, usa el comando valkey-cli --bigkeys o valkey-cli --memkeys. Para obtener más información, consulta Búsqueda de claves grandes en el sitio web de Valkey.

Se recomienda utilizar estrategias eficaces de nomenclatura de claves, estructuras de datos y técnicas de compresión para optimizar el uso de la memoria de las claves.

Particiones o claves de acceso rápido

Cuando se accede con frecuencia a algunas claves más que a otras, la carga se distribuye de manera desigual y reduce la utilización de la memoria del host servidor. Las claves a las que se accede con frecuencia se conocen como particiones o claves de acceso rápido.

Para buscar claves de acceso rápido, ejecuta el comando valkey-cli --hotkeys para revisar los patrones de acceso a las claves e identificarlas. En algunos casos, una sola clave de caché de acceso rápido puede crear un punto de acceso que sobrecargue el nodo de caché. El punto de acceso puede afectar a la CPU, la memoria y los recursos de red del nodo.

Nota: El comando hotkeys solo funciona cuando la política maxmemory-policy está establecida en *lfu.

Para solucionar este problema, toma las siguientes medidas:

  • Escala verticalmente tu clúster y proporciona más recursos.
  • Distribuye el tráfico de lectura a las réplicas de lectura. Para obtener más información, consulta READONLY en el sitio web de Valkey.
  • Modifica la aplicación cliente para reducir el volumen de escrituras en las claves.

Uso desigual de etiquetas hash

En un entorno habilitado para el modo clúster, debes usar etiquetas hash para implementar operaciones de varias claves en un clúster de Valkey. Cuando aumentas el uso de etiquetas hash, algunas ranuras de hash almacenan más claves que otras y se produce un desequilibrio de memoria entre las particiones.

Para resolver este problema, revisa el espacio de claves y el uso de etiquetas hash y distribuye los datos en más ranuras hash. Para obtener más información, consulta la sección de etiquetas hash en la especificación del clúster en el sitio web de Valkey.

Aumento de los búferes de salida de los clientes

Cuando los comandos de un cliente producen una salida más rápida que la que Valkey puede enviar al cliente, el búfer de salida del cliente crece y utiliza más memoria. Para obtener más información, consulta Límites de búfer de salida en el sitio web de Valkey.

Para identificar la causa de los problemas de búfer, conéctate al nodo afectado y ejecuta el comando CLIENT LIST para identificar los clientes que utilizan espacio de búfer. Para obtener más información, consulta CLIENT LIST en el sitio web de Valkey.

Para determinar la causa del uso elevado del búfer de salida del cliente, revisa los siguientes parámetros clave en el resultado:

  • obl: Longitud del búfer de salida
  • omem: Uso de memoria del búfer de salida
  • tot-mem: Memoria total utilizada por el cliente

También puedes revisar las métricas DatabaseMemoryUsageCountedForEvictPercentage y DatabaseMemoryUsagePercentage en Amazon CloudWatch. Si hay una diferencia significativa en el uso de la memoria entre las dos métricas, la causa del uso de la memoria son los búferes de salida del cliente.

Nota: La métrica DatabaseMemoryUsagePercentage también incluye la sobrecarga de conexión y el uso de la memoria del búfer de salida del cliente.

Prácticas recomendadas

Para reducir los problemas de desequilibrio de memoria, utiliza las siguientes prácticas recomendadas.

Configuración de los ajustes de TTL

Establece los valores de tiempo de vida (TTL) apropiados para las claves. Al configurar los valores TTL apropiados, el nodo de Valkey elimina automáticamente las claves que se quedan sin TTL y optimiza el uso de la memoria. Para obtener más información, consulta TTL en el sitio web de Valkey.

Revisión de las métricas de memoria

Se recomienda revisar periódicamente las siguientes métricas de memoria clave en las particiones para identificar los desequilibrios de forma temprana y tomar medidas proactivas:

  • DatabaseMemoryUsagePercentage: Realiza un seguimiento del uso general de la memoria en el nodo.
  • DatabaseMemoryUsageCountedForEvictPercentage: Para detectar un uso elevado de búfer y sobrecarga, compáralo con DatabaseMemoryUsagePercentage.
  • BytesUsedForCache: Supervisa la memoria real que utilizan los datos en caché.
  • CurrItems: Realiza un seguimiento de la cantidad de elementos almacenados en cada partición.
  • SwapUsage: Realiza un seguimiento de la cantidad de intercambio que se utiliza en un host.
    Nota: Es habitual que ElastiCache tenga algo de SwapUsage. El uso normal no causa problemas de latencia. Si SwapUsage supera los 300 MB, comprueba la presión de la memoria. Para obtener más información, consulta ¿Cuánta memoria reservada necesitas?

Actualización de los nodos

Para gestionar las claves de gran tamaño y los patrones de acceso frecuente, escala verticalmente tu clúster de ElastiCache para proporcionar recursos adicionales de CPU y memoria.

Información relacionada

¿Cómo compruebo el uso de la memoria en mi clúster de diseño propio de ElastiCache para Redis e implemento las prácticas recomendadas para controlar el uso elevado de la memoria?

Modelo de distribución de claves en el sitio web de Valkey

Actualización de Amazon ElastiCache: redimensionamiento en línea para clústeres de Redis

¿Cómo soluciono el aumento de la actividad de intercambio en mis instancias de ElastiCache?

OFICIAL DE AWSActualizada hace 7 meses