Creazione di snapshot di dischi coerenti con l'applicazione Linux

Puoi creare snapshot coerenti con l'applicazione dei dischi collegati a istanze di macchine virtuali (VM) Linux. In generale, la qualità dello snapshot del disco dipende dall'efficacia con cui le applicazioni possono recuperare dagli snapshot creati durante carichi di lavoro di scrittura intensi. Gli snapshot coerenti con l'applicazione acquisiscono lo stato dei dati dell'applicazione al momento del backup con tutte le transazioni dell'applicazione completate e tutte le scritture in attesa eliminate sul disco.

Per creare snapshot coerenti con l'applicazione, metti in pausa app o processi del sistema operativo che scrivono dati sul disco, eliminano i buffer del disco e sincronizza il file system prima di creare lo snapshot. A seconda dell'applicazione, questi e altri passaggi potrebbero essere necessari per garantire che tutte le transazioni dell'applicazione vengano completate e acquisite nel backup.

Per creare uno snapshot dei tuoi dischi coerente con l'applicazione, utilizza il seguente processo:

  1. Per preparare l'ambiente guest alla coerenza dell'applicazione, crea script shell personalizzati da eseguire prima e dopo l'acquisizione dello snapshot
  2. Configura le impostazioni degli snapshot sulla tua istanza di macchina virtuale (VM).
  3. Crea uno snapshot con l'opzione guest-flush abilitata. L'opzione guest-flush avvia gli script prima e dopo l'istantanea.

Prima di iniziare

  • Crea una VM Linux.
  • Aggiorna l'ambiente ospite.
  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale viene verificata l'identità per l'accesso ai servizi e alle API Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti in Compute Engine nel seguente modo.

    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. Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, devi utilizzare le credenziali che fornisci a gcloud CLI.

        Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

        gcloud init

      Per maggiori informazioni, consulta Autenticazione per REST nella documentazione sull'autenticazione di Google Cloud.

Autorizzazioni e ruoli richiesti

Per ottenere le autorizzazioni necessarie per gestire gli snapshot standard, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per gestire gli snapshot standard. Per visualizzare le autorizzazioni esatte necessarie, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per gestire gli snapshot standard sono necessarie le seguenti autorizzazioni:

  • Per creare uno snapshot di un disco di zona:
    • compute.snapshots.create sul progetto
    • compute.disks.createSnapshot sul disco
  • Per creare uno snapshot di un disco di regione utilizzando i dati sul disco:
    • compute.snapshots.create sul progetto
    • compute.instances.useReadOnly sulla VM di origine
    • compute.disks.createSnapshot sul disco
  • Per creare uno snapshot di un disco di una regione da un checkpoint di recupero della replica:
    • compute.snapshots.create sul progetto
    • compute.disks.createSnapshot sul disco
  • Per creare una pianificazione di snapshot: compute.resourcePolicies.create sul progetto o nell'organizzazione
  • Per collegare una pianificazione di snapshot a un disco:
    • compute.disks.addResourcePolicies sul disco
    • compute.resourcePolicies.use sul criterio delle risorse
  • Per eliminare uno snapshot:
    • compute.snapshots.delete sullo snapshot
    • compute.snapshots.list sul progetto

Potresti anche essere in grado di ottenere queste autorizzazioni con i ruoli personalizzati o altri ruoli predefiniti.

Limitazioni

La creazione di snapshot coerenti con l'applicazione su Linux presenta le seguenti limitazioni:

  • La coerenza dell'applicazione è garantita solo dal comportamento degli script personalizzati prima e dopo l'istantanea, non dall'operazione dello snapshot stessa.
  • Quando utilizzi l'opzione guest-flush nella richiesta di creazione di snapshot, lo snapshot non viene creato se lo script restituisce un errore o raggiunge il limite di timeout.

Crea script di snapshot prima e dopo

Prima di procedere, aggiorna l'ambiente guest in modo da eseguire il software più recente sulla tua VM Linux.

Per favorire la coerenza dell'applicazione, crea script shell pre e post snapshot da eseguire prima e dopo l'acquisizione dello snapshot. Utilizza gli script pre e post per operazioni come:

  • Metti in pausa le app o i processi del sistema operativo in esecuzione sulla VM che scrive dati sul disco.
  • Fai il svuotamento dei buffer del disco. Ad esempio, MySQL ha un'istruzione FLUSH. Utilizza lo strumento disponibile per la tua applicazione.
  • Sincronizza il file system.

Il seguente esempio di codice mostra uno script pre-istantanea. Prendi nota dei caratteri #! iniziali.

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

L'esempio di codice seguente mostra uno script di snapshot post. Osserva i caratteri #! iniziali.

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

