Crear capturas de disco coherentes de aplicaciones de Linux


Puedes crear capturas coherentes de aplicaciones de discos conectados a instancias de máquinas virtuales (VMs) de Linux. Por lo general, la calidad de la instantánea de disco depende de la capacidad de tus aplicaciones para recuperarse de las instantáneas que creas durante cargas de trabajo de escritura pesadas. Las capturas coherentes con la aplicación registran el estado de los datos de la aplicación en el momento de la copia de seguridad, con todas las transacciones de la aplicación completadas y todas las escrituras pendientes volcadas en el disco.

Para crear capturas coherentes con las aplicaciones, pausa las aplicaciones o los procesos del sistema operativo que escriban datos en el disco, vacía los búferes del disco y sincroniza el sistema de archivos antes de crear la captura. En función de tu aplicación, es posible que debas seguir estos y otros pasos para asegurarte de que todas las transacciones de la aplicación se completen y se incluyan en la copia de seguridad.

Para crear una captura coherente de aplicaciones de tus discos, sigue estos pasos:

  1. Para preparar el entorno invitado para la coherencia de las aplicaciones, crea secuencias de comandos shell personalizadas que se ejecuten antes y después de que se capture la instantánea.
  2. Configura los ajustes de las copias de seguridad en la instancia de máquina virtual (VM).
  3. Crea una captura con la opción guest-flush habilitada. La opción guest-flush inicia las secuencias de comandos previas y posteriores a la creación de la captura.

Antes de empezar

  • Crea una máquina virtual de Linux.
  • Actualiza el entorno de invitado.
  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    REST

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

      Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Roles y permisos necesarios

Para obtener los permisos que necesitas para gestionar las copias de seguridad estándar, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en el proyecto:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Estos roles predefinidos contienen los permisos necesarios para gestionar las copias de seguridad estándar. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para gestionar las copias de seguridad estándar, se necesitan los siguientes permisos:

  • Para crear una captura de un disco zonal, sigue estos pasos:
    • compute.snapshots.create en el proyecto
    • compute.disks.createSnapshot en el disco
  • Para crear una captura de un disco regional con 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éplica, sigue estos pasos:
    • compute.snapshots.create en el proyecto
    • compute.disks.createSnapshot en el disco
  • Para crear una programación de capturas, sigue estos pasos: compute.resourcePolicies.create en el proyecto o la organización
  • Para adjuntar una programación de instantáneas a un disco, sigue estos pasos:
    • compute.disks.addResourcePolicies en el disco
    • compute.resourcePolicies.use en la política de recursos
  • Para eliminar una instantánea, sigue estos pasos:
    • compute.snapshots.delete en la captura
    • compute.snapshots.list en el proyecto

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Limitaciones

Crear capturas coherentes de aplicaciones en Linux tiene las siguientes limitaciones:

  • La coherencia de las aplicaciones solo se garantiza mediante el comportamiento de las secuencias de comandos personalizadas previas y posteriores a la creación de la captura, no mediante la propia operación de creación de la captura.
  • Si usas la opción guest-flush en tu solicitud de creación de una captura, esta no se creará si la secuencia de comandos devuelve un error o alcanza el límite de tiempo de espera.

Crear secuencias de comandos previas y posteriores a la creación de capturas

Antes de continuar, actualiza el entorno invitado para que tu máquina virtual Linux ejecute el software más reciente.

Para facilitar la coherencia de las aplicaciones, crea scripts de shell previos y posteriores a la instantánea para que se ejecuten antes y después de que se capture la instantánea. Usa los scripts previos y posteriores para operaciones como las siguientes:

  • Pausa las aplicaciones o los procesos del sistema operativo que se estén ejecutando en la VM y que escriban datos en el disco.
  • Vacía los búferes de disco. Por ejemplo, MySQL tiene una instrucción FLUSH. Usa la 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 creación de la instantánea. Ten en cuenta los primeros #! caracteres.

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

En el siguiente ejemplo de código se muestra una secuencia de comandos posterior a la creación de la instantánea. Ten en cuenta los caracteres #! iniciales.

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

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

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

