Crea una instantánea de disco persistente coherente de una aplicación de Linux

Puedes crear instantáneas coherentes de la aplicación de los discos persistentes conectados a instancias de máquina virtual (VM) de Linux. En general, la calidad de la instantánea de disco persistente depende de la eficacia con la que las aplicaciones se puedan recuperar de las instantáneas que crees durante las cargas de trabajo de escritura con mucho contenido. Las instantáneas coherentes de aplicación capturan el estado de los datos de aplicación en el momento en que se realizó la copia de seguridad con todas las transacciones de la aplicación completadas y todas las escrituras pendientes vaciadas al disco.

Para crear instantáneas coherentes con la aplicación, detén las aplicaciones o los procesos del sistema operativo que escriben datos en el disco persistente, vacía los búferes del disco y sincroniza el sistema de archivos antes de crear la instantánea. Según la aplicación, estos y otros pasos pueden ser necesarios para garantizar que todas las transacciones de la aplicación se completen y se capturen en la copia de seguridad.

Para crear una instantánea coherente de la aplicación de tus discos persistentes, usa el siguiente proceso:

  1. A fin de preparar el entorno invitado para lograr la coherencia de la aplicación, crea secuencias de comandos de shell personalizadas que se ejecuten antes y después de que se capture la instantánea.
  2. Establece la configuración de instantáneas en tu instancia de VM (máquina virtual).
  3. Crea una instantánea con la opción guest-flush habilitada. La opción guest-flush inicia las secuencias de comandos previas y posteriores de instantáneas.

Antes de comenzar

Restricciones

  • La coherencia de la aplicación solo está garantizada por el comportamiento de las secuencias de comandos personalizadas previas y posteriores a la instantánea, no por la operación de la instantánea en sí.
  • Cuando usas la opción guest-flush en la solicitud de creación de la instantánea, no se crea ninguna instantánea en caso de que se produzca un error de secuencia de comandos o se agote el tiempo de espera.
  • Solo puedes crear instantáneas coherentes de la aplicación de los discos persistentes conectados a ciertas imágenes públicas o personalizadas de Linux. Se admiten las siguientes imágenes:
    • CentOS 7
    • CentOS 8
    • Debian 9 Stretch
    • Debian 10 Buster
    • RHEL 7
    • RHEL 8
    • SLES 12
    • SLES 15
    • Ubuntu 18.04
    • Ubuntu 20.04

Crea secuencias de comandos previas y posteriores de instantáneas

Antes de continuar, actualiza el entorno invitado para que puedas ejecutar el software más reciente en tu VM de Linux.

Para facilitar la coherencia de la aplicación, crea secuencias de comandos de shell previas y posteriores a la instantánea a fin de que se ejecuten antes y después de que se capture la instantánea. Usa las secuencias de comandos previas y posteriores para operaciones como las siguientes:

  • Pausa las apps o los procesos del sistema operativo que se ejecutan en la VM que escribe datos en el disco persistente.
  • Vacía los búferes del disco. Por ejemplo, MySQL tiene una declaración FLUSH. Usa cualquier herramienta que esté disponible para tu app.
  • Sincroniza tu sistema de archivos.

En el siguiente ejemplo de código, se muestra una secuencia de comandos simple previa a la instantánea. Anota los caracteres #! iniciales. La ejecución de fsfreeze -f bloquea cualquier proceso en ejecución que intente acceder al sistema de archivos, por lo que debes usarlo con precaución si tu aplicación es sensible a la latencia.

#!/bin/bash
fsfreeze -f [example-disk-location]

En el siguiente ejemplo de código, se muestra una secuencia de comandos simple posterior de instantáneas. Anota los caracteres #! iniciales.

#!/bin/bash
fsfreeze -u [example-disk-location]

Debes guardar las secuencias de comandos en tu VM en el directorio /etc/google/snapshots/. La ruta completa de tu secuencia de comandos previa debe ser /etc/google/snapshots/pre.sh y la ruta completa de tu secuencia de comandos de posterior debe ser /etc/google/snapshots/post.sh.

Haz referencia a discos específicos en tus secuencias de comandos

El primer argumento que se pasa a las secuencias de comandos previas y posteriores de instantáneas es una lista de discos en los que se realiza la instantánea. Puedes usar este argumento en tus secuencias de comandos para varias verificaciones. Por ejemplo, si tu VM tiene varios discos conectados, pero solo especificaste un disco en la solicitud de instantánea, puedes verificar en qué disco se realiza la instantánea.

El argumento tiene el siguiente formato:

  • Discos conectados a SCSI: una lista separada por comas de pares <target/lun>.
  • Discos conectados a NVME: una lista separada por comas de pares <nvme:namespace>.

Por ejemplo, tu disco de arranque puede aparecer como 1/0, mientras que un disco adicional conectado a la VM puede aparecer como 2/0.

Edita el archivo de configuración del entorno invitado