Devi salvare gli script sulla tua VM nella directory /etc/google/snapshots/. Il percorso completo del prescript deve essere /etc/google/snapshots/pre.sh, mentre il percorso completo dello script del post deve essere /etc/google/snapshots/post.sh.

Fare riferimento a dischi specifici negli script

Il primo argomento passato agli script precedenti e successivi è un elenco di dischi per i quali stai creando gli snapshot. Puoi utilizzare questo argomento negli script per vari controlli. Ad esempio, se la tua VM ha più dischi collegati, ma hai specificato un solo disco nella richiesta di snapshot, puoi controllare per quale disco viene creato lo snapshot.

L'argomento è formattato come segue:

  • Dischi collegati a SCSI: un elenco separato da virgole di <target/lun> coppie.
  • Dischi collegati a NVME: un elenco separato da virgole di coppie <nvme:namespace>.

Ad esempio, il disco di avvio collegato a SCSI potrebbe essere visualizzato come 1/0, mentre un disco aggiuntivo collegato alla VM potrebbe essere visualizzato come 2/0.

Modifica il file di configurazione dell'ambiente ospite

Configura le impostazioni degli snapshot coerenti con l'applicazione aggiornando uno specifico file di configurazione sulla VM.

  1. Apri o crea il file di configurazione dell'ambiente ospite.

    edit /etc/default/instance_configs.cfg
    
  2. Aggiungi la sezione seguente al file di configurazione, poi salva le modifiche e esci dall'editor.

    [Snapshots]
    enabled = ENABLED
    timeout_in_seconds = TIMEOUT_SECONDS
    

    Sostituisci quanto segue:

    • ENABLED: impostala su true per attivare la funzionalità di snapshot coerente dell'applicazione. Il valore predefinito è false.
    • TIMEOUT_SECONDS: il numero di secondi che lo script precedente o successivo può richiedere per terminare l'esecuzione prima del timeout. Il valore intero deve essere compreso tra 0 e 300. Il valore predefinito è 60.

  3. Riavvia l'agente ospite per utilizzare le nuove impostazioni di configurazione.

    $ sudo systemctl restart google-guest-agent.service
    

Crea uno snapshot con guest-flush abilitato

Utilizzando la console Google Cloud, Google Cloud CLI o REST, crea uno snapshot con l'opzione guest-flush abilitata. Viene avviata l'esecuzione degli script prima e dopo l'acquisizione dello snapshot.

Console

  1. Vai alla pagina Crea uno snapshot nella console Google Cloud.

    Vai alla pagina Crea uno snapshot
  2. Inserisci un nome per lo snapshot.
  3. Seleziona un Tipo di snapshot. Il valore predefinito è uno snapshot STANDARD, che è l'opzione migliore per il backup a lungo termine e il ripristino di emergenza.

    Scegli Archivia istantanea per una conservazione dei dati più conveniente.

  4. (Facoltativo) Inserisci una descrizione dello snapshot.
  5. In Disco di origine, seleziona il disco esistente di cui vuoi creare uno snapshot.
  6. Nella sezione Località, scegli la località di archiviazione degli snapshot.

    La posizione predefinita o personalizzata definita nelle impostazioni dello snapshot viene selezionata automaticamente. Facoltativamente, puoi eseguire l'override delle impostazioni degli snapshot e archiviare gli snapshot in una posizione di archiviazione personalizzata seguendo questi passaggi:

    1. Scegli il tipo di posizione di archiviazione per lo snapshot.

      • Scegli Più regioni per una disponibilità maggiore a un costo superiore.
      • Scegli gli Snapshot regionali per un maggiore controllo sulla località fisica dei dati a un costo inferiore.
    2. Nel campo Seleziona località, seleziona una o più regioni specifiche che vuoi utilizzare. Per utilizzare una o più regioni più vicine al disco di origine, seleziona In base alla località del disco.
  7. Seleziona l'opzione Abilita snapshot coerente con l'applicazione.
  8. Fai clic su Crea per creare lo snapshot.

gcloud

