¿Cómo se minimiza el tiempo de inactividad cuando se escala ElastiCache para Redis?

Actualización más reciente: 19 de julio de 2022

Deseo minimizar el tiempo de inactividad al escalar Amazon ElastiCache para Redis. ¿Cómo se puede hacer esto?

Resolución

Para minimizar el tiempo de inactividad, tenga en cuenta lo siguiente:

  • Para minimizar el impacto de la sincronización, evite escalar en condiciones con altos niveles de carga de trabajo. Si el clúster está sometido a una gran carga de trabajo y el escalado tarda mucho tiempo, reduzca las peticiones entrantes a Redis para evitar errores de sincronización. Durante el proceso de escalado, se podría activar la sincronización (guardado en segundo plano, en bifurcación o sin bifurcación). La sincronización es una operación de uso intensivo de computación y consume memoria adicional. Compruebe la métrica SaveInProgress en Amazon CloudWatch para ver cuándo se produjo la sincronización. Tenga en cuenta que esta métrica recopila datos cada minuto. Por esta razón, es posible que la métrica no capte las sincronizaciones que se completan en menos de un minuto. Para obtener más información sobre la supervisión de la carga de trabajo, consulte Supervisión de las prácticas recomendadas con Amazon ElastiCache para Redis mediante Amazon CloudWatch.
  • En función del tipo de escalado, es posible que se incorporen nuevos nodos, que se elimine un nodo del clúster o que la IP de un nodo cambie durante el escalado. Amazon ElastiCache para Redis proporciona diferentes tipos de puntos de conexión para establecer conexión con el clúster. La elección del tipo de punto de conexión depende de los requisitos de la aplicación. Es una práctica recomendada probar el escalado en un entorno que no sea de producción para identificar problemas inesperados causados por una mala configuración del lado del cliente mientras se conecta el clúster de Redis.
  • Si el cliente se conecta a una nueva réplica que está en proceso de sincronización, aparece el error CARGANDO: Redis está cargando el conjunto de datos en la memoria. Configure el cliente de Redis o el código de la aplicación para volver a intentar la consulta en otra réplica, o envíe una consulta al nodo principal. El tamaño de los datos y el rendimiento del nodo determinan el tiempo que se tarda en cargar el conjunto de datos. Realice pruebas en el entorno de pruebas para determinar si esto será un problema.
  • Puede configurar el clúster para que se escale automáticamente, en lugar de hacerlo manualmente. El escalado automático evita los problemas de rendimiento causados por aumentos repentinos de la carga de trabajo entrante. Para obtener más información, consulte Escalado automático para clústeres de ElastiCache para Redis.

Información general sobre el tiempo de inactividad por acciones de escalado

Existen cuatro acciones de escalado:

  • Desescalar horizontalmente.
  • Escalar horizontalmente.
  • Cambiar los tipos de nodos.
  • Cambiar la cantidad de grupos de nodos. Esto únicamente se admite para los clústeres de Redis (modo de clúster desactivado).

Para obtener más información, consulte Escalado de los clústeres de ElastiCache para Redis.

Por lo general, el tiempo de inactividad relacionado con el escalado puede ser de unos pocos segundos como máximo, en función de la acción de escalado y de la configuración del clúster. A continuación, se explican los tiempos de inactividad para cada tipo de clúster y acción de escalado:

Clústeres Redis (modo de clúster desactivado)

Desescalar horizontalmente: al desescalar horizontalmente, se elimina un nodo de réplica de los clústeres. Puede proceder así para reducir los costos. Tenga en cuenta que al desescalar horizontalmente también se reduce la durabilidad de los datos. Si las aplicaciones utilizan únicamente un punto de conexión principal para establecer la conexión con el clúster, la eliminación de los nodos de réplica no causará ningún tiempo de inactividad. Esto se debe a que el punto de conexión principal apunta al nodo principal.

Sin embargo, si las aplicaciones utilizan puntos de conexión de lectura, o puntos de conexión individuales para establecer una conexión con ese nodo de réplica, la conexión original con el nodo de réplica eliminado se rompe y la aplicación debe establecer una nueva conexión TCP con otros nodos de réplica. La aplicación también tiene que volver a realizar la búsqueda de DNS para evitar la conexión con el nodo de réplica eliminado. La propagación del DNS de los puntos de conexión de lectura podría causar algunos segundos de inactividad si el cliente utiliza puntos de conexión de lectura.

