XenServer automatisch herunterfahren

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.

$ nano /ect/yum.repos.d/CentOS-Base.repo
...
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&rep$
baseurl=http://mirror.centos.org/centos/7/extras/$basearch/
...

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

$ yum clean all
$ yum --enablerepo=extras -y install epel-release

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

$ yum provides /usr/sbin/upsmon
Geladene Plugins: fastestmirror
Loading mirror speeds from cached hostfile
* epel: mirrors.bangmodhosting.com
nut-2.7.2-3.el7.x86_64 : Network UPS Tools
Quelle : epel
Übereinstimmung von:
Dateiname : /usr/sbin/upsmon
$ yum install nut-client-2.7.2-3.el7.x86_64

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:

$ nano /etc/ups/nut.conf
MODE=netclient

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

$ nano /etc/ups/upsmon.conf
...
MONITOR ups@192.168.1.2 1 upsremote password slave
...
SHUTDOWNCMD "/etc/ups/xen-shutdown.sh"
...

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.

$ cd /etc/ups/
$ wget https://raw.githubusercontent.com/serrc-techops/NUT-Configuration/master/slave/xen/xen-shutdown.sh
$ chmod +x xen-shutdown.sh

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:

$ nano /etc/systemd/system/nut-monitor.service

[Unit]
Description=Network UPS Tools - power device monitor and shutdown controller
After=local-fs.target network.target

[Service]
ExecStart=/usr/sbin/upsmon
PIDFile=/run/nut/upsmon.pid
Type=forking

[Install]
WantedBy=multi-user.target

Nun aktivieren wir diesen Service und starten ihn:

$ systemctl enable nut-monitor.service
$ systemctl daemon-reload
$ systemctl start nut-monitor

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

nut-monitor.service - Network UPS Tools - power device monitor and shutdown controller
Loaded: loaded (/etc/systemd/system/nut-monitor.service; enabled; vendor preset: disabled)
Active: active (running) since Mi 2018-04-18 17:13:42 ICT; 1 day 12h ago
Process: 997 ExecStart=/usr/sbin/upsmon (code=exited, status=0/SUCCESS)
Main PID: 1001 (upsmon)
CGroup: /system.slice/nut-monitor.service
├─1000 /usr/sbin/upsmon
└─1001 /usr/sbin/upsmon

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:

$ sh /etc/ups/xen-shutdown.sh

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

$ sudo upsmon -c fsd

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.

Leave a Reply:

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert