Puoi creare snapshot coerenti di applicazioni di dischi permanenti collegati a istanze di macchine virtuali (VM) Linux. In generale, la qualità dello snapshot del disco permanente dipende dall'efficacia con cui le applicazioni possono recuperare dagli snapshot creati durante carichi di lavoro di scrittura intensi. Gli snapshot coerenti dell'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 le app o i processi del sistema operativo che scrivono dati sul disco permanente, eliminano i buffer del disco e sincronizzano 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 delle applicazioni vengano completate e acquisite nel backup.
Per creare uno snapshot dei tuoi dischi permanenti coerente con l'applicazione, utilizza il seguente processo:
- Per preparare l'ambiente guest alla coerenza dell'applicazione, crea script shell personalizzati da eseguire prima e dopo l'acquisizione dello snapshot
- Configura le impostazioni degli snapshot sulla tua istanza VM (macchina virtuale).
- Crea uno snapshot con l'opzione
guest-flush
attivata. L'opzioneguest-flush
avvia gli script pre e post snapshot.
Prima di iniziare
- Crea una VM Linux.
- Aggiorna l'ambiente guest.
-
Configurare l'autenticazione.
Seleziona la scheda relativa a come intendi utilizzare gli esempi di questa pagina:
Console
Quando utilizzi la console Google Cloud per accedere ai servizi e alle API Google Cloud, non è necessario configurare l'autenticazione.
gcloud
-
Installa Google Cloud CLI, quindi inizializzalo eseguendo il comando seguente:
gcloud init
- Imposta una regione e una zona predefinite.
REST
Per utilizzare gli esempi di API REST su questa pagina in un ambiente di sviluppo locale, devi utilizzare le credenziali che fornisci allgcloud CLI.
Installa Google Cloud CLI, quindi inizializzalo eseguendo il comando seguente:
gcloud init
-
Limitazioni
- La coerenza dell'applicazione è garantita solo dal comportamento degli script personalizzati prima e dopo lo snapshot, non dall'operazione dello snapshot stessa.
- Quando utilizzi l'opzione
guest-flush
nella richiesta di creazione di snapshot, non viene creato alcuno snapshot in caso di errore o timeout dello script.
Creare script pre e post snapshot
Prima di procedere, aggiorna l'ambiente guest in modo da eseguire il software più recente sulla tua VM Linux.
Per facilitare la coerenza dell'applicazione, crea script shell prima e dopo lo 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 i dati sul disco permanente.
- Esegui lo svuotamento dei buffer del disco. Ad esempio, MySQL ha un'istruzione
FLUSH
. Utilizza lo strumento disponibile per la tua app. - Sincronizza il file system.
L'esempio di codice seguente mostra uno script di pre-istantanea. Nota i caratteri #!
iniziali. L'esecuzione di fsfreeze -f
blocca qualsiasi processo in esecuzione che tenta di accedere al file system, pertanto utilizzalo con cautela se la tua applicazione è sensibile alla latenza.
#!/bin/bash sudo fsfreeze -f [example-disk-location]
L'esempio di codice seguente mostra uno script di snapshot del post. Nota i
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 prescript deve essere /etc/google/snapshots/pre.sh
, mentre quello dello script del post 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 elenco di dischi di cui viene eseguito lo 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 quale disco viene sottoposto a snapshot.
L'argomento è formattato come segue:
- Dischi collegati a SCSI: un elenco separato da virgole di coppie
<target/lun>
. - Dischi collegati a NVME: un elenco separato da virgole di coppie
<nvme:namespace>
.
Ad esempio, il disco di avvio 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 guest
Configura le impostazioni degli snapshot coerenti con l'applicazione aggiornando un file di configurazione specifico sulla VM.
Apri o crea il file di configurazione dell'ambiente guest:
/etc/default/instance_configs.cfg
Aggiungi la seguente sezione al file di configurazione:
[Snapshots] enabled = enabled timeout_in_seconds = timeout
Sostituisci i valori in base alle seguenti descrizioni:
Chiave Valore Predefinito Descrizione enabled
true
ofalse
false
Indica se la funzionalità di snapshot coerente dell'applicazione è abilitata. timeout_in_seconds
Numero intero [0, 300] 60 Numero di secondi che lo script pre o post snapshot può richiedere per terminare l'esecuzione prima che si verifichi un errore di timeout. Tieni presente che il numero di secondi necessari per completare l'intera operazione di snapshot prima che un errore di timeout sia pari a 300 secondi per disco e questo valore non è configurabile. 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 REST, crea uno snapshot con l'opzione guest-flush
abilitata. Viene avviata l'esecuzione degli script pre e post snapshot prima e dopo l'acquisizione dello snapshot.
Console
- Vai alla pagina Crea un nuovo snapshot.
- Inserisci un Nome per lo snapshot.
- (Facoltativo) Inserisci una descrizione dello snapshot.
- In Disco di origine, seleziona un disco esistente da cui creare uno snapshot.
- Seleziona una posizione di archiviazione.
- Seleziona l'opzione Abilita snapshot coerente dell'applicazione.
- 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.
Google Cloud CLI attende che l'operazione restituisca uno stato READY
, FAILED
o raggiunga il timeout massimo e restituisca gli ultimi dettagli noti dello snapshot.
REST
Effettua una richiesta POST
al metodo disks.createSnapshot
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
: il tuo ID progetto.ZONE
: la zona in cui si trovano la VM e il disco.DISK_NAME
: il nome del disco permanente per il quale vuoi creare uno snapshot.
Crea una pianificazione di snapshot con guest-flush
abilitato
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 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 aver configurato le impostazioni e creato script personalizzati, il seguente comando crea snapshot orari coerenti dell'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 Creazione di snapshot pianificati di dischi permanenti.
Risoluzione dei problemi
Esamina i log degli eventi di creazione di snapshot:
- Nella console Google Cloud, vai alla pagina Logging della suite operativa di Google Cloud >
Log:
Vai a Esplora log - Vai a Esplora log nel riquadro di navigazione a sinistra.
- Nell'elenco Filtra per etichetta o testo, seleziona Converti in filtro avanzato.
Sostituisci il campo del filtro con il seguente testo:
resource.type="gce_disk" jsonPayload.event_subtype="compute.disks.createSnapshot"
- Nella console Google Cloud, vai alla pagina Logging della suite operativa di Google Cloud >
Log:
Se non viene trovato nessuno script, non viene creato alcuno snapshot. Assicurati di aver seguito i passaggi descritti in Creare script pre e post snapshot.
In caso di errore o timeout dello script, non viene creato alcuno snapshot. Consulta Preparazione per snapshot coerenti. Tieni presente che il periodo di timeout massimo che puoi configurare nelle impostazioni è di 300 secondi. Prova a ripetere l'intera procedura utilizzando gli script di esempio.
Un disco permanente deve essere collegato a una VM per acquisire uno snapshot del disco in cui
guest-flush
è abilitato. Per informazioni su come creare una VM Linux e collegare un disco permanente, consulta Creazione di una VM.