Acerca de las instantáneas de RDB

En esta página, se proporciona una descripción general de las instantáneas de RDB para Memorystore para Redis. En esta página, se da por sentado que conoces las instantáneas de RDB de Redis de código abierto y la función de importación/exportación de Memorystore.

Para obtener información sobre cómo habilitar, inhabilitar y supervisar las instantáneas de RDB, consulta Cómo administrar instantáneas de RDB.

Memorystore para Redis se usa principalmente como una caché en memoria. Cuando usas Memorystore como caché, tu aplicación puede tolerar la pérdida de datos de caché o volver a propagar la caché desde un almacén persistente con mucha facilidad. Sin embargo, hay algunos casos de uso en los que el tiempo de inactividad de una instancia de Memorystore o una pérdida completa de los datos de la instancia pueden causar tiempos de inactividad prolongados de la aplicación.

Recomendamos usar el nivel estándar como mecanismo principal para la alta disponibilidad. Además, habilitar las instantáneas de RDB en instancias de nivel estándar proporciona protección adicional contra fallas que pueden provocar volcados de caché. El nivel estándar proporciona una instancia de alta disponibilidad con varias réplicas y habilita una recuperación rápida mediante la conmutación por error automática si falla la instancia principal.

En algunos casos, también es posible que desees asegurarte de que los datos se puedan recuperar de las copias de seguridad de instantáneas en caso de fallas catastróficas de las instancias de nivel estándar. En estos casos, las copias de seguridad automatizadas y la capacidad de restablecer datos de las instantáneas de la RDB pueden proporcionar protección adicional contra la pérdida de datos. Si las instantáneas de RDB están habilitadas, si es necesario, se realiza una recuperación desde la instantánea de RDB más reciente.

Las instantáneas de RDB son adecuadas para casos de uso que pueden tolerar cierta cantidad de inactividad de los datos después de la recuperación. También puedes usar instantáneas de RDB para automatizar la creación de copias de seguridad y la recuperación de instancias del nivel básico.

Descripción general de las instantáneas de RDB

La función de instantáneas de RDB tiene el siguiente comportamiento:

  • Almacena instantáneas completas de un momento determinado en intervalos especificados por el usuario en el almacenamiento persistente.

  • Tú eliges la frecuencia y la programación de las instantáneas de rutina. El intervalo mínimo de instantáneas es 1h y el máximo es 24h.

  • Las instancias del nivel básico recuperan datos de la instantánea más reciente cada vez que se reinicia una instancia debido a una falla, se somete a una operación de escalamiento o se somete a una actualización de la versión de Redis OSS de tu instancia.

  • De forma predeterminada, las instancias de nivel Estándar recuperan datos de la réplica, no de una instantánea. Sin embargo, las instancias de nivel Estándar recuperan datos de una instantánea si una réplica no está disponible y tanto la instancia principal como la réplica se reinician.

  • No agrega ningún costo adicional a la facturación de tu instancia.

Comportamiento adicional

  • Las instantáneas se usan para la recuperación de instancias y no están disponibles para las restauraciones manuales. En cualquier momento, solo la última instantánea correcta está disponible para la recuperación. Además de las instantáneas de RDB, puedes usar Importar y exportar para crear copias de seguridad de tus datos y restablecerlos de forma manual.

  • En una instancia de nivel estándar, la instantánea se toma en la réplica para minimizar el uso de la memoria y la CPU en la instancia principal. Las instantáneas nunca se toman del nodo principal.

Limitaciones

  • Disponible en instancias de Memorystore para Redis que usan la versión 5.0 de Redis o una posterior.

  • Si tu instancia tiene muchas claves (alrededor de 200 millones o más), las copias de seguridad y recuperaciones de la RDB pueden ser lentas. En este volumen de claves, el servidor de Redis puede ser el cuello de botella que ralentiza las instantáneas y las recuperaciones.

Programación de instantáneas de RDB

Cuando habilites las instantáneas de RDB durante la creación de la instancia, debes especificar un intervalo de instantáneas. También tienes la opción de especificar una hora de inicio. Juntos, estos definen la programación diaria de las instantáneas. Los intervalos que puedes establecer son 1h, 6h, 12h y 24h. Por ejemplo, si estableces la hora de inicio a las 4 a.m. y el intervalo a 1 hora, las instantáneas comienzan a las 4 a.m. el día en que se habilitan y continúan cada hora después.