Escalado horizontal: el escalado horizontal agrega un nodo de réplica en un clúster existente. El nodo principal se sincroniza con los nuevos nodos. Para evitar el tiempo de inactividad durante la sincronización, considere la posibilidad de escalar horizontalmente durante las horas en las que la carga de trabajo es mínima.

Cambiar los tipos de nodos: al cambiar los tipos de nodos, se crean nuevos nodos del tipo especificado. El antiguo nodo principal se sincroniza con el nuevo nodo principal y el nuevo nodo principal se sincroniza con los nuevos nodos de réplica. Durante este proceso de escalado, asegúrese de que:

  • La carga de trabajo no es tan alta como para que se produzca un error de sincronización.
  • Es posible que la IP de los nuevos nodos no sea la misma que la de los antiguos. Es posible que la aplicación tenga que volver a realizar la búsqueda de DNS en el punto de conexión principal o en el punto de conexión de lectura y establecer nuevas conexiones con el nuevo nodo. La propagación del DNS tarda algunos segundos, por lo que es posible que se produzca alguna interrupción en el servicio antes de que el cliente llegue al nuevo nodo.
    En las versiones de Redis 5.0.5 o superiores, la interrupción se minimiza. Si se produjo un error en la solicitud debido a la terminación del nodo anterior, el cliente de Redis vuelve a intentar la solicitud a un nuevo nodo. Es una práctica recomendada actualizar a la nueva versión de Redis para aprovechar las optimizaciones en el servicio ElastiCache.

Clústeres de Redis (modo de clúster habilitado)

Desescalar horizontalmente: desescalar horizontalmente significa eliminar una partición de un clúster. Antes de eliminar la partición, los datos de esa partición se migran a otros nodos. Este proceso se denomina “re-particionamiento” (resharding). El re-particionamiento provoca una carga de trabajo adicional en el clúster y el cliente debe admitir el clúster de Redis. Para obtener información sobre cómo minimizar el tiempo de inactividad al desescalar horizontalmente, consulte Prácticas recomendadas: ajuste del tamaño de los clústeres en línea.

Para minimizar los problemas de rendimiento derivados de un desescalado horizontal excesivo, considere la posibilidad de desescalar gradualmente. Por ejemplo, si el objetivo es desescalar horizontalmente de 12 particiones a 6 particiones, desescale primero de 12 particiones a 9 particiones. Tras desescalar horizontalmente por primera vez, compruebe el rendimiento del clúster durante los picos y, a continuación, continúe con el desescalado horizontal.

Escalar horizontalmente: al escalar horizontalmente, se agrega una partición a un clúster. Los datos de otras particiones se migran a la nueva partición. Este proceso se denomina “re-particionamiento” (resharding). El re-particionamiento provoca una carga de trabajo adicional en el clúster y el cliente debe admitir el clúster de Redis. Para obtener información sobre cómo minimizar el tiempo de inactividad al escalar horizontalmente, consulte Prácticas recomendadas: ajuste del tamaño de los clústeres en línea.

Cambiar los tipos de nodo: durante la operación de “Cambiar los tipos de nodo”, para cada partición, el antiguo nodo principal se sincroniza con el nuevo nodo principal. A continuación, los nuevos nodos principales se sincronizan con los nuevos nodos de réplica. Durante este proceso de escalado, asegúrese de que:

  • La carga de trabajo no es tan alta como para que se produzca un error de sincronización.
  • Es posible que la IP de los nuevos nodos no sea la misma que la de los antiguos. Para determinar la dirección IP, es posible que la aplicación utilice el comando de nodos del clúster o de ranuras del clúster para obtener información actualizada de la topología del clúster. La mayoría de los clientes de Redis que admiten los clústeres de Redis pueden actualizar la topología del clúster. Sin embargo, es posible que deba configurar el cliente de Redis para hacerlo. Para obtener información sobre cómo configurar el cliente de Redis, consulte la documentación correspondiente al tipo de cliente específico.

Cambiar la cantidad de grupos de nodos: al cambiar la cantidad de grupos de nodos, se modifica la cantidad de nodos de réplica en cada partición. Cuando la cantidad de nodos de réplica aumenta, nuevos nodos de réplica se unen al clúster y el nodo principal se sincroniza con el nuevo nodo. Por tanto, compruebe el rendimiento de los nodos principales antes de agregar nodos de réplica adicionales. Cuando la cantidad de nodos de réplica disminuye y si el cliente necesita leer a partir de un nodo de réplica que se eliminó, debe enviar la solicitud a uno de los nuevos nodos de réplica. El cliente también debe actualizar la topología del clúster para evitar que se envíen más solicitudes al nodo eliminado.