J'ai un certain nombre de machines virtuelles Xen exécutées sur un certain nombre de serveurs Linux. Ces machines virtuelles stockent leurs images de disque dans des volumes Linux LVM avec des noms de périphériques tels que / dev / xenVG / SERVER001OS, etc. J'aimerais faire des sauvegardes régulières de ces images de disque afin que je puisse restaurer les machines virtuelles au cas où nous en aurions besoin (les périphériques LVM sont déjà mis en miroir avec DRBD entre deux machines physiques chacune, je suis juste paranoïaque supplémentaire ici).
Comment dois-je procéder? Évidemment, la première étape consiste à prendre un instantané du périphérique LVM, mais comment puis-je transférer les données vers un serveur de sauvegarde de la manière la plus efficace possible? Je pourrais simplement copier l'ensemble de l'appareil, quelque chose comme:
dd if=/dev/xenVG/SERVER001OS | ssh administrator@backupserver "dd of=/mnt/largeDisk/SERVER001OS.img"
... mais cela prendrait beaucoup de bande passante. Existe-t-il un outil de type rsync pour synchroniser le contenu de blocs de disques entiers entre des serveurs distants? Quelque chose comme:
rsync /dev/xenVG/SERVER001OS backupServer:/mnt/largeDisk/SERVER001OS.img
Si je comprends correctement la page de manuel de rsync, la commande ci-dessus ne fonctionnera pas réellement (le sera-t-elle?), Mais elle montre ce que je vise. Je comprends que l'option --devices rsync consiste à copier les périphériques eux-mêmes, et non le contenu de ces périphériques. Faire une copie locale de l'image de la machine virtuelle avant de la synchroniser avec le serveur distant n'est pas une option car il n'y a pas d'espace disque.
Existe-t-il un utilitaire pratique qui peut synchroniser entre les périphériques de bloc et un fichier de sauvegarde sur un serveur distant? Je peux en écrire un si je le dois, mais une solution existante serait mieux. Ai-je manqué une option rsync qui fait cela pour moi?
Bien qu'il existe des correctifs «périphérique d'écriture» et «périphérique de copie» pour RSync, ils ne fonctionnent bien que sur les petites images (1 à 2 Go). RSync passera des heures à chercher des blocs correspondants sur des images plus grandes et il est presque inutile de 40 Go ou de périphériques / fichiers plus grands.
Nous utilisons ce qui suit pour effectuer une comparaison de somme de contrôle par 1 Mo, puis copions simplement le contenu s'il ne correspond pas. Nous l'utilisons pour sauvegarder des serveurs sur un hôte virtuel aux États-Unis vers un système de sauvegarde au Royaume-Uni, sur Internet public. Très peu d'activité du processeur et de performances de capture instantanée ne se produisent qu'après des heures:
Créer un instantané:
Ensemencement initial:
Sauvegarde incrémentielle nocturne (envoie uniquement les blocs modifiés):
Supprimer l'instantané:
la source
read ARGV,$buf,1024
au lieu deread STDIN,$buf,1024
, @ sysadmin1138? (J'essaie de répondre à stackoverflow.com/q/22693823/2987828 et je ne comprends pas ARGV ici). J'utilise tous les jours la variante dans la question stackoverflow.com/q/22693823/2987828 et ça marche bien.Les personnes intéressées à le faire spécifiquement avec des instantanés LVM pourraient aimer mon outil lvmsync , qui lit la liste des blocs modifiés dans un instantané et envoie uniquement ces modifications.
la source
Jetez un oeil à Zumastor Linux Storage Project, il implémente la sauvegarde "snapshot" en utilisant "rsync" binaire via l' outil ddsnap .
Depuis la page de manuel:
ddsnap fournit une réplication de périphérique de bloc grâce à une fonction d'instantané au niveau du bloc capable de contenir efficacement plusieurs instantanés simultanés. ddsnap peut générer une liste de blocs de snapshots qui diffèrent entre deux snapshots, puis envoyer cette différence sur le câble. Sur un serveur en aval, écrivez les données mises à jour sur un périphérique de bloc instantané.
la source
Il existe un script python appelé blocksync qui est un moyen simple de synchroniser deux périphériques de bloc sur un réseau via ssh, en ne transférant que les modifications.
Je l'ai récemment piraté pour le nettoyer et le changer pour utiliser le même algorithme de somme de contrôle rapide que rsync ( Adler-32 ).
la source
Si vous essayez de minimiser l'espace vide que vous enverriez à travers le fil avec une plaine
dd
, ne pourriez-vous pas simplement le diriger vers gzip avant de le diriger vers ssh?par exemple dd if = / dev / xenVG / SERVER001OS | gzip | administrateur ssh @ backupserver "dd of = / mnt / largeDisk / SERVER001OS.img.gz"
la source
Gardez simplement à l'esprit que les performances d'un système doté d'instantanés LVM sont proportionnelles au nombre d'instantanés.
Par exemple, les performances de Mysql avec des instantanés lvm
la source
En plus de la réponse de David Herselman - le script suivant se synchronisera avec un appareil local:
Autant que je sache, les deux scripts ont d'abord été publiés sur lists.samba.org .
la source
C'est une vieille question, mais personne n'a mentionné deux outils très utiles pour synchroniser efficacement deux périphériques de bloc:
bdsync , qui utilise une approche diff-transfer-and-patch;
blocksync (ici vous pouvez trouver ma version améliorée ), qui utilise une approche de réécriture sur place.
Je suggère fortement de jouer avec les deux outils et de sélectionner celui qui s'adapte le mieux à votre utilisation prévue.
la source
Après plusieurs années de recherche, j'ai récemment créé un outil de synchronisation des snapshots LVM entre serveurs. Il est conçu pour utiliser un minimum d'E / S et permettre aux systèmes de fonctionner pendant la synchronisation.
Il est similaire à l'envoi / réception ZFS en ce sens qu'il synchronise les différences entre les instantanés LVM et utilise un provisionnement fin afin que l'impact sur les performances soit minime.
J'aimerais avoir des commentaires, alors s'il vous plaît jetez un œil.
la source
Il y avait quelques efficacités à apporter à ce script:
la source