Para configurar el ajuste de la instantánea coherente de la aplicación, actualiza un archivo de configuración específico en la VM.

  1. Abre o crea el archivo de configuración del entorno invitado:

    /etc/default/instance_configs.cfg
    
  2. Agrega la siguiente sección al archivo :

    [Snapshots]
    enabled = enabled
    timeout_in_seconds = timeout
    

    Reemplaza los valores según las descripciones que figuran a continuación:

    Clave Valor Default Descripción
    enabled true o false false Indica si la función de instantánea coherente de la aplicación está habilitada.
    timeout_in_seconds Número entero [0, 300] 60 Cantidad de segundos que puede tardar la secuencia de comandos previa o posterior de la instantánea para terminar de ejecutarse antes de que se produzca un error de tiempo de espera. Ten en cuenta que la cantidad de segundos que puede tardar toda la operación de instantánea en completarse antes de que se produzca un error de tiempo de espera es de 300 segundos por disco y no se puede configurar.
  3. Guarda los parámetros de configuración:

    sudo systemctl restart google-guest-agent.service
    

Crea una instantánea con guest-flush habilitado

Con Google Cloud Console, la herramienta de línea de comandos de gcloud o la API de Compute Engine, crea una instantánea con la opción guest-flush habilitada. Esto comienza a ejecutar las secuencias de comandos previas y posteriores de instantáneas antes y después de que se captura la instantánea.

Console

  1. Ve a la página Crear una página de instantáneas nueva.
  2. Ingresa un Nombre para la instantánea.
  3. De manera opcional, ingresa una Descripción de la instantánea.
  4. En Disco de origen, selecciona un disco existente del que deseas crear una instantánea.
  5. Selecciona una ubicación de almacenamiento.
  6. Marca la opción Habilitar instantánea coherente de la aplicación.
  7. Haga clic en Crear.

gcloud

Ejecuta el comando

gcloud compute disks snapshot DISK_NAME [DISK_NAME ...] --guest-flush

Reemplaza lo siguiente:

  • DISK_NAME es el nombre de uno o más discos persistentes de los que quieres crear instantáneas.

La herramienta de línea de comandos de gcloud espera hasta que la operación muestre un estado de READY, FAILED, o alcance el tiempo de espera máximo y muestre los últimos detalles conocidos de la instantánea.

API

Realiza una solicitud POST al método disks.createSnapshot con la opción guestFlush habilitada:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/createSnapshot?guestFlush=true

Reemplaza lo siguiente:

  • PROJECT_ID: el ID de tu proyecto
  • ZONE: La zona en la que se encuentran la instancia y el disco
  • DISK_NAME: es el nombre del disco persistente del que deseas crear una instantánea.

Crea una programación de instantáneas con guest-flush habilitado

Usa instantáneas programadas para crear copias de seguridad de tus discos persistentes zonales y regionales de forma automática y con regularidad. Si quieres programar instantáneas coherentes de la aplicación para tu copia de seguridad, usa la opción --guest-flush cuando crees la programación de instantáneas, de modo que las secuencias de comandos previas y posteriores de instantáneas se ejecuten antes y después de cada instantánea programada.

Por ejemplo, después de configurar mi configuración y crear secuencias de comandos personalizadas, el siguiente comando crea instantáneas coherentes de la aplicación por hora:

gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \
  --description "MY HOURLY SNAPSHOT SCHEDULE" \
  --start-time 22:00 \
  --hourly-schedule 4 \
  --guest-flush

Para obtener más información, consulta Crea instantáneas programadas de discos persistentes.

Soluciona problemas

  • Revisa los registros de los eventos de creación de instantáneas:

    1. En Cloud Console, ve a la página de Logging de Google Cloud's operations suite > Registros:
      Ir a la página Visor de registros
    2. Ve al Visor de registros en el menú de navegación izquierdo.
    3. En la lista Filtrar por etiqueta o búsqueda de texto, selecciona Convertir en filtro avanzado.

    Convertir en filtro avanzado

    Reemplaza el cuadro de texto del filtro por el siguiente texto:

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot"
    
  • Si no se encuentra ninguna secuencia de comandos, no se crea ninguna instantánea. Asegúrate de haber seguido los pasos en Crea secuencias de comandos previas y posteriores de instantáneas.

  • Si hay un error en la secuencia de comandos o se agotó el tiempo de espera de la secuencia de comandos, no se crea ninguna instantánea. Revisa Prepárate para usar instantáneas coherentes. Ten en cuenta que el tiempo de espera máximo que puedes configurar en el ajuste es de 300 segundos. Intenta repetir todo el proceso con las secuencias de comandos de muestra.

  • Se debe conectar un disco persistente a una VM para capturar una instantánea del disco con guest-flush habilitado. Para aprender a crear una VM de Linux y conectar un disco persistente, consulta Crea una VM.

¿Qué sigue?