Si no se especifica una hora de inicio, la primera instantánea se toma lo antes posible y se respeta el intervalo. Por ejemplo, con una hora de inicio no especificada y un intervalo de 1 hora, la instantánea puede comenzar a las 6:13 a.m. y continuar a las 7:13 a.m., 8:13 a.m., etcétera.

Si se especifica una hora de inicio, el programa diario se respeta de forma coherente si las instantáneas siempre se realizan correctamente y no tardan más que el intervalo de copia de seguridad especificado.

Sin embargo, activar la instantánea según la programación diaria es lo mejor que se puede hacer. El programa puede desviarse del programa determinado inicialmente por varios motivos:

  • Si una instantánea falla o tarda más que el intervalo de instantáneas especificado en completarse, la siguiente instantánea comienza inmediatamente después de completarse la instantánea actual.

    • Para evitar que la instantánea se ejecute de forma continua y sobrecargue la instancia, se recomienda establecer un intervalo lo suficientemente largo como para que se complete.
  • Si ya hay una instantánea en curso en un momento alineado con la programación diaria, esta se completa y la hora de la siguiente instantánea se calcula solo en el intervalo desde el inicio de la última instantánea exitosa.

Cómo ajustar la programación existente

Es posible que te encuentres con situaciones en las que quieras pausar temporalmente la toma de instantáneas de la RDB durante un período determinado. Esto puede ser para garantizar que no haya impactos en el rendimiento durante eventos críticos o para inhabilitar temporalmente las instantáneas para solucionar problemas de rendimiento.

Para dejar de tomar instantáneas temporalmente durante un período breve, puedes ajustar la hora de inicio a una fecha futura. Una vez que ajustes la hora de inicio a una fecha futura, la siguiente instantánea no comenzará hasta esa fecha. Si lo haces, la última instantánea se retendrá durante al menos 7 días y se usará en caso de recuperación.

Para obtener más información sobre cómo ajustar las programaciones de instantáneas, consulta Cómo ajustar la programación de instantáneas.

Comportamiento de recuperación

Las instancias de Redis de nivel básico activan una recuperación cada vez que se reinician. Las operaciones comunes que activan los reinicios son el escalamiento y la actualización de la versión de tu instancia. Las instantáneas de RDB preservan los datos de las instancias del nivel básico durante estas operaciones que causan reinicios, mantenimientos planificados y fallas imprevistas del sistema.

Las instancias de Redis de nivel estándar realizan la conmutación por error a una réplica como mecanismo de recuperación principal en lugar de cargar desde una instantánea. Una instancia de nivel estándar se recupera de la instantánea cuando falla el restablecimiento desde una réplica.

Coherencia de los datos en la recuperación

Cuando se habilitan, las instantáneas de RDB hacen todo lo posible para garantizar que las copias de seguridad se realicen en el intervalo especificado, pero no se puede garantizar. Las instantáneas pueden fallar por varios motivos. Consulta las prácticas recomendadas para configurar y supervisar instancias cuando las instantáneas de RDB están habilitadas.

Si la instantánea falla de forma consecutiva en varios intervalos, la última copia de seguridad disponible puede estar inactiva de forma arbitraria.

La peor pérdida de datos para una recuperación a partir de una instantánea es la suma del intervalo especificado desde que se inició la última instantánea buena y el tiempo para guardar la próxima instantánea en el almacenamiento. En el caso de un incidente de recuperación, usa la métrica last_success_age para ver el período de pérdida de datos.

Te recomendamos que configures alertas para detectar fallas en las instantáneas programadas y tomar medidas correctivas. Para obtener más información sobre cómo configurar alertas, consulta Supervisa instantáneas.

Período de recuperación

La instancia no está disponible mientras se recupera de una instantánea. El tiempo de recuperación depende del tamaño de la instantánea. Para comprender el tiempo de recuperación previsto, verifica la métrica RDB recovery remaining time con Cloud Monitoring en la consola de Google Cloud.

Mitiga la recuperación lenta

A veces, la recuperación de una instantánea puede tardar más de lo esperado. Es posible que debas tomar medidas para que tu aplicación se vuelva a conectar a Redis lo más rápido posible.

En esta circunstancia, puedes crear una instancia nueva de Redis y dirigir el tráfico de la aplicación hacia ella. Luego, puedes transferir los datos restablecidos a la instancia nueva una vez que se recupere la instancia original.

Falla de instantánea y falla de recuperación

Falla de instantánea

Las instantáneas que fallan se informan a Cloud Monitoring y se vuelven a intentar de inmediato. Las fallas consecutivas de instantáneas aumentan la cantidad de datos perdidos en caso de una recuperación, ya que los datos recuperados se vuelven cada vez más inactivos. Para obtener información sobre cómo detectar y solucionar problemas de instantáneas, consulta Cómo supervisar instantáneas.

