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.
Der Beitrag XenServer automatisch herunterfahren mit NUT erschien zuerst auf .:zefanjas:..