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:
- 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 snapshot sull'istanza VM (macchina virtuale).
- Crea uno snapshot con l'opzione
guest-flush
abilitata. L'opzioneguest-flush
avvia gli script prima e dopo lo snapshot.
Prima di iniziare
- Se vuoi utilizzare gli esempi a riga di comando in questa guida:
- Installa o aggiorna la versione più recente di Google Cloud CLI.
- Imposta una regione e una zona predefinite.
- Crea una VM Linux.
- Aggiorna l'ambiente ospite.
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.
Apri o crea il file di configurazione dell'ambiente ospite:
/etc/default/instance_configs.cfg
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
ofalse
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. 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
- Vai alla pagina Crea una nuova istantanea.
- Inserisci un Nome snapshot.
- Se vuoi, inserisci una descrizione dello snapshot.
- In Disco di origine, seleziona un disco esistente da cui vuoi creare uno snapshot.
- Seleziona una posizione di archiviazione.
- Seleziona l'opzione Abilita snapshot coerente con l'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 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:
- Nella console Google Cloud, vai alla pagina Logging della suite operativa di Google Cloud >
Log:
Vai alla pagina 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 la casella di testo 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 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.