Ich habe vor einiger Zeit meinen VMWare Server auf den VMWare ESXi Hypervisor umgestellt.
Die Frage war nun, wie mache ich mit dem neuen ESXi wirklich sinnvoll und kostenfrei Backups.
Diese sollten natürlich regelmäßig stattfinden, konsistent sein und ohne die virtuellen Maschinen herunterzufahren, zu stoppen oder zu pausieren funktionieren.
Nun ist im VMWare ESXi nicht standardmäßig SSH aktiviert, ich persönlich Arbeite aber sehr gern mit SSH.
Ausserdem wird dies benötigt um nicht die ganze Zeit direkt am ESXi Host zu sitzen um das Backup zu konfigurieren.
Achtung: Wie mann auf dem ESXi 4.1 SSH aktiviert kann man hier nachlesen.
Um nun SSH zu aktivieren muss man nur...
1. Direkt am ESXi Host ALT+F1 eingeben.
2. Im dort erschienenen Bildschirm blind (das was man tippt wird nicht angezeigt) unsupported eingeben, um in die Konsole vom ESXi Server zu kommen.
3. Dort öffnet man nun die Datei /etc/inetd.conf mit einem beliebigen Texteditor (z.B. vi oder nano).
4. In der Datei kommentiert man die ssh Zeile(n) (je nachdem ob man IPv4 oder IPv6 braucht) aus.
Alternativ dazu kann man einfach sed 's/#ssh/ssh/' /etc/inetd.conf > /etc/inetd.conf eintippen.
(dies ersetzt einfach alle vorkommen von #ssh gegen ssh.)
5. Diese Änderungen können nun einfach durch einen neustart werden, oder man schickt dem Prozess das HUP-Signal. Dies macht man einfach in dem man mittels ps | grep inetd die Prozess-ID raussucht und danach mithilfe von kill -HUP [Prozess-ID] ihm das HUP-Signal schickt.
Alternativ dazu kann man auch einfach kill -HUP `ps | grep inetd | grep -v grep | awk '{print $1}'` eingeben.
6. Um dies nun zu überprüfen müssen wir von einem anderen Computer aus mittels SSH oder nmap überprüfen ob es funktioniert. Dies ist zu empfehlen, wenn man nicht gleich zum ESXI Host laufen will wenns doch nicht funktioniert hat. Leider verfügt der ESXi Server selbst nicht über SSH, netstat oder nmap - somit wüsste ich aktuell keine Möglichkeit um dies direkt am Server zu überprüfen
Nun zum Backup am VMWare ESXi Server:
Normalerweise würde man ein Backup am VMWare ESXi mittels VCB (VMware Consolidated Backup) machen.
Allerdings ist dies kostenpflichtig bzw. kann kostenfrei nur 60-Tage getestet werden.
Nach langem Googlen und hin und her habe ich ein Shell-Script namens "ghettoVCB.sh" gefunden,
dieses kann man von hier beziehen. Dort wird nochmal genauestens erklärt wie man dieses konfiguriert etc... - allerdings möchte ich einen kleinen Überblick geben, wie ich meines konfiguriert habe:
1. zuerst habe ich auf der Festplatte wo meine VMs liegen (heißt bei mir primary) einen Ordner erstellt, in welchem ich das Script und alles was es benötigt ablegen werde. Nun ist das Script also unter /vmfs/volumes/primary/custom/ghettoVCB.sh abgelegt.
2. Darin habe ich eine Datei vmlist angelegt, in der ich in jede Zeile den Namen einer der VMs geschrieben habe, von denen ich ein Backup haben möchte (In unserem Beispiel nenne ich die VM Example VM 1).
Es gibt nun also die Datei vmlist in der Example VM 1 steht.
3. Da ich gerne für jede VM das Backup ein wenig anders definieren möchte, und ich ausserdem Backup auf 2 Festplatten mache, habe ich mir 2 Ordner namens conf und conf2 angelegt.
4. Darin habe ich jeweils eine Datei namens Example VM 1 angelegt, in der ich nun die Backup-konfiguration für diese VMWare hineinschreiben kann.
In dieser Datei steht also z.B. folgendes: (Die Sätze nach // sind Kommentare meinerseits, stehen aber nicht in der Datei (das // auch nicht) - ich weiß nicht ob das ghettoVCB-Script die Kommentare verträgt oder Fehler auswirft.)
VM_BACKUP_VOLUME=/vmfs/volumes/backupstore1 // Hier definiert man wo das Backup für die VM hinkommt.
DISK_BACKUP_FORMAT=thin // Dies bewirkt, dass die gesicherten VMDK-Dateien (Festplatten-Dateien) nicht komplett gesichert werden, sondern nur soweit wie sie auf der virtuellen Maschine belegt sind.
VM_BACKUP_ROTATION_COUNT=1 // Es wird nur ein Backup angelegt, nachdem das Backup angelegt wurde, wird das alte Backup gelöscht.
POWER_VM_DOWN_BEFORE_BACKUP=0 // Wenn man dies auf 1 setzt, wird die virtuelle Maschine vor dem Backup ausgeschaltet, dies wollen wir ja in diesem Fall nicht - darum 0.
ENABLE_HARD_POWER_OFF=0 // Wird dies aktiviert, kann die virtuelle Maschine auch einfach ausgeschaltet werden, z.B. wenn keine VMWare Tools installiert sind. (Trifft nur zu wenn POWER_VM_DOWN_BEFORE_BACKUP=1)
ITER_TO_WAIT_SHUTDOWN=4 // Hier kann man die Minuten angeben, die gewartet wird, bis die virtuelle Maschine ausgeschaltet wird (Trifft nur zu wenn POWER_VM_DOWN_BEFORE_BACKUP=1 und ENABLE_HARD_POWER_OFF=1)
POWER_DOWN_TIMEOUT=5 // Hier kann man die Minuten eintragen, die gewartet wird wenn das System Heruntergefahren wird - wenn es nach der Zeit noch nicht Heruntergefahren ist, wird es ignoriert und kein Backup gemacht. (Trifft nur zu wenn POWER_VM_DOWN_BEFORE_BACKUP=1)
SNAPSHOT_TIMEOUT=15 // Hier werden die Minuten eingetragen, die das Script wartet bis der Snapshot fertig ist. Ist der Snapshot nach der Zeit noch nicht fertig, wird diese virtuelle Maschine ignoriert und kein Backup gemacht. Um das Backup einer laufenden Maschine konsistent zu halten, muss vor dem Backup machen ein Snapshot erstellt werden. Von diesem wird dann ein Backup gemacht, danach wir dder Snapshot wieder entfernt.
ENABLE_COMPRESSION=0 // Hier wird die Komprimierung (Verdichtung) für das Backup de- oder aktiviert - in meinem fall habe ich diese ausgelassen das ich 1. genug Platz habe und 2. das sichern und zurücksichern somit schneller geht.
ADAPTER_FORMAT=buslogic // Hier gibt man den Adapter type des VMDK Files an (buslogic oder lsilogic)
VM_SNAPSHOT_MEMORY=0 // Wird dies aktiviert, wird der Speicher der virtuellen Maschine miteinbezogen in den Snapshot. (Ist Standardmäßig deaktiviert)
VM_SNAPSHOT_QUIESCE=0 // Wenn aktiviert, wird ein Snapshot von dem laufenden System so gemacht, als wäre das System nicht gelaufen. (Ist Standardmäßig deaktiviert)
VMDK_FILES_TO_BACKUP="all" // Hier kann man die VMDK-Dateien die man im Backup dabei haben möchte mit Beistrichen getrennt angeben (z.B. "hdd1.vmdk,hdd2.vmdk").
4. Da ich ja auf 2 Festplatten Backup mache, ändere ich im conf2 Ordner in der Example VM 1 Datei die erste Zeile auf VM_BACKUP_VOLUME=/vmfs/volumes/backupstore2.
5. Wer nun einmal Testen will, ob das ganze mit dem Backup funktioniert kann das ganze erstmal mit einem "Trockenlauf" mittels ./ghettoVCB.sh -f vmlist -c conf -d dryrun im Ordner wo das Script liegt ausführen, dies zeigt nun an welche Variablen wie gesetzt wurden und welche Maschinen wohin gesichert werden.
6. Um nun einen echten Testlauf zu starten, benutze ich gerne den Befehlt nohupvim-cmd vmsvc/snapshot.remove [VM-ID] entfernt werden. Die VM-ID bekommt man einfach raus indem man cat /tmp/vms_list ausführt, dort werden die virtuellen Maschinen aufgeführt, wobei die erste Zahl immer die VM-ID der jeweiligen virtuellen Maschine ist.
7. Ein echter Testlauf kann nun also mittels nohup ./ghettoVCB.sh -f vmlist -c conf & ausgeführt werden. Die Ausgabe von nohup wird in die Datei nohup.out geschrieben - mit dem Befehl tail -f nohup.out kann man sich die Ausgabe sozusagen "live" ansehen, welches mittels Strg+C abgebrochen werden kann.
8. Nachdem alles erfolgreich getestet wurde und funktioniert, wird es an der Zeit das Backup zu automatisieren. Ich möchte meine Backups gerne am Mittwoch und am Samstag jeweils um 1 Uhr in der früh machen, wobei das Mittwochs Backup auf eine andere Festplatte kommt wie das Samstags Backup (dies habe ich aber schon mittels conf und conf2 Ordner erledigt). Um nun die Backups automatisch laufen zu lassen benötigen wir crontabs, diese befinden sich auf dem ESXi Server in der Datei /var/spool/cron/crontabs/root, hier können die crontabs einfach eintragen (Erklärung unter: http://de.wikipedia.org/wiki/Cron).
9. Allerdings wird diese Datei bei jedem Start überschrieben, deswegen müssen wir sehen wie wir unsere Zeilen beim Starten in die Datei schreiben.
Meine 2 Crontabs für Mittwoch und Samstag sehen wie folgt aus:
0 1 * * 3 /vmfs/volumes/primary/custom/ghettoVCB.sh -f /vmfs/volumes/primary/custom/vmlist -c /vmfs/volumes/primary/custom/conf
0 1 * * 6 /vmfs/volumes/primary/custom/ghettoVCB.sh -f /vmfs/volumes/primary/custom/vmlist -c /vmfs/volumes/primary/custom/conf2
Um diese beiden Zeilen nun bei jedem Start in die /var/spool/cron/crontabs/root einzutragen brauche ich folgende 2 Zeilen:
echo "0 1 * * 3 /vmfs/volumes/primary/custom/ghettoVCB.sh -f /vmfs/volumes/primary/custom/vmlist -c /vmfs/volumes/primary/custom/conf" >> /var/spool/cron/crontabs/root
echo "0 1 * * 6 /vmfs/volumes/primary/custom/ghettoVCB.sh -f /vmfs/volumes/primary/custom/vmlist -c /vmfs/volumes/primary/custom/conf2" >> /var/spool/cron/crontabs/root
Wenn man diese Ausführt, werden meine 2 crontabs automatisch an die richtige Datei angehängt.
Um dies nun bei jedem Start auszuführen, brauche ich diese beiden Zeilen nur noch in die /etc/rc.local einzutragen.
Somit werden bei jedem Restart meine 2 crontabs wiederhergestellt.
Fertig - ein konsistentes, automatisches und kostenloses Backup meiner virtuellen Maschinen, ohne das ich diese Ausschalten muss für Backups.
Wenn nun wirklich die Festplatte kaputt gehen sollte, muss ich nur noch die Backup-VM im vSphere-Client "registrieren" und kann diese direkt von der Backup-Festplatte starten!
Kommentare
Kommentar hinzufügen