Cree instantáneas de disco consistentes con aplicaciones de Linux


Puede crear instantáneas coherentes con las aplicaciones de los discos conectados a instancias de máquinas virtuales (VM) de Linux. En general, la calidad de la instantánea de su disco depende de qué tan bien sus aplicaciones pueden recuperarse de las instantáneas que crea durante cargas de trabajo de escritura intensas. Las instantáneas consistentes con la aplicación capturan 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 descargadas en el disco.

Para crear instantáneas que sean coherentes con las aplicaciones, suspenda las aplicaciones o los procesos del sistema operativo que escriben datos en el disco, vacíe los buffers del disco y sincronice el sistema de archivos antes de crear la instantánea. Dependiendo de su aplicación, es posible que se requieran estos y otros pasos para garantizar que todas las transacciones de la aplicación estén completas y capturadas en la copia de seguridad.

Para crear una instantánea coherente con la aplicación de sus discos, utilice el siguiente proceso:

  1. Para preparar el entorno invitado para la coherencia de la aplicación, cree scripts de shell personalizados para ejecutar antes y después de capturar la instantánea.
  2. Configure los ajustes de instantánea en su instancia de máquina virtual (VM).
  3. Cree una instantánea con la opción guest-flush habilitada. La opción guest-flush inicia los scripts de instantáneas anteriores y posteriores.

Antes de comenzar

  • Cree una máquina virtual Linux .
  • Actualizar el entorno de invitados .
  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras 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. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. 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.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Para obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud .

Roles y permisos necesarios

Para obtener los permisos que necesita para administrar instantáneas estándar, solicite a su administrador que le otorgue los siguientes roles de IAM en el proyecto:

Para obtener más información sobre cómo otorgar roles, consulte Administrar el acceso a proyectos, carpetas y organizaciones .

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

Permisos requeridos

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

  • Para crear una instantánea de un disco zonal:
    • compute.snapshots.create en el proyecto
    • compute.disks.createSnapshot en el disco
  • Para crear una instantánea de un disco regional utilizando los datos del disco:
    • compute.snapshots.create en el proyecto
    • compute.instances.useReadOnly en la máquina virtual de origen
    • compute.disks.createSnapshot en el disco
  • Para crear una instantánea de un disco regional desde un punto de control de recuperación de réplica:
    • 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 u organización.
  • Para adjuntar 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 eliminar una instantánea:
    • compute.snapshots.delete en la instantánea
    • compute.snapshots.list en el proyecto

Es posible que también pueda obtener estos permisos con roles personalizados u otros roles predefinidos .

Limitaciones

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

  • La coherencia de la aplicación está garantizada únicamente por el comportamiento de los scripts personalizados previos y posteriores a la instantánea, no por la operación de la instantánea en sí.
  • Cuando utiliza la opción guest-flush en su solicitud de creación de instantánea, la instantánea no se crea si el script devuelve un error o alcanza el límite de tiempo de espera.

Cree scripts previos y posteriores a la instantánea

Antes de continuar, actualice el entorno invitado para ejecutar el software más reciente en su máquina virtual Linux.

Para facilitar la coherencia de la aplicación, cree scripts de shell previos y posteriores a la instantánea para ejecutarlos antes y después de capturar la instantánea. Utilice los scripts previos y posteriores para operaciones como:

  • Pausar aplicaciones o procesos del sistema operativo que se ejecutan en la máquina virtual que escribe datos en el disco.
  • Vacíe los buffers del disco. Por ejemplo, MySQL tiene una declaración FLUSH . Utilice cualquier herramienta que esté disponible para su aplicación.
  • Sincroniza tu sistema de archivos.

El siguiente ejemplo de código muestra un script previo a la instantánea. Tenga en cuenta el #! personajes.

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

El siguiente ejemplo de código muestra un script posterior a la instantánea. Tenga en cuenta el #! personajes.

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

Debe guardar sus scripts en su VM en el directorio /etc/google/snapshots/ . La ruta completa de su secuencia de comandos previa debe ser /etc/google/snapshots/pre.sh y la ruta completa de su secuencia de comandos posterior debe ser /etc/google/snapshots/post.sh .