Puoi creare lo snapshot nel criterio della località di archiviazione definito dalle tue impostazioni dello snapshot o utilizzando una località di archiviazione alternativa a tua scelta. Per maggiori informazioni, consulta Scegliere la posizione di archiviazione degli snapshot.

  • Per creare uno snapshot nel percorso predefinito o personalizzato predefinito configurato nelle impostazioni dello snapshot, utilizza il 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
    
  • In alternativa, per eseguire l'override delle impostazioni dello snapshot e creare uno snapshot in una posizione di archiviazione personalizzata, includi il flag --storage-location per indicare dove archiviare lo snapshot.

    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
    

    Sostituisci quanto segue:

    • SNAPSHOT_NAME: il nome dello snapshot.
    • SOURCE_ZONE: la zona del disco di origine.
    • SOURCE_DISK_NAME: il nome del volume del disco da cui vuoi creare uno snapshot.
    • SNAPSHOT_TYPE: il tipo di snapshot, STANDARD o ARCHIVIO. Se non viene specificato un tipo di snapshot, viene creato uno snapshot STANDARD.
    • STORAGE_LOCATION (Facoltativo) La regione Cloud Storage o la regione Cloud Storage in cui vuoi archiviare lo snapshot. Puoi specificare una sola posizione di archiviazione.

      Utilizza il parametro --storage-location solo quando vuoi eseguire l'override della posizione di archiviazione predefinita o personalizzata configurata nelle impostazioni degli snapshot.

REST

Puoi creare lo snapshot nel criterio della località di archiviazione definito dalle tue impostazioni dello snapshot o utilizzando una località di archiviazione alternativa a tua scelta. Per maggiori informazioni, consulta Scegliere la posizione di archiviazione degli snapshot.

  • Per creare uno snapshot nella posizione predefinita o personalizzata configurata nelle impostazioni dello snapshot, effettua una richiesta POST al metodo 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,
    }
    
  • In alternativa, per eseguire l'override delle impostazioni dello snapshot e creare uno snapshot in una posizione di archiviazione personalizzata, effettua una richiesta POST al metodo snapshots.insert e includi la proprietà storageLocations nella richiesta:

    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,
    }
    

Sostituisci quanto segue:

  • DESTINATION_PROJECT_ID: l'ID del progetto in cui vuoi creare lo snapshot.
  • SNAPSHOT_NAME: il nome dello snapshot.
  • SOURCE_PROJECT_ID: l'ID del progetto del disco di origine.
  • SOURCE_ZONE: la zona del disco di origine.
  • SOURCE_DISK_NAME: il nome del volume del disco da cui vuoi creare uno snapshot.
  • SNAPSHOT_TYPE: il tipo di snapshot, STANDARD o ARCHIVIA. Se non viene specificato un tipo di snapshot, viene creato uno snapshot STANDARD.
  • STORAGE_LOCATION (Facoltativo) La regione Cloud Storage o la regione Cloud Storage in cui vuoi archiviare lo snapshot. Puoi specificare una sola posizione di archiviazione.

    Utilizza il parametro storageLocations solo quando vuoi eseguire l'override della posizione di archiviazione predefinita o personalizzata configurata nelle impostazioni degli snapshot.

Crea una pianificazione di snapshot con guest-flush abilitato

Utilizza gli snapshot pianificati per eseguire in modo regolare e automatico il backup del Persistent Disk a livello di zona e di regione e Google Cloud Hyperdisk. Se vuoi pianificare snapshot coerenti con l'applicazione per il backup, utilizza l'opzione --guest-flush quando crei la pianificazione degli snapshot in modo che gli script precedenti e successivi vengano eseguiti prima e dopo ogni snapshot pianificato.

Ad esempio, dopo aver configurato il file di configurazione dell'ambiente guest e creato script personalizzati, il comando seguente crea snapshot orari coerenti con l'applicazione:

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

Per saperne di più, consulta Informazioni sulle pianificazioni di snapshot per i dischi.

Risoluzione dei problemi

Per risolvere i problemi del processo di creazione dello snapshot, segui questi passaggi.

  • Esamina i log degli eventi di creazione degli snapshot:

    1. Nella console Google Cloud, vai alla pagina Google Cloud Observability Logging > Log:
      Vai a Esplora log
    2. Vai a Esplora log nel pannello di navigazione a sinistra.
    3. Nell'elenco Filtra per etichetta o ricerca testo, seleziona Converti in filtro avanzato.

    Converti in filtro avanzato.

    Sostituisci il campo del filtro con il seguente testo:

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot"
    
  • Se non viene trovato nessuno script, non viene creato alcuno snapshot. Assicurati di aver seguito i passaggi descritti in Creare script di snapshot prima e dopo.

  • In caso di errore o timeout dello script, non viene creato alcuno snapshot. Consulta la sezione Preparazione per snapshot coerenti. Tieni presente che il periodo di timeout massimo che puoi configurare nelle impostazioni è di 300 secondi. Prova a ripetere l'intero processo utilizzando gli script di esempio.

  • Un disco deve essere collegato a una VM per acquisire uno snapshot del disco in cui guest-flush è abilitato. Per scoprire come creare una VM Linux e collegare un disco, consulta Creazione di una VM.

Passaggi successivi