Diese Anleitung beschreibt die Anbindung und das automatische herunterfahren der VMs und des Clusters bei Stromausfall.

Dieser Beitrag bezieht sich auf die Konfiguration in einem Proxmox-Cluster.
Wie man einen einzelnen Host konfiguriert, erkläre ich in diesem Beitrag:

apcpusd funktioniert auch mit USV-Geräten anderer Hersteller.
Dieses Tutorial wurde mit den folgenden USV-Geräten getestet:
– APC SmartUPS 1500
– APC SmartUPS SRT 6000
– Eaton USV Ellipse ECO 650 USB DIN
– APC Back-UPS 500VA

Die USV muss per USB mit z.B. einem Raspberry Pi, PC o.ä. verbunden sein.
Ich benutze einen Raspberry Pi dafür.


Konfiguration auf dem UPS-Server

Das Tool apcupsd auf dem Raspberry Pi installieren.

apt update
apt install apcupsd

Die erste Konfigurationsdatei wie folgt anpassen:

nano /etc/apcupsd/apcupsd.conf
-------------------------------
UPSNAME APC-USV
UPSCABLE usb
UPSTYPE usb
DEVICE /dev/usb/hiddev0

NETSERVER on
NISIP 0.0.0.0

Konfiguration auf den UPS-Clients

Die folgenden Schritte müssen auf jedem Host im Proxmox Cluster eingerichtet werden.

Die erste Konfigurationsdatei wie folgt anpassen:

nano /etc/apcupsd/apcupsd.conf
-------------------------------
UPSCABLE ether
UPSTYPE net
DEVICE <RASPBERRY-IP>:3551

# Shutdown settings
TIMEOUT 300                # Maximale Zeit in Sekunden, bevor ein Shutdown erzwungen wird (0 = deaktiviert)
KILLDELAY 0              # Zeit in Sekunden, bevor die USV nach dem Shutdown abgeschaltet wird

NETSERVER off
NISIP <RASPBERRY-IP>

Nun ein Shutdown-Script auf jedem Host im Proxmox-Cluster erstellen:

nano /etc/apcupsd/killvms.sh
-----------------------------
#!/bin/bash

# Wartezeit, um sicherzustellen, dass der Shutdown-Befehl ausgelöst wird
sleep 5

# Liste aller laufenden VMs abrufen
running_vms=$(qm list | awk '/running/ {print $1}')

# VMs sicher herunterfahren
for vmid in $running_vms; do
    echo "Herunterfahren der VM $vmid ..."
    qm shutdown $vmid --skiplock
    sleep 2
done
sleep 300
/sbin/shutdown -h now

Das Script muss ausführbar gemacht werden:

chmod +x /etc/apcupsd/killvms.sh

Jetzt diese Config-Datei bearbeiten und den Inhalt am Ende der Datei einfügen:

nano /etc/apcupsd/apccontrol
-----------------------------
case "$1" in
    onbattery)
        echo "Stromausfall erkannt. Warten auf Shutdown-Befehl..."
        ;;
    doshutdown)
        echo "Shutdown-Befehl von apcupsd empfangen. VMs werden heruntergefahren..."
        /etc/apcupsd/killvms.sh
        ;;
    offbattery)
        echo "Stromversorgung wiederhergestellt. Abbruch des Shutdowns."
        # Hier könntest du ein Skript ausführen, das den Shutdown-Prozess abbricht,
        # falls dieser bereits gestartet wurde, was aber bei apcupsd meist automatisch
        # über die Abbruchsignale (SIGTERM/SIGKILL) passiert.
        ;;
esac

Nun diese Datei bearbeiten und den Wert ändern:

nano /etc/default/apcupsd
--------------------------
ISCONFIGURED=yes

Im Anschluss den Dienst neustarten.

systemctl restart apcupsd

Jetzt sollte der Shutdown Funktionieren. Mit diesem Befehl kann der Status und der Fortschritt abgerufen werden (aktualisiert live bei Stromausfall):

systemctl status apcupsd

Mit diesem Befehl können wir uns den Status der USV anzeigen lassen. Wenn die Ausgabe so ähnlich wie unten aussieht, funktioniert die Verbindung des Hosts zum Raspberry Pi.

apcaccess status

Von NRTX

Schreibe einen Kommentar

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