Falla de recuperación

Las fallas de recuperación son poco frecuentes, pero pueden ocurrir. Si se produce una falla de recuperación, la instancia se recupera sin datos.

Prácticas recomendadas

Para obtener los mejores resultados cuando crees una copia de seguridad de tu instancia con instantáneas de RDB, debes seguir las prácticas recomendadas que se describen a continuación:

Administración de la memoria

Las instantáneas de RDB usan una bifurcación de procesos y un mecanismo de "copia en escritura" para tomar una instantánea de la instancia. Según el patrón de operaciones de escritura en la instancia, la memoria utilizada de la instancia aumentará a medida que se copien las páginas que toquen las operaciones de escritura. En el peor de los casos, el espacio en memoria puede ser el doble del tamaño de los datos en la instancia.

Para garantizar que la instancia tenga memoria suficiente para completar la instantánea, debes configurar maxmemory-gb en el 80% de la capacidad de la instancia, de modo que el 20% se reserve para la sobrecarga. Consulta Prácticas recomendadas para la administración de memoria para obtener más información. Esta sobrecarga de memoria, además de supervisar las instantáneas, te ayuda a administrar tu carga de trabajo para tener instantáneas exitosas.

Instantáneas inactivas

Recuperar tu instancia desde una instantánea inactiva puede causar problemas de rendimiento para tu aplicación, ya que intenta conciliar una cantidad significativa de claves inactivas o de otros cambios en tu base de datos, como un cambio de esquema.

Si crees que tu instantánea está desactualizada o que tu instancia sufrió otros cambios importantes que son difíciles de conciliar con la instantánea, puedes inhabilitar y, luego, volver a habilitar las instantáneas de RDB. Esto borra las instantáneas existentes, lo que te permite evitar la recuperación de una instantánea inactiva.

Para supervisar las instantáneas inactivas, configura una alerta en las métricas last_status y last_success_age de la instantánea de RDB.

Recuperación prolongada a partir de una instantánea

Te recomendamos configurar una alerta para la métrica redis.googleapis.com/server/uptime para que te notifique si tu instancia deja de estar disponible.

Si tu instancia no está disponible y la recuperación de una instantánea tarda demasiado, puedes crear una instancia de Redis nueva y dirigir el tráfico a ella. Una vez que se recupere la instancia de Redis original, puedes transferir los datos restablecidos a la instancia nueva.

Impacto de las instantáneas de RDB en el rendimiento

Según el patrón de carga de trabajo, las instantáneas de la RDB pueden afectar el rendimiento de la instancia y aumentar la latencia de tus aplicaciones.

Según la cantidad de pérdida de datos potencial que pueda tolerar tu aplicación, puedes minimizar el impacto en el rendimiento de las instantáneas de RDB programándolas para que se ejecuten durante períodos de tráfico de instancias bajo.

Usa la hora de inicio y el intervalo para programar las instantáneas en los momentos requeridos. Por ejemplo, si tu carga es muy baja de 1 a.m. a 4 a.m., puedes establecer la hora de inicio en 3 a.m. y el intervalo en 24 horas.

Si tu sistema tiene una carga constante y requiere instantáneas frecuentes, debes evaluar cuidadosamente el impacto en el rendimiento y sopesar los beneficios de usar las instantáneas de RDB para la carga de trabajo.

Cómo supervisar instantáneas

Es importante supervisar las instantáneas y configurar alertas para las instantáneas que fallan. Las instantáneas que fallan pueden indicar una instancia sobrecargada que puede seguir teniendo dificultades para recuperarse de la instantánea.

Para obtener una lista de las métricas disponibles para supervisar instantáneas, consulta Métricas de instantáneas de RDB. Para recibir un aviso de una instantánea que falló, configura una alerta para la métrica last_status de la instantánea de la RDB. También puedes usar la consola de Google Cloud para verificar si hay fallas.

Supervisa el impacto en el rendimiento

Puedes supervisar el impacto en el rendimiento que tiene una instantánea en tu instancia de Memorystore. Para ello, consulta las métricas disponibles a través de Cloud Monitoring, como el uso de la CPU, el uso de la memoria, etc. Si observaste una disminución en el rendimiento, puedes usar la métrica de instantánea de la RDB in_progress para determinar si se estaba creando una instantánea cuando se detectaron los problemas de rendimiento.

¿Qué sigue?