Crea snapshot disco coerente con l'applicazione Linux

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Puoi creare snapshot coerenti su applicazioni di dischi permanenti collegati alle istanze di macchine virtuali (VM) Linux. In generale, la qualità dello snapshot di un disco permanente dipende dalla capacità di recupero delle applicazioni dalle istantanee create durante i carichi di lavoro di scrittura intensivi. 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 tra applicazioni, metti in pausa app o processi del sistema operativo che scrivono i dati sul disco permanente, svuota i buffer del disco e sincronizza 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 dei dischi permanenti dell'applicazione, utilizza il processo seguente:

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

Prima di iniziare

Limitazioni

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

Creare script prima e dopo lo snapshot

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 gli script shell prima e dopo l'acquisizione prima e dopo l'acquisizione dello snapshot. Utilizza gli script pre e post per operazioni quali:

  • 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. Utilizza lo strumento disponibile per la tua app.
  • Sincronizzare il file system.

Il seguente esempio di codice mostra un semplice script pre-istantanea. Prendi nota dei 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
sudo fsfreeze -f [example-disk-location]

L'esempio di codice seguente mostra un semplice script di snapshot del post. Prendi nota dei primi #! caratteri.

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

Devi salvare gli script sulla VM nella directory /etc/google/snapshots/. Il percorso completo dello script precompilato 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 snapshot prima e dopo è un elenco dei dischi di cui viene eseguito lo snapshot. Puoi utilizzare questo argomento nei tuoi script per vari controlli. Ad esempio, se la tua VM ha più dischi collegati, ma nella tua richiesta di snapshot hai specificato un solo disco, puoi controllare quale disco è in esecuzione.

L'argomento ha il seguente formato:

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

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 degli snapshot coerenti con l'applicazione aggiornando un file di configurazione specifico sulla VM.

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

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

    [Snapshots]
    enabled = enabled
    timeout_in_seconds = timeout
    

    Sostituisci i valori in base alle descrizioni riportate 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 completare l'esecuzione dello script di snapshot prima o dopo un errore di timeout. Tieni presente che il numero di secondi che l'intera operazione di snapshot può richiedere per essere completato prima che un errore di timeout sia di 300 secondi per disco e che 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, Google Cloud CLI o l'API Compute Engine, crea uno snapshot con l'opzione guest-flush abilitata. Inizia a eseguire gli script prima e dopo lo snapshot prima e dopo l'acquisizione dello snapshot.

Console

  1. Vai alla pagina Crea una nuova istantanea.
  2. Inserisci un Nome snapshot.
  3. Se vuoi, inserisci una descrizione dello snapshot.
  4. In Disco di origine, seleziona un disco esistente da cui vuoi creare uno snapshot.
  5. Seleziona una posizione 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 gli snapshot.

Google Cloud CLI attende che l'operazione restituisca uno stato di READY, FAILED o raggiunga il timeout massimo e restituisce gli ultimi dettagli noti dello snapshot.

API

Effettua una richiesta POST per il metodo disks.createSnapshot method con l'opzione guestFlush abilitata:

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

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del tuo progetto.
  • ZONE: la zona in cui si trovano la VM e il disco.
  • DISK_NAME: il nome del disco permanente da cui vuoi creare lo snapshot.

Crea una pianificazione di snapshot con guest-flush abilitato

Usa 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 dall'applicazione per il tuo backup, utilizza l'opzione --guest-flush quando crei la pianificazione degli snapshot in modo che gli script snapshot pre e post 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:

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ù, vedi Creazione di snapshot pianificati di dischi permanenti.

Risolvere i problemi

  • Esamina i log degli eventi di creazione degli snapshot:

    1. Nella console Google Cloud, vai alla pagina Logging della suite operativa di Google Cloud > Log:
      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 per le istantanee prima e dopo.

  • Se si verifica un errore di script o un timeout, non viene creato alcuno snapshot. Consulta Preparare 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 permanente deve essere collegato 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