Creazione di uno snapshot di disco permanente coerente con l'applicazione Linux

Puoi creare snapshot coerenti dei dischi permanenti collegati a istanze di macchine virtuali Linux. In generale, la qualità dello snapshot del disco permanente dipende dalla capacità delle applicazioni di recuperare da snapshot creati durante i 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 le applicazioni, metti in pausa app o processi del sistema operativo che scrivono i dati sul disco permanente, svuota il buffer del disco e sincronizza il file system prima di creare lo snapshot. A seconda della tua applicazione, questi e altri passaggi potrebbero essere necessari per garantire che tutte le transazioni dell'applicazione siano completate e acquisite nel backup.

Per creare uno snapshot coerente con l'applicazione dei dischi permanenti, segui questa procedura:

  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 sull'istanza VM (macchina virtuale).
  3. Crea uno snapshot con l'opzione guest-flush abilitata. L'opzione guest-flush avvia gli script snapshot precedenti e successivi all'utilizzo.

Prima di iniziare

Limitazioni

  • La coerenza dell'applicazione è garantita solo dal comportamento degli script personalizzati prima e dopo l'istantanea, non dall'operazione stessa di snapshot.
  • Quando utilizzi l'opzione guest-flush nella richiesta di creazione dello snapshot, non viene creata uno snapshot in caso di errore o timeout dello script.

Crea script di snapshot prima e dopo

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

Per semplificare la coerenza dell'applicazione, crea script pre-post snapshot shell 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 i dati sul disco permanente.
  • Svuota i buffer del disco. Ad esempio, MySQL ha un'istruzione FLUSH. Usa lo strumento disponibile per la tua app.
  • Sincronizza il file system.

L'esempio di codice seguente mostra un semplice script pre-istantanea. Osserva i primi #! caratteri. L'esecuzione di fsfreeze -f blocca qualsiasi processo in esecuzione che tenta di accedere al file system, quindi utilizzalo con cautela se la tua applicazione è sensibile alla latenza.

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

L'esempio di codice seguente mostra un semplice script post-istantanea. Osserva i primi #! caratteri.

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

Devi salvare gli script sulla VM nella directory /etc/google/snapshots/. Il percorso completo dello script precedente deve essere /etc/google/snapshots/pre.sh e 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 di snapshot prima e dopo è un elenco di dischi di cui è stato creato lo snapshot. Puoi utilizzare questo argomento nei tuoi script per vari controlli. Ad esempio, se alla tua VM sono collegati più dischi, ma hai specificato un solo disco nella richiesta di snapshot, puoi controllare il disco di cui è stato creato lo snapshot.

L'argomento ha il seguente formato:

  • 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 potrebbe essere visualizzato come 1/0, mentre un disco aggiuntivo collegato alla VM potrebbe apparire come 2/0.

Modifica il file di configurazione dell'ambiente ospite

Configura le impostazioni dello snapshot coerenti per l'applicazione aggiornando un file di configurazione specifico nella VM.

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

    /etc/default/instance_configs.cfg
    
  2. Aggiungi questa sezione al file di configurazione:

    [Snapshots]
    enabled = enabled
    timeout_in_seconds = timeout
    

    Sostituisci i valori come descritto di seguito:

    Chiave Valore Predefinito Descrizione
    enabled true o false false Indica se la funzionalità snapshot coerente con l'applicazione è abilitata.
    timeout_in_seconds Numero intero [0, 300] 60 Numero di secondi necessari per terminare l'esecuzione dello script snapshot precedente o successivo all'errore di timeout. Tieni presente che il numero di secondi necessari per completare l'intera operazione sullo snapshot prima di un errore di timeout è di 300 secondi per disco e non è configurabile.
  3. Salva le impostazioni di configurazione:

    sudo systemctl restart google-guest-agent.service
    

Crea uno snapshot con guest-flush abilitato

Utilizzando la console Google Cloud, l'interfaccia a riga di comando di Google Cloud o l'API Compute Engine, crea uno snapshot con l'opzione guest-flush abilitata. Questo avvia l'esecuzione degli script prima e dopo lo snapshot prima e dopo l'acquisizione dello snapshot.

console

  1. Vai alla pagina Crea un nuovo snapshot.
  2. Inserisci un Nome snapshot.
  3. (Facoltativo) Inserisci una Descrizione dello snapshot.
  4. In Disco di origine, seleziona un disco esistente da cui vuoi creare uno snapshot.
  5. Seleziona una località di archiviazione.
  6. Seleziona l'opzione Abilita snapshot coerente con l'applicazione.
  7. Fai clic su Crea.

gcloud

Esegui il comando

gcloud compute disks snapshot DISK_NAME [DISK_NAME ...] --guest-flush

Sostituisci quanto segue:

  • DISK_NAME è il nome di uno o più dischi permanenti di cui vuoi creare snapshot.

L'interfaccia a riga di comando di Google Cloud attende che l'operazione restituisca uno stato di READY, FAILED o che raggiunga il timeout massimo e restituisca gli ultimi dettagli noti dello snapshot.

Server

Invia una richiesta POST al metodo disks.createSnapshot con l'opzione guestFlush attivata:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/createSnapshot?guestFlush=true

Sostituisci quanto segue:

  • PROJECT_ID: ID del progetto.
  • ZONE: la zona in cui si trovano la VM e il disco.
  • DISK_NAME: il nome del disco permanente di cui vuoi creare uno snapshot.

Crea una pianificazione di snapshot con guest-flush attivo

Utilizza gli snapshot pianificati per eseguire regolarmente e automaticamente il backup dei dischi permanenti a livello di zona e di regione. Se vuoi pianificare snapshot coerenti per l'applicazione per il tuo 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 aver configurato le impostazioni e creato gli script personalizzati, il seguente comando crea snapshot con coerenza oraria nelle applicazioni:

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 Creazione di snapshot pianificati dei dischi permanenti.

Risolvere i problemi

  • Esamina i log degli eventi di creazione degli snapshot:

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

    Converti in filtro avanzato.

    Sostituisci la casella di testo del filtro con il seguente testo:

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

  • Se si verifica un errore di script o un timeout, lo snapshot non viene creato. Consulta la pagina Prepararsi per gli snapshot coerenti. Il periodo di timeout massimo che puoi configurare nelle impostazioni è di 300 secondi. Prova a ripetere l'intera procedura utilizzando gli script di esempio.

  • È necessario collegare un disco permanente a una VM per acquisire uno snapshot del disco con guest-flush abilitato. Per informazioni su come creare una VM Linux e collegare un disco permanente, consulta la sezione Creazione di una VM.

Passaggi successivi