El primer argumento que se transfiere a las secuencias de comandos previas y posteriores a la creación de la captura es una lista de discos para los que vas a crear capturas. Puedes usar este argumento en tus secuencias de comandos para realizar varias comprobaciones. Por ejemplo, si tu VM tiene varios discos conectados, pero solo has especificado uno en tu solicitud de creación de una captura, puedes comprobar para qué disco se está creando la captura.

El argumento tiene el siguiente formato:

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

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

Editar el archivo de configuración del entorno de invitado

Para configurar los ajustes de las capturas coherentes de aplicaciones, actualiza un archivo de configuración específico en tu máquina virtual.

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

    edit /etc/default/instance_configs.cfg
    
  2. Añade la siguiente sección al archivo de configuración, guarda los cambios y cierra el editor.

    [Snapshots]
    enabled = ENABLED
    timeout_in_seconds = TIMEOUT_SECONDS
    

    Haz los cambios siguientes:

    • ENABLED: asigna el valor true para habilitar la función de captura coherente de aplicación. El valor predeterminado es false.
    • TIMEOUT_SECONDS: número de segundos que puede tardar en completarse la ejecución de la secuencia de comandos de la preinstantánea o la postinstantánea antes de que se agote el tiempo de espera. El valor entero debe estar comprendido 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
    

Crear una captura con guest-flush habilitado

Con la Google Cloud consola, la interfaz de línea de comandos de Google Cloud o REST, crea una instantánea con la opción guest-flush habilitada. De esta forma, se ejecutan las secuencias de comandos previas y posteriores a la captura antes y después de que se capture la instantánea.

Consola

  1. Ve a la página Crear una instantánea de la consola de Google Cloud .

    Ir a la página Crear una captura
  2. Introduzca un nombre para la instantánea.
  3. Selecciona un Tipo de instantánea. La opción predeterminada es una STANDARD, que es la mejor opción para las copias de seguridad a largo plazo y la recuperación tras desastres.

    Elige Archivar instantánea para conservar los datos de forma más rentable.

  4. Opcional: Introduce una descripción de la instantánea.
  5. En Disco de origen, selecciona el disco del que quieras crear una captura.
  6. En la sección Ubicación, elige la ubicación de almacenamiento de tu foto de perfil.

    Se selecciona automáticamente la ubicación predefinida o personalizada que hayas definido en los ajustes de la instantánea. También puedes anular los ajustes de las instantáneas y almacenarlas en una ubicación de almacenamiento personalizada haciendo lo siguiente:

    1. Elige el tipo de ubicación de almacenamiento que quieras para tu copia.

    2. En el campo Seleccionar ubicación, elige la región o multirregión específica que quieras usar. Para usar la región o multirregión más cercana al disco de origen, selecciona Según la ubicación del disco.
  7. Marca la opción Habilitar captura coherente de aplicación.
  8. Haz clic en Crear para crear la instantánea.

gcloud

Puedes crear la captura en la política de ubicación de almacenamiento definida en los ajustes de la captura o usar una ubicación de almacenamiento alternativa que elijas. Para obtener más información, consulta el artículo Elegir la ubicación de almacenamiento de las copias de seguridad.

  • Para crear una captura en la ubicación predefinida o personalizada que hayas configurado en los ajustes de las capturas, 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
    
  • También puedes anular la configuración de la instantánea y crear una en una ubicación de almacenamiento personalizada. Para ello, incluye la marca --storage-location para indicar dónde quieres 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
    
  • Vista previa: Para crear una captura de ámbito regional en una región permitida, incluye la marca --region para indicar dónde quieres crear la captura.

    gcloud beta compute snapshots create SNAPSHOT_NAME \
        --region=SNAPSHOT_SCOPE_REGION
        --source-disk=SOURCE_DISK_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --snapshot-type=SNAPSHOT_TYPE
    

