Sauvegarde de l'exécution de KVM qcow2 VPS

9

Je veux une méthode robuste pour prendre la sauvegarde de KVM VPS du fichier qcow2, lors de l'exécution. Après une longue recherche, j'ai découvert que nous pouvons utiliser rsync pour la sauvegarde en direct. J'ai utilisé la commande suivante pour rsync:

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

Cela a fonctionné correctement. Mais je crains que cela puisse corrompre l'image de sauvegarde qcow2 si la sauvegarde est prise pendant que VPS est modifié en raison des opérations d'écriture et de suppression (comme l'installation d'un nouveau logiciel ou la mise à jour).

Par conséquent, la sauvegarde à partir d'un instantané de VPS en direct semble une option plus intéressante.

J'ai utilisé les commandes suivantes pour prendre une sauvegarde de l'exécution de VPS:

1.Créez un instantané:

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

2.Convertir un instantané au format d'image brute (.img):

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

Pour restaurer VPS:

3. convertir l'image brute en image qcow2:

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

Ensuite, nous pouvons démarrer VPS par virsh create base.xmlcommande.

Même si cette méthode fonctionne également parfaitement, je ne sais toujours pas si c'est la bonne méthode pour prendre une sauvegarde de l'exécution de VPS. J'ai trouvé une bonne documentation sur les commandes qemu-img ici et ici . Mais ils n'ont rien mentionné sur la conversion d'un instantané de VPS en direct en image brute.

Quelle méthode est la plus appropriée pour la sauvegarde VPS en direct? La conversion d'un instantané en image brute est-elle sûre?

Si je pouvais obtenir une belle documentation détaillée sur le comportement des instantanés et des fichiers de base dans certaines conditions, ce serait très utile.

Peut-être pouvons-nous également convertir l'image de base qcow2 en fichier de sauvegarde brut au lieu de convertir un instantané. Ainsi, le flux de commandes sera:
1. Créer un instantané
2. Convertir la base qcow2 en image brute de sauvegarde
3. Valider les modifications de l'instantané dans l'image de base
4. Supprimer l'instantané

J'ai essayé cela et cela a bien fonctionné sur de petits VPS de 5 Go. Mais y a-t-il une possibilité d'erreur ou de corruption VPS lorsque la taille VPS est énorme?

Merci d'avance...

Bosco D'mello
la source
2
C'est l'une des raisons pour lesquelles j'aime que mes machines virtuelles résident sur des volumes logiques. Ils ont un support d'instantané inhérent.
Halfgaar

Réponses:

12

La seule chose qui vous manque est de suspendre le système de fichiers invité avant de prendre l'instantané, pour vous assurer qu'il est cohérent. Cela peut être fait avec virsh domfsfreezesi vous utilisez libvirtd.

Par exemple, l'ordre des opérations est le suivant:

# 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

Notez bien que cela nécessite d' qemu-guest-agentêtre installé et exécuté sur la machine virtuelle. Selon les choix de distribution et d'installation, cela peut ou non être le cas.

Le qemu-guest-agentest également extensible; vous pouvez y ajouter des scripts pour prendre en charge des logiciels spécifiques. Par exemple, il inclut un exemple de script pour mettre MySQL dans un état cohérent.

Michael Hampton
la source
La seule chose qui manque à cette réponse est la suppression des instantanés après la sauvegarde :)
dyasny
2
@ BoscoD'mello Sauf si vous avez de très mauvais disques durs, cela devrait être inférieur à une fraction de seconde. Cela ne vaut pas la peine de s'inquiéter.
Michael Hampton
1
Hélas, l'instantané n'a pas fonctionné pour moi. En tentant de le faire virsh domfsfreeze $VM_NAME, j'obtiens une autorisation refusée sur mon système de fichiers invité. Mes systèmes de fichiers invités sont cryptés, je ne suis pas sûr que cela compte.
un codeur
2
@ Edward_178118 Cela dépend si votre charge de travail peut être suspendue pendant une fraction de seconde.
Michael Hampton
2
@ Edward_178118 Opérations réseau à latence extrêmement faible, peut-être? Je n'ai jamais rencontré de problème.
Michael Hampton du
1

Il existe une autre approche qui consiste à créer des instantanés temporaires pendant la sauvegarde et à les réactiver par la suite.

# 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

Pour plus d'informations, voir: https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit

Thuffir
la source
1
Si vous avez besoin de votre disque sauvegardé plus tard, qui provient d'une VM en cours d'exécution, comment voulez-vous restaurer? N'avez-vous pas besoin du contenu du bélier aussi pour restaurer?
Adrian Zaugg