Letzte Woche haben wir unsere Xen-Server-Farm auf die aktuelle Version 5.5 hochgezogen. Herausragendste Merkmale des aktuellen Virtualisierers sind imho v.a. das Workload-Loadbalancing, die “native” Unterstützung unseres SAN sowie die Möglichkeit, Snapshots von laufenden virtuellen Maschinen anzulegen.
So ist es endlich möglich, automatisiert Backups der Server anzulegen. Ich habe für unsere Umgebung ein kleines Sicherungsscript erstellt, das für einen Server einen Snapshot anlegt, aus diesem eine virtuelle Maschine generiert, und diese in einen NFS-Share wegsichert:
#!/bin/bash
### Backup einer virtuellen Maschine in NFS-Share
# $1 – Name der zu sichernden Maschine
#
# (w) 07/2009 Stefan Peters
#PATH=/opt/xensource/bin:/sbin:/bin:/usr/bin:$PATH
# Variablen definieren
BACKUP_SHARE=server:/var/nfsshare
BACKUP_DIR=/media/backupDATUM=$(date +%F)
logger -s “Backup VM ${1} – Backup gestartet”
# Existiert das Zielverzeichnis für den NFS-Mountpoint?
if [ ! -d ${BACKUP_DIR} ]; then
mkdir -p ${BACKUP_DIR}
fi# pruefen, ob die NFS-Freigabe fuer die Backups gemountet ist und ggf. einhaengen
mount |grep ${BACKUP_DIR} >/dev/null
if [ "$?" -ne "0" ]; then
mount.nfs $BACKUP_SHARE $BACKUP_DIR 2>/dev/null
if [ "$?" -gt "0" ]; then
logger -s “Backup VM ${1} – Backup-Share konnte nicht gemounted werden”
exit 1
fi
fi# pruefen, ob die zu sichernde VM existiert
xe vm-list |egrep “RW\): ${1}$” >/dev/null
if [ "$?" -ne "0" ]; then
logger -s “Backup VM ${1} – VM existiert nicht”
exit 1
fi# Snapshot erstellen
strSnapshot=$(xe vm-snapshot vm=${1} new-name-label=${DATUM}_${1})# Snapshot zu VM wandeln
xe template-param-set is-a-template=false uuid=${strSnapshot}# Snapshot sichern
BACKUP_VM=${BACKUP_DIR}/${1}.xva
BACKUP_VM_OLD=${BACKUP_VM}_TMPif [ -f "${BACKUP_VM}" ]; then
mv “${BACKUP_VM}” “${BACKUP_VM_OLD}”
fixe vm-export vm=${strSnapshot} filename=”${BACKUP_VM}”
if [ "$?" -ne "0" ]; then
logger -s “Backup VM ${1} – Backup fehlgeschlagen”
else
rm “${BACKUP_VM_OLD}”
logger -s “Backup VM ${1} – Backup erfolgreich abgeschlossen”
fi# Snapshot loeschen
xe vm-uninstall uuid=${strSnapshot} force=true# Backup-Share unmounten
umount $BACKUP_DIR 2>/dev/nullexit 0
Dem Script wird als Parameter der Name der zu sichernden Maschine mitgegeben.
Wenn bereits eine Sicherung der betreffenden Maschine existiert, so wird diese zunächst umbenannt und erst nach dem erfolgreichem Abschluss der Serversicherung gelöscht.
Pingback: Yet another Linux Blog » Blog Archive » Xen-Snapshots ballern Storage zu
sehr schön, ich habe praktisch genau das selbe script geschrieben, aber ohne den trick mit xe template-param-set is-a-template=false.
ich möchte das ganze aber noch so erweitern, dass die images/xva’s direkt komprimiert werden. da template-export aber weder in fifos (siehe http://pascal-schwarz.ch/blog/index.php/2009/08/28/compression-using-fifos/) noch nach stdout schreibt, sehe ich dafür irgendwie keine lösung… hast Du da evtl noch ne idee?
@Pascal:
So adhoc fällt mir da jetzt auch keine Lösung ein. Einzig ein komprimierendes Filesystem auf dem Backup-Datenträger wäre wohl möglich. Da gibt es beispielsweise compFUSEd (http://freshmeat.net/projects/compf/).
Aber ob das wirklich sinnvoll ist, steht auf einem anderen Blatt. Und außerdem scheint compFUSEd auch seit 2007 nicht mehr weiterentwickelt worden zu sein – auch wenn Anfang 2008 noch durchzuführende Arbeiten an dem Projekt angegeben wurden.
Ich sehe aber mal, ob ich da eine andere Lösung finde.
Gruß
Stefan
Ich habe dazu auch fusecompress gefunden, das scheint mir neuer und funktioniert bei mir auf Ubuntu ziemlich gut. Im XenServer installieren ist mir bisher aber noch nicht gelungen.
Es ist auch nicht soooo wichtig, einfach dünkts mich Schade, soviel Speicherplatz zu “verschwenden”, schliesslich lassen sich die XVA’s doch sehr gut komprimieren, in meinen Tests mit 7Zip und LZMA (OK, das ist ziemlich stark komprimiert), zwischen 30 und 80% Platzersparnis.
Wunderbares Skript, hab’s gleich mal bei uns eingeführt
Wieso sowas nicht gleich von Citrix mitgeliefert wird…
Eine Änderung habe ich eingeführt: auf “meinem” Speichermedium (Thecus 8800) wird die .xva als root:root anelegt mit Zugriffsrechten, die es bei Zugriff über CIFS für “Otto Normaladmin” unsichtbar bleiben lassen. also einfach vor dem “Backup erfolgreich abgeschlossen” noch ein chmod 644 eingefügt. Damit kann ich’s dann auch wieder einfacher über die graphische Oberfläche reimportieren….
Hat es einen Grund, wieso das Skript das Backup-Share nicht wieder umounted?
@Engwuck:
stimmt, der Unmount fehlte. Habe ich berichtigt. Vielen Dank.
Gruß
Stefan
@Engwuck
sowas liefert Citrix schon mit, allerdings lassen sie sich diesen Service etwas kosten: Scheduled Backups etc.
Besten Dank. Genau nach so was hatte ich gesucht
Hi
Sieht ja nett aus
Ist das mittlerweile auch mit der OpenSource Version von XEN möglich?
Derzeit experementiere ich mit nativem ZFS unter Linux. ZFS kann Kompression. Reiser4 auch. Nebenbei bemerkt.
@Darko:
Die Open-Source-Variante unterstützt das imho zur Zeit noch nicht. Da würde ich wohl LVM-Snapshots machen.
Gruß
Stefan
Wie performant ist den das? Wenn ich jetzt 120 VMs auf meinem BB laufen hab und dann das Skript ausführe, kann es da zu Lags oder Problemen kommen?