Backup di KVM qcow2 VPS in esecuzione


9

Voglio un metodo affidabile per eseguire il backup di KVM VPS del file qcow2, mentre sono in esecuzione. Dopo aver cercato a lungo, ho scoperto che possiamo usare rsync per il backup live. Ho usato il seguente comando per rsync:

rsync -avh /vms/base.qcow2 /backup/backup.qcow2

Ha funzionato correttamente. Ma temo che possa danneggiare l'immagine qcow2 di backup se il backup viene eseguito mentre VPS viene modificato a causa di operazioni di scrittura ed eliminazione (come l'installazione di nuovo software o aggiornamento).

Pertanto, prendere il backup dall'istantanea di VPS live sembra un'opzione più interessante.

Ho usato i seguenti comandi per eseguire il backup di VPS in esecuzione:

1.Crea Snapshot:

qemu-img create -f qcow2 -b base.qcow2 snapshot.qcow2

2.Convert istantanea in formato immagine raw (.img):

qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

Per ripristinare VPS:

3. Converti immagine grezza in immagine qcow2:

qemu-img convert -O qcow2 /backup/backup.img base.qcow2

Quindi possiamo avviare VPS su virsh create base.xmlcomando.

Anche se questo metodo funziona perfettamente, non sono ancora sicuro che questo sia il metodo corretto per eseguire il backup di VPS in esecuzione. Ho trovato una buona documentazione sui comandi qemu-img qui e qui . Ma non hanno menzionato nulla sulla conversione di istantanee di VPS live in immagini non elaborate.

Quale metodo è più adatto per il backup VPS live? La conversione dell'istantanea nell'immagine non elaborata è sicura?

Se potessi ottenere una bella documentazione dettagliata su come si comportano i file di snapshot e di base in determinate condizioni, sarà molto utile.

Forse possiamo anche convertire l'immagine di base qcow2 in un file di backup non elaborato anziché convertire un'istantanea. Quindi il flusso di comandi sarà:
1. Crea snapshot
2. Converti qcow2 di base in un'immagine raw di backup
3. Conferma modifiche di snapshot in immagine di base
4. Elimina snapshot

Ho provato questo e ha funzionato benissimo su piccoli VPS da 5 GB. Ma c'è qualche possibilità di errore o corruzione VPS quando la dimensione VPS è enorme?

Grazie in anticipo...


2
Questo è uno dei motivi per cui mi piace che le mie macchine virtuali risiedano su volumi logici. Hanno il supporto intrinseco per le istantanee.
Halfgaar,

Risposte:


12

L'unica cosa che ti manca è sospendere il filesystem guest prima di scattare l'istantanea, per assicurarti che sia coerente. Questo può essere fatto virsh domfsfreezese stai usando libvirtd.

Ad esempio, l'ordine delle operazioni è:

# Freeze guest filesystems
virsh domfsfreeze $VM_NAME

# Create snapshot
qemu-img create -f qcow2 -b $VM_NAME.qcow2 snapshot.qcow2

# Thaw guest filesystems
virsh domfsthaw $VM_NAME

# Take backup from snapshot
qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

Si noti che ciò richiede l' qemu-guest-agentinstallazione e l'esecuzione nella VM. A seconda della scelta di distribuzione e installazione, questo può o non può essere il caso.

La qemu-guest-agentè anche estensibile; puoi aggiungere degli script per supportare software specifici. Ad esempio, include uno script di esempio per mettere MySQL in uno stato coerente.


L'unica cosa che manca a questa risposta è la rimozione
dell'istantanea

2
@ BoscoD'mello A meno che tu non abbia dei dischi rigidi molto cattivi, dovrebbe essere meno di una frazione di secondo. Non vale la pena preoccuparsi.
Michael Hampton,

1
Purtroppo l'istantanea non ha funzionato per me. Quando virsh domfsfreeze $VM_NAMEprovo a farlo, mi viene negata l'autorizzazione sul mio filesystem guest. I filesystem dei miei ospiti sono criptati, non sono sicuro che sia importante.
un programmatore

2
@ Edward_178118 Dipende se il tuo carico di lavoro può essere sospeso per una frazione di secondo.
Michael Hampton,

2
@ Edward_178118 Operazioni di rete a latenza estremamente bassa, forse? Non ho mai incontrato nulla di grave.
Michael Hampton,

1

Esiste un altro approccio che prevede la creazione di snapshot temporanee durante il backup e il successivo ripristino.

# Create a temporary backup snapshot which records changes during backup
virsh snapshot-create-as vm backup-tmp --disk-only --atomic --quiesce --no-metadata --diskspec sda,file=/tmp/sda_temp.qcow2
# Now the main image is frozen and the changes are going into /tmp/sda_temp.qcow2

# Do your backup here
...

# Now we commit back data from temp snapshot into the main image
virsh blockcommit vm sda --active --pivot
# Remove the temporary snapshot file
rm /tmp/sda_temp.qcow2

Per ulteriori informazioni, consultare: https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit


1
Se in seguito sarà necessario il backup del disco, che proviene da un VM in esecuzione, come si ripristinerebbe? Non è necessario il contenuto della ram anche per il ripristino?
Adrian Zaugg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.