Haz los cambios siguientes:

  • SNAPSHOT_NAME: nombre de la captura.
  • SOURCE_ZONE: la zona del disco de origen.
  • SOURCE_DISK_NAME: el nombre del volumen del disco del que quieres crear una captura.
  • SNAPSHOT_TYPE: el tipo de instantánea, STANDARD o ARCHIVE. Si no se especifica ningún tipo de captura, se crea una captura STANDARD.
  • STORAGE_LOCATION: Opcional: En el caso de las capturas de ámbito global, la multirregión de Cloud Storage o la región de Cloud Storage en la que quieras almacenar la captura. Solo puedes especificar una ubicación de almacenamiento.

    Usa el parámetro --storage-location solo cuando quieras anular la ubicación de almacenamiento predefinida o personalizada que hayas configurado en los ajustes de la instantánea.

  • SNAPSHOT_SCOPE_REGION: opcional. En el caso de las instantáneas con ámbito regional, se trata de la región a la que se limita la instantánea. Si incluye este parámetro, no podrá usar el parámetro --storage-location. El STORAGE_LOCATION se define automáticamente como SNAPSHOT_SCOPE_REGION.

REST

Puedes crear la captura en la política de ubicación de almacenamiento definida en los ajustes de la captura o usar una ubicación de almacenamiento alternativa que elijas. Para obtener más información, consulta el artículo Elegir la ubicación de almacenamiento de las copias de seguridad.

  • Para crear una captura en la ubicación predefinida o personalizada que hayas configurado en los ajustes de capturas, 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,
    }
    
  • También puedes anular la configuración de la captura y crear una captura en una ubicación de almacenamiento personalizada. Para ello, haz una solicitud POST al método snapshots.insert e 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,
    }
    
  • Vista previa) Para crear una captura con ámbito regional en una región permitida, haz una solicitud POST al método snapshots.insert y define la región de creación:

    POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/regions/SNAPSHOT_SCOPE_REGION/snapshots
    {
        "name": "SNAPSHOT_NAME",
        "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
        "snapshotType": "SNAPSHOT_TYPE"
    }
    

Haz los cambios siguientes:

  • DESTINATION_PROJECT_ID: el ID del proyecto en el que quieres crear la instantánea.
  • SNAPSHOT_NAME: nombre de la captura.
  • SOURCE_PROJECT_ID: el ID del proyecto del disco de origen.
  • SOURCE_ZONE: la zona del disco de origen.
  • SOURCE_DISK_NAME: Nombre del disco a partir del que quieres crear una captura.
  • SNAPSHOT_TYPE: el tipo de instantánea, STANDARD o ARCHIVE. Si no se especifica ningún tipo de captura, se crea una captura STANDARD.
  • STORAGE_LOCATION: Opcional: En el caso de las capturas de ámbito global, la multirregión de Cloud Storage o la región de Cloud Storage en la que quieras almacenar la captura. Solo puedes especificar una ubicación de almacenamiento.

    Usa el parámetro storageLocations solo cuando quieras anular la ubicación de almacenamiento predefinida o personalizada que hayas configurado en los ajustes de la instantánea.

  • SNAPSHOT_SCOPE_REGION: opcional. En el caso de las instantáneas con ámbito regional, se trata de la región a la que se limita la instantánea. Si incluye este parámetro, no podrá usar el parámetro storageLocations. El STORAGE_LOCATION se define automáticamente como SNAPSHOT_SCOPE_REGION.

Crear una programación de capturas con guest-flush habilitado

Usa capturas programadas para crear copias de seguridad de tus discos persistentes y Google Cloud Hyperdisk de zona y regionales de forma periódica y automática. Si quieres programar capturas coherentes con la aplicación para tu copia de seguridad, usa la opción --guest-flush cuando crees la programación de capturas para que las secuencias de comandos previas y posteriores a la captura se ejecuten antes y después de cada captura programada.

Por ejemplo, después de configurar el archivo de configuración del entorno de invitado y crear secuencias de comandos personalizadas, el siguiente comando crea snapshots coherentes de la aplicación cada hora:

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

Para obtener más información, consulta el artículo Acerca de las programaciones de capturas de discos.

Solución de problemas

Para solucionar problemas con la programación y la creación de copias de seguridad, consulta los registros y comprueba las configuraciones.

Revisar los registros

  1. Ve a la página Explorador de registros de la consola:Google Cloud

    Ir a Explorador de registros

  2. Pega la siguiente consulta en el panel de consulta de registros:

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot" OR
    protoPayload.methodName="ScheduledSnapshots"
    
  3. Ejecuta la consulta e investiga los registros:

    Consulta de registro de creación de capturas.

Comprobar configuraciones

Siguientes pasos