Hacer referencia a discos específicos en sus scripts

El primer argumento que se pasa a los scripts previos y posteriores a la instantánea es una lista de discos para los que está creando instantáneas. Puede utilizar este argumento en sus scripts para varias comprobaciones. Por ejemplo, si su máquina virtual tiene varios discos conectados pero solo especificó un disco en su solicitud de instantánea, puede verificar para qué disco se está creando la instantánea.

El argumento tiene el formato siguiente:

  • Discos conectados 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, su disco de arranque conectado SCSI podría aparecer como 1/0 , mientras que un disco adicional conectado a la VM podría aparecer como 2/0 .

Edite el archivo de configuración de su entorno de invitados

Configure los ajustes de instantáneas coherentes de su aplicación actualizando un archivo de configuración específico en su VM.

  1. Abra o cree su archivo de configuración del entorno invitado.

    edit /etc/default/instance_configs.cfg
    
  2. Agregue la siguiente sección al archivo de configuración, luego guarde los cambios y salga del editor.

    [Snapshots]
    enabled = ENABLED
    timeout_in_seconds = TIMEOUT_SECONDS
    

    Reemplace lo siguiente:

    • ENABLED : Establezca en true para habilitar la función de instantánea consistente con la aplicación. El valor predeterminado es false .
    • TIMEOUT_SECONDS : el número de segundos que el script previo o posterior a la instantánea puede tardar en finalizar su ejecución antes de que se agote el tiempo de espera. El valor entero debe estar entre 0 y 300. El valor predeterminado es 60 .

  3. Reinicie el agente invitado para utilizar los nuevos ajustes de configuración.

    $ sudo systemctl restart google-guest-agent.service
    

Cree una instantánea con guest-flush habilitada

Usando la consola de Google Cloud, la CLI de Google Cloud o REST, cree una instantánea con la opción guest-flush habilitada. Esto comienza a ejecutar los scripts previos y posteriores a la instantánea antes y después de capturar la instantánea.

Consola

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

    Vaya a la página Crear una instantánea
  2. Ingrese un nombre de instantánea.
  3. Seleccione un tipo de instantánea . El valor predeterminado es una instantánea STANDARD , que es la mejor opción para realizar copias de seguridad a largo plazo y recuperación ante desastres.

    Elija Archivar instantánea para una retención de datos más rentable.

  4. Opcional: ingrese una descripción de la instantánea.
  5. En Disco de origen , seleccione el disco existente del que desea crear una instantánea.
  6. En la sección Ubicación , elija la ubicación de almacenamiento de su instantánea .

    La ubicación predeterminada predefinida o personalizada definida en la configuración de su instantánea se selecciona automáticamente. Opcionalmente, puede anular la configuración de la instantánea y almacenarla en una ubicación de almacenamiento personalizada haciendo lo siguiente:

    1. Elija el tipo de ubicación de almacenamiento que desea para su instantánea.

    2. En el campo Seleccionar ubicación , seleccione la región específica o multirregión que desea utilizar. Para usar la región o multirregión más cercana a su disco de origen, seleccione Basado en la ubicación del disco .
  7. Marque la opción Habilitar instantánea consistente con la aplicación .
  8. Haga clic en Crear para crear la instantánea.

nube de gcloud

Puede crear su instantánea en la política de ubicación de almacenamiento definida por la configuración de su instantánea o utilizando una ubicación de almacenamiento alternativa de su elección. Para obtener más información, consulte Elija su ubicación de almacenamiento de instantáneas .

  • Para crear una instantánea en la ubicación predeterminada predefinida o personalizada configurada en la configuración de la 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
    
  • Alternativamente, para anular la configuración de la instantánea y crear una instantánea en una ubicación de almacenamiento personalizada, incluya la marca --storage-location para indicar dónde almacenar su 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 instantánea con ámbito regional en una región permitida, incluya el indicador --region para indicar dónde crear su instantánea.

    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
    

