XenServer automatisch herunterfahren mit NUT

XenServer automatisch herunterfahren mit NUT

Unsere Kerninfrastruktur an der Schule ist mit USVs /UPS abgesichert. Wir haben leider immer wieder Stromausfälle (meist kurze) und mit Hilfe der USVs können wir diese zumindest etwas überbrücken. An unserer USV / UPS hängt ein Raspberry Pi, der als NUT Server eingerichtet ist. Wenn der Strom ausfällt und die USV / UPS auf Batteriebetrieb umschaltet, sendet der Raspberry Pi ab einem bestimmten Ladestand einen Befehl an alle verbunden Server. Diese fahren sich dann automatisch herunter. Alle unsere Virtuellen Maschinen, Backup-Systeme und Server werden damit heruntergefahren. Ein wesentlicher Server hat aber bisher noch gefehlt: der Virtualisierungshost. Deshalb möchte ich heute kurz beschreiben, wie man einen XenServer automatisch herunterfahren lassen kann, indem man ihn als NUT-Client einrichtet.

NUT-Client installieren

XenServer basiert auf CentOS, aber die Installation von Fremdpaketen ist nicht erlaubt. Man sollte sich auch bewusst sein, dass man evtl. keinen Support mehr erhält (falls man einen Supportvertrag hat), wenn man zusätzliche Pakete installiert.

Um den NUT-Client installieren zu können, mussten wir bei unserem XenServer 7 noch folgende Anpassung in der Datei /etc/yum.repos.d/CentOS-Base.repo vornehmen. Im Abschnitt [extras] haben wir in der Zeile baseurl $releaseserver mit einer 7 ersetzt.

Danach können wir das Epel-Repo einrichten und den NUT-Client installieren:

Nun schauen wir, welches Paket unseren NUT-Client zur Verfügung stellt und installieren es:

NUT einrichten

Nachdem der NUT-Client nun installiert ist, müssen wir ihn noch konfigurieren, damit unserer XenServer auch herunterfährt, falls der Strom ausfällt. Zuerst müssen wir noch eine Datei erstellen, um NUT mitzuteilen, dass unser XenServer ein Client ist:

In der Datei /etc/ups/upsmon.conf findet die Hauptkonfiguration statt. Dort ändern wir zwei Zeilen:

Je nach Konfiguration des NUT-Masters muss hier noch der UPS-Name, die IP, sowie Benutzername und Passwort angepasst werden.

Bevor unser XenServer herunterfährt, soll er vorher noch alle Virtuellen Maschinen ausschalten. Dazu habe ich folgendes Skript gefunden, welches wir nun herunterladen und ausführbar machen.

Damit der NUT-Client auch automatisch startet, müssen wir noch einen Systemd-Service einrichten. Dazu erstellen wir die Datei /etc/systemd/system/nut-monitor.service und fügen folgenden Inhalt ein:

Nun aktivieren wir diesen Service und starten ihn:

Mit systemctl status nut-monitor können wir uns anzeigen lassen, ob alles läuft:

Automatisches Herunterfahren testen

Zuerst können wir das Skript zum Herunterfahren des XenServers testen und schauen, ob auch alle gestarteten VMs heruntergefahren werden. Dazu führen wir das Skript einfach aus:

Um einen Stromausfall zu simulieren und können wir auf dem NUT Master folgenden Befehl absetzen:

Danach muss man allerdings alle Geräte wieder von Hand einschalten oder per Wake-on-Lan wecken.

Fazit

NUT ist ein tolles Projekt und es erlaubt uns sehr flexible Einsatzszenarien. Zur Zeit haben wir nur eine große UPS am NUT Master angeschlossen, aber es ist auch durchaus denkbar, mehrere UPS an den NUT Master anzuschließen. In Kombination mit Check_MK können wir somit den Status der USV / UPS ständig überwachen und bekommen ganz nebenbei auch eine Statistik, wie oft der Strom bei uns ausgefallen ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.