Crea instantáneas de discos coherentes con la aplicación de Linux


Puedes crear instantáneas coherentes de la aplicación de los discos conectados a instancias de máquina virtual (VM) de Linux. En general, la calidad de la instantánea de disco 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, 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, 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 máquina virtual (VM).
  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

  • Crea una VM de Linux
  • Actualiza el entorno invitado.
  • Si aún no lo hiciste, configura la autenticación. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Selecciona la pestaña para saber cómo planeas usar las muestras en esta página:

    Consola

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud, no necesitas configurar la autenticación.

    gcloud

    1. Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init
    2. Configura una región y una zona predeterminadas.

    REST

    Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

      Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init

Roles y permisos requeridos

Si deseas obtener los permisos que necesitas para administrar las instantaneas estándar, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:

Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

Estos roles predefinidos contienen los permisos necesarios para administrar instantáneas estándar. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para administrar las instantáneas estándar:

  • Para crear una instantánea de un disco zonal, haz lo siguiente:
    • compute.snapshots.create en el proyecto
    • compute.disks.createSnapshot en el disco
  • Para crear una instantánea de un disco regional mediante los datos del disco, sigue estos pasos:
    • compute.snapshots.create en el proyecto
    • compute.instances.useReadOnly en la VM de origen
    • compute.disks.createSnapshot en el disco
  • Para crear una instantánea de un disco regional a partir de un punto de control de recuperación de réplicas, sigue estos pasos:
    • compute.snapshots.create en el proyecto
    • compute.disks.createSnapshot en el disco
  • Para crear una programación de instantáneas: compute.resourcePolicies.create en el proyecto o la organización
  • Adjunta una programación de instantáneas a un disco:
    • compute.disks.addResourcePolicies en el disco
    • compute.resourcePolicies.use en la política de recursos
  • Para borrar una instantánea, haz lo siguiente:
    • compute.snapshots.delete en la instantánea
    • compute.snapshots.list en el proyecto

También puedes obtener estos permisos con funciones personalizados o con otros roles predefinidos

Limitaciones

La creación de instantáneas coherentes con la aplicación en Linux tiene las siguientes limitaciones:

  • 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, la instantánea no se crea si la secuencia de comandos muestra un error o alcanza el límite de tiempo de espera.

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 aplicación.
  • Sincroniza tu sistema de archivos.

En el siguiente ejemplo de código, se muestra una secuencia de comandos previa a la instantánea. Anota los caracteres #! iniciales.

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

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

#!/bin/bash
sudo 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 para los que creas instantáneas. 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 para qué disco se crea 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 conectado a SCSI 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.

    edit /etc/default/instance_configs.cfg
    
  2. Agrega la siguiente sección al archivo de configuración, guarda los cambios y sal del editor.

    [Snapshots]
    enabled = ENABLED
    timeout_in_seconds = TIMEOUT_SECONDS
    

    Reemplaza lo siguiente:

    • ENABLED: Configúralo como true para habilitar la función de instantánea coherente de la aplicación. El valor predeterminado es false.
    • TIMEOUT_SECONDS: Es la 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 agote el tiempo de espera. El valor del número entero debe estar entre 0 y 300. El valor predeterminado es 60.

  3. Reinicia el agente invitado para usar los nuevos ajustes de configuración.

    $ sudo systemctl restart google-guest-agent.service
    

Crea una instantánea con guest-flush habilitado

Crea una instantánea con la opción guest-flush habilitada a través de la consola de Google Cloud, Google Cloud CLI o REST. 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. Dirígete a la página Crear una instantánea en la consola de Google Cloud.

    Ir a la página Crear una instantánea
  2. Ingresa un Nombre para la instantánea.
  3. Selecciona un Tipo de instantánea. El valor predeterminado es una instantánea STANDARD, que es la mejor opción para la copia de seguridad a largo plazo y la recuperación ante desastres.

    Elige Instantánea de archivo para lograr una retención de datos más rentable.

  4. Opcional: ingresa una descripción de la instantánea.
  5. En Disco de origen, elige el disco existente del que deseas crear una instantánea.
  6. En la sección Ubicación, elige la ubicación de almacenamiento de instantáneas.

    La ubicación predeterminada predefinida o personalizada que se define en la configuración de la instantánea se elige de forma automática. De manera opcional, puedes anular la configuración de la instantánea y almacenar tus instantáneas en una ubicación de almacenamiento personalizada si haces lo siguiente:

    1. Elige el tipo de ubicación de almacenamiento que deseas para tu instantánea.

      • Elige Multirregional para obtener una mayor disponibilidad a un costo más alto.
      • Elige Instantáneas regionales para tener más control sobre la ubicación física de los datos a un costo más bajo.
    2. En el campo Seleccionar ubicación, elige la región o multirregión específica que deseas usar. Para usar la región o multirregión más cercana al disco de origen, elige En función de la ubicación del disco.
  7. Marca la opción Habilitar instantánea coherente de la aplicación.
  8. Haz clic en Crear para crear la instantánea.

