Crea snapshot di dischi coerenti con le applicazioni Linux


Puoi creare snapshot dei dischi collegati all'applicazione coerenti di macchine virtuali (VM) Linux. In generale, la qualità dello snapshot del disco dipende dalla capacità delle applicazioni di 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 svuotate sul disco.

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

Per creare uno snapshot coerente con l'applicazione dei tuoi dischi, segui la procedura riportata di seguito:

  1. Per preparare l'ambiente guest per la coerenza dell'applicazione, crea script shell personalizzati da eseguire prima e dopo l'acquisizione dello snapshot.
  2. Configura le impostazioni degli snapshot nell'istanza della macchina virtuale (VM).
  3. Crea uno snapshot con l'opzione guest-flush abilitata. guest-flush consente di avviare gli script pre e post-istantanea.

Prima di iniziare

  • Crea una VM Linux.
  • Aggiorna l'ambiente guest.
  • Se non l'hai ancora fatto, configura l'autenticazione. Autenticazione è Il processo di verifica dell'identità per l'accesso ai servizi e alle API di Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine come segue.

    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. Install the Google Cloud CLI, then initialize it by running the following command:

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

      Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Per ulteriori informazioni, vedi Esegui l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.

Ruoli e autorizzazioni richiesti

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

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

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

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 una regione utilizzando i dati presenti sul disco:
    • compute.snapshots.create del 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 ripristino della replica:
    • compute.snapshots.create sul progetto
    • compute.disks.createSnapshot sul disco
  • Per creare una pianificazione di snapshot: compute.resourcePolicies.create nel progetto o nell'organizzazione
  • Per collegare una pianificazione degli 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 del progetto

Potresti anche ottenere queste autorizzazioni con 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 del tuo asset e post-snapshot, non dall'operazione istantanea stessa.
  • Quando utilizzi l'opzione guest-flush nella richiesta di creazione dello snapshot, lo snapshot non viene creato se lo script restituisce un errore o raggiunge la limite di timeout.

Creare script pre e post snapshot

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

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

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

Il seguente esempio di codice mostra uno script pre-snapshot. Tieni presente #! caratteri.

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

Il seguente esempio di codice mostra uno script post-istantanea. Tieni presente #! caratteri iniziali.

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

Devi salvare gli script sulla VM nella directory/etc/google/snapshots/. Il percorso completo del pre-script deve essere /etc/google/snapshots/pre.sh e il percorso completo del post-script deve essere /etc/google/snapshots/post.sh.

Fare riferimento a dischi specifici negli script

Il primo argomento passato agli script pre e post snapshot è un dei dischi per i quali stai creando snapshot. Puoi utilizzare questo argomento nei tuoi script per vari controlli. Ad esempio, se alla VM sono collegati più dischi, ma nella richiesta di snapshot hai specificato un solo disco, puoi controllare per quale disco viene creato lo snapshot.

L'argomento viene formattato come segue:

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

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

Modificare il file di configurazione dell'ambiente guest

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

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

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

    [Snapshots]
    enabled = ENABLED
    timeout_in_seconds = TIMEOUT_SECONDS
    

    Sostituisci quanto segue:

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

  3. Riavvia Guest Agent per utilizzare le nuove impostazioni di configurazione.

    $ sudo systemctl restart google-guest-agent.service
    

Crea uno snapshot con guest-flush abilitato

Tramite la console Google Cloud, Google Cloud CLI o REST per creare uno snapshot con l'opzione guest-flush abilitata. Verranno quindi eseguiti gli script pre e post snapshot prima e dopo l'acquisizione dello snapshot.

Console

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

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

    Scegli Snapshot archivio per una conservazione dei dati più economica.

  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 posizione di archiviazione degli snapshot.

    La località predefinita o personalizzata definita nello snapshot viene selezionata automaticamente. Facoltativamente, puoi eseguire l'override le impostazioni degli snapshot e archiviarli in una posizione di archiviazione personalizzata nel seguente modo:

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

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

gcloud

Puoi creare lo snapshot nel criterio di località di archiviazione definita dal tuo impostazioni snapshot oppure utilizzando una posizione di archiviazione alternativa di tua scelta. Per ulteriori informazioni, consulta Scegliere la posizione di archiviazione degli snapshot.

  • Per creare uno snapshot nella posizione predefinita o personalizzata configurato nelle impostazioni dello snapshot, utilizza 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 --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: un nome per lo 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 ARCHIVE. Se il tipo di snapshot non è specificato, viene creato uno snapshot STANDARD.
    • STORAGE_LOCATION: Facoltativo: il campo Cloud Storage (più regioni) o la regione di Cloud Storage in cui archiviare lo snapshot. Puoi specificare una sola località di archiviazione.

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

REST

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

  • Per creare uno snapshot nella posizione predefinita o personalizzata configurato nelle impostazioni dello snapshot, effettua una richiesta POST 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 snapshots.insert e includi la proprietà storageLocations nella tua 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: un nome per lo 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 disco da cui vuoi creare uno snapshot.
  • SNAPSHOT_TYPE: il tipo di snapshot, STANDARD o ARCHIVE. Se non viene specificato un tipo di snapshot, viene creato uno snapshot STANDARD.
  • STORAGE_LOCATION: Facoltativo: il campo Cloud Storage (più regioni) o la regione di Cloud Storage in cui archiviare lo snapshot. Puoi specificare una sola località di archiviazione.

    Utilizza il parametro storageLocations solo quando vuoi eseguire l'override del località di archiviazione predefinita o personalizzata configurata nello snapshot impostazioni.

Crea una pianificazione degli snapshot con guest-flush abilitata

Usa gli snapshot pianificati per eseguire regolarmente e automaticamente il backup dei server Persistent Disk regionale 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 pre e post snapshot vengano eseguiti prima e dopo ogni snapshot pianificato.

Ad esempio, dopo configurare il file di configurazione dell'ambiente guest e creando script personalizzati, il comando seguente crea di snapshot orari coerenti con le applicazioni:

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

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

Risoluzione dei problemi

Risolvi i problemi relativi alla pianificazione e alla procedura di creazione degli snapshot esaminando i log e controllando le configurazioni.

Esamina i log

  1. Vai alla pagina Esplora log nella console Google Cloud:

    Vai a Esplora log

  2. Incolla questa query nel riquadro Query di log:

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot" OR
    protoPayload.methodName="ScheduledSnapshots"
    
  3. Esegui la query e esamina i log:

    query nel log di creazione dello snapshot.

Controllare le configurazioni

Passaggi successivi