Reemplace lo siguiente:

  • SNAPSHOT_NAME : un nombre para la instantánea.
  • SOURCE_ZONE : La zona del disco de origen.
  • SOURCE_DISK_NAME : el nombre del volumen de disco desde el que desea crear una instantánea.
  • SNAPSHOT_TYPE : el tipo de instantánea, ya sea ESTÁNDAR o ARCHIVO . Si no se especifica un tipo de instantánea, se crea una instantánea STANDARD .
  • STORAGE_LOCATION : Opcional: para instantáneas de alcance global, la región múltiple de Cloud Storage o la región de Cloud Storage donde desea almacenar su instantánea. Puede especificar solo una ubicación de almacenamiento.

    Utilice el parámetro --storage-location solo cuando desee anular la ubicación de almacenamiento predeterminada predefinida o personalizada configurada en la configuración de su instantánea.

  • SNAPSHOT_SCOPE_REGION : Opcional: para instantáneas con ámbito regional, la región a la que tiene alcance la instantánea. Si incluye este parámetro, no podrá utilizar el parámetro --storage-location . STORAGE_LOCATION se establece automáticamente en SNAPSHOT_SCOPE_REGION .

DESCANSAR

Puede crear su instantánea en la política de ubicación de almacenamiento definida por la configuración de su instantánea o utilizando una ubicación de almacenamiento alternativa de su elección. Para obtener más información, consulte Elija su ubicación de almacenamiento de instantáneas .

  • Para crear una instantánea en la ubicación predeterminada predefinida o personalizada configurada en la configuración de su instantánea, realice 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,
    }
    
  • Como alternativa, para anular la configuración de la instantánea y crear una instantánea en una ubicación de almacenamiento personalizada, realice una solicitud POST al método snapshots.insert e incluya la propiedad storageLocations en su 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 instantánea con ámbito regional en una región permitida, realice una solicitud POST al método snapshots.insert y defina 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"
    }
    

Reemplace lo siguiente:

  • DESTINATION_PROJECT_ID : el ID del proyecto en el que desea crear la instantánea.
  • SNAPSHOT_NAME : un nombre para la instantánea.
  • SOURCE_PROJECT_ID : el ID del proyecto del disco de origen.
  • SOURCE_ZONE : La zona del disco de origen.
  • SOURCE_DISK_NAME : el nombre del disco desde el que desea crear una instantánea.
  • SNAPSHOT_TYPE : el tipo de instantánea, ya sea ESTÁNDAR o ARCHIVO . Si no se especifica un tipo de instantánea, se crea una instantánea STANDARD .
  • STORAGE_LOCATION : Opcional: para instantáneas de alcance global, la región múltiple de Cloud Storage o la región de Cloud Storage donde desea almacenar su instantánea. Puede especificar solo una ubicación de almacenamiento.

    Utilice el parámetro storageLocations solo cuando desee anular la ubicación de almacenamiento predeterminada predefinida o personalizada configurada en la configuración de su instantánea.

  • SNAPSHOT_SCOPE_REGION : Opcional: para instantáneas con ámbito regional, la región a la que tiene alcance la instantánea. Si incluye este parámetro, no podrá utilizar el parámetro storageLocations . STORAGE_LOCATION se establece automáticamente en SNAPSHOT_SCOPE_REGION .

Cree un cronograma de instantáneas con guest-flush habilitada

Utilice instantáneas programadas para realizar copias de seguridad periódicas y automáticas de su disco persistente zonal y regional y de Google Cloud Hyperdisk. Si desea programar instantáneas consistentes con la aplicación para su copia de seguridad, use la opción --guest-flush cuando cree la programación de instantáneas para que los scripts previos y posteriores a la instantánea 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 scripts personalizados , el siguiente comando crea instantáneas coherentes con 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, consulte Acerca de las programaciones de instantáneas para discos .

Solución de problemas

Solucione problemas con la programación de instantáneas y el proceso de creación revisando los registros y verificando las configuraciones.

Revisar los registros

  1. Vaya a la página del Explorador de registros en la consola de Google Cloud:

    Ir al Explorador de registros

  2. Pegue la siguiente consulta en el panel Consulta de registro :

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

    consulta de registro de creación de instantáneas.

Comprobar configuraciones

¿Qué sigue?