gcloud

Puedes crear tu instantánea en la política de ubicación de almacenamiento que define tu configuración de instantáneas o usar una ubicación de almacenamiento alternativa de tu elección. Para obtener más información, consulta Elige la ubicación de almacenamiento de tu instantánea.

  • Para crear una instantánea en la ubicación predefinida o en la ubicación personalizada predeterminada que se estableció en la configuración de instantánea, usa el comando gcloud compute snapshots create.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --guest-flush
    
  • De lo contrario, si quieres anular la configuración de la instantánea y crear una instantánea en una ubicación de almacenamiento personalizada, incluye la marca --storage-location para indicar dónde almacenar la instantánea.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --storage-location=STORAGE_LOCATION \
        --guest-flush
    

    Reemplaza lo siguiente:

    • SNAPSHOT_NAME: Es un nombre para la instantánea.
    • SOURCE_ZONE: Es la zona del disco de origen.
    • SOURCE_DISK_NAME: Es el nombre del volumen de disco desde el que deseas crear una instantánea.
    • SNAPSHOT_TYPE: Es el tipo de instantánea, ya sea STANDARD o ARCHIVE. Si no se especifica un tipo de instantánea, se crea una instantánea STANDARD.
    • STORAGE_LOCATION: Opcional: la multirregión de Cloud Storage o la región de Cloud Storage en la que quieres almacenar la instantánea. Solo puedes especificar una ubicación de almacenamiento.

      Usa el parámetro --storage-location solo cuando quieras anular la ubicación de almacenamiento predeterminada o personalizada establecida en tu configuración de instantáneas.

REST

Puedes crear tu instantánea en la política de ubicación de almacenamiento que define tu configuración de instantáneas o usar una ubicación de almacenamiento alternativa de tu elección. Para obtener más información, consulta Elige la ubicación de almacenamiento de tu instantánea.

  • Para crear la instantánea en la ubicación predeterminada o personalizada establecida en tu configuración de instantáneas, haz una solicitud POST al método snapshots.insert.

    POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "guestFlush": true,
    }
    
  • De forma alternativa, para anular la configuración de instantáneas y crear una instantánea en una ubicación de almacenamiento personalizada, haz una solicitud POST al método snapshots.insert y, además, incluye la propiedad storageLocations en tu solicitud:

    POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "storageLocations": [
          "STORAGE_LOCATION"
      ],
      "guestFlush": true,
    }
    

Reemplaza lo siguiente:

  • DESTINATION_PROJECT_ID: Es el ID del proyecto en el que deseas crear la instantánea.
  • SNAPSHOT_NAME: Es un nombre para la instantánea.
  • SOURCE_PROJECT_ID: Es el ID del proyecto del disco de origen.
  • SOURCE_ZONE: Es la zona del disco de origen.
  • SOURCE_DISK_NAME: Es el nombre del volumen de disco desde el que deseas crear una instantánea.
  • SNAPSHOT_TYPE: Es el tipo de instantánea, ya sea STANDARD o ARCHIVE. Si no se especifica un tipo de instantánea, se crea una instantánea STANDARD.
  • STORAGE_LOCATION: Opcional: la multirregión de Cloud Storage o la región de Cloud Storage en la que quieres almacenar la instantánea. Solo puedes especificar una ubicación de almacenamiento.

    Usa el parámetro storageLocations solo cuando quieras anular la ubicación de almacenamiento predeterminada o personalizada establecida en tu configuración de instantáneas.

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

Usa instantáneas programadas para crear copias de seguridad de tu Persistent Disk zonal y regional y Google Cloud Hyperdisk 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 el archivo de configuración del entorno invitado y crear secuencias de comandos personalizadas, el siguiente comando crea instantáneas coherentes con 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 Acerca de las programaciones de instantáneas para discos.

Soluciona problemas

Sigue estos pasos para solucionar los problemas del proceso de creación de instantáneas.

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

    1. En la consola de Google Cloud, ve a la página Registro de Google Cloud Observability > Registros:
      Ir al Explorador de registros
    2. Ve al Explorador 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 campo de 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 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, consulta Crea una VM.

¿Qué sigue?