Kurz vor Aufgabe: Hilfe bei Verknüpfung von USV, NAS und Proxmox-Server

Markus 7

New Member
Jul 20, 2023
10
1
3
Hallo zusammen,

ich stehe seit ein paar Monaten vor dem Problem der Herausforderung, dass ich die Kombination einer APC-USV, einem kleinen Proxmox (8.0.4)-Server (Lenovo m910q mit dem entsprechenden NUT bzw. apcupsd-Dienst, alles unter Debian 12) und einer Synology-NAS nicht zum Laufen bekomme.

Was ich schon hinbekommen versucht habe ist:

  • Anschluss der USV über USB am Lenovo, Installation von NUT und Konfiguration der entsprechenden Server- und Client-Dienste und Verknüpfung meiner NASen. Diese fahren auch beim Ausfall der Spannungsversorgung geregelt herunter, nur der Proxmox-Server macht keine Anstalten, obwohl die entsprechenden Zeiten / Akku-Kapazitäten in der NUT-Konfiguration meines Erachtens richtig eingetragen waren. Anzeige der USV-Werte über das NUT-Webinterface oder die Anbindung von ioBroker klappten auch problemlos.

  • Anschluss der USV über USB am Lenovo, Installation vom apcupsd-Dienst. Damit schaffe ich es, den Proxmox-Server geregelt herunterzufahren, jedoch kenne die Synologys kein "apcupsd"-Protokoll, sie können nur das SNMP oder "Synology USV-Server" Protokolle, welches letztendlich auf sowas wie NUT beruht. Hatte dann versucht, NUT parallel zum apcupsd-Dienst zu installieren, die zwei haben sich aber wohl nicht vertragen, es lief nicht.

  • Anschluss der USV über USB an der Synology, Installation von NUT und Konfiguration des entsprechenden Client-Dienstes auf dem Lenovo-Server. Auch hier kein herunterfahren des Servers.

  • Anschluss der USV über USB an der Synology, Installation vom apcupsd-Dienst und Konfiguration auf dem Lenovo-Server. Ebenfalls kein herunterfahren des Servers beim Wegfall der Spannung.

Das bloß mal als grobe Übersicht, was ich schon probiert habe.

Ich habe nach Anleitungen aus dem Forum, aber auch aus diversen anderen Quellen gearbeitet, Videos und Tutorials dazu angeschaut, aber bekomme es einfach nicht hin, die drei Komponenten USV, NAS und Proxmox-Server lauffähig miteinander zu verbinden.
Jetzt habe ich sämtliche USV-Dienste (NUT, apcupsd) runtergeschmissen und stehe wieder am Anfang.

Vielleicht kann mir hier jemand etwas unter die Arme greifen, ich wäre sehr dankbar.


Viele Grüße
Markus
 
In der Synology die IP des PVE hinterlegt bei „erlaubten Servern“?

NUT clients müssen sich an der NAS als „monuser“ mit dem passwort „secret“ anmelden.
 
  • Like
Reactions: Markus 7
Hi,
läuft bei dir eh der nut-server UND der nut-client am pve-host? Hab auch grad nut mit kleiner USV auf einem PVE-hobel installed und konnte shutdown erfolgreich mit

Code:
upsmon -c fsd

testen. Ich wollte nicht warten bis Batterie leer ist ;-)

hab den default
Code:
SHUTDOWNCMD "/sbin/shutdown -h +0"
lassen.

lg
 
  • Like
Reactions: Markus 7
Außerdem nicht vergessen, dass der NUT Server erst alle NUT Clients runterfährt und danach erst sich selbst...außer die "HOSTSYNC" Deadline ist überschritten.

Hier mal meine Notizen zum Aufsetzen von NUT auf dem PVE 7.X falls es wem hilft:

Install NUT server​


Connect & identify UPS​

  • plug USB cable of UPS into servers USB port.
  • run this to find out the ID of the UPS: lsusb
    Result for the “Powerwalter Basic VI 800 STL” is so “0764:0601” is the needed ID:
    Bus 001 Device 004: ID 0764:0601 Cyber Power System, Inc. PR1500LCDRT2U UPS

Install nut​

  • run: apt update && apt install nut-client nut-server usbutils
  • Configure UPS: nano /etc/nut/ups.conf
    • add there at the end:
      Code:
      [Powerwalker]
          driver = usbhid-ups
          port = auto
          desc = "Powerwalker Basic VI 800 STL"
          offdelay = 300
          ondelay = 600
          override.battery.charge.low = 50
          override.battery.charge.warning = 75
          override.battery.runtime.low = 60
          override.battery.runtime.warning = 120
          ignorelb
  • restart driver: systemctl restart nut-driver

Configure NUT server​

  • configure server: nano /etc/nut/upsd.conf
    • add at the end:
      Code:
      LISTEN 127.0.0.1 3493
      LISTEN 192.168.42.42 3493
      LISTEN 192.168.43.42 3493
  • set NUT to act as server: nano /etc/nut/nut.conf
    • search for line: MODE=none
    • replace with: MODE=netserver
  • create NUT users: nano /etc/nut/upsd.users
    • add there at the bottom:
      Code:
      [upsmaster]
          password = SeeKeepass
          upsmon master
      
      [upsslave]
          password  = SeeKeepass
          upsmon slave
  • restart services: systemctl enable nut-server && systemctl start nut-server
  • test UPS status with: upsc Powerwalker@localhost

Configure NUT client​

  • run: nano /etc/nut/upsmon.conf
    • add this below the “MONITOR” block: MONITOR Powerwalker@192.168.43.42 1 upsmaster SeeKeepass master
    • add this below the “NOTIFYCMD” block: NOTIFYCMD /sbin/upssched
    • add this below the “NOTIFYFLAG” block:
      Code:
      NOTIFYFLAG ONLINE     SYSLOG+WALL+EXEC
      NOTIFYFLAG ONBATT     SYSLOG+WALL+EXEC
      NOTIFYFLAG LOWBATT    SYSLOG+WALL+EXEC
      NOTIFYFLAG FSD        SYSLOG+WALL+EXEC
  • By default the NUT master will only wait for 15 seconds for the slaves to shutdown before it shuts down itself. To increase that:
    • find the line: HOSTSYNC 15
    • replace with: HOSTSYNC 120
  • restart services: systemctl restart nut-client && systemctl enable nut-client

Create Shutdown Script​

NUT will only shutdown the hosts when the battery of the UPS will switch to “low”. To shutdown the hosts before that after a fixed time running on the battery, we need to create a script that will be run by upssched to handle this:
  • create dir & script: mkdir /etc/nut/upssched
    nano /etc/nut/upssched/upsscript
    add there:
    Code:
    #! /bin/sh
    case $1 in
        tooLongOnBattery)
            /sbin/upsmon -c fsd;;
        lowBattery)
            /sbin/upsmon -c fsd;;
        *)
            echo "Wrong argument";;
    esac
  • make script executable:
    Code:
    chown -R root:nut /etc/nut/upssched
    chmod -R 750 /etc/nut/upssched
  • tell upssched to use the script: nano /etc/nut/upssched.conf
    • find line: CMDSCRIPT /bin/upssched-cmd
    • replace with: CMDSCRIPT /etc/nut/upssched/upsscript
    • add this line under the “PIPEFN” block: PIPEFN /etc/nut/upssched/upssched.pipe
    • add this line under the “LOCKFN” block: LOCKFN /etc/nut/upssched/upssched.lock
    • add these lines at the bottom:
      Code:
      AT ONBATT * START-TIMER tooLongOnBattery 10
      AT ONLINE * CANCEL-TIMER tooLongOnBattery
      AT LOWBATT * EXEC lowBattery

Add Zabbix Template "Network UPS Tool Basic"​

  • run: nano /etc/zabbix/zabbix_agentd.d/userparameter_nut.conf
    • add there:
      Code:
      #USAGE:
      #Change upsc's command parameters for your setting in following format: upsname@nuthost. Like: ups@localhost
      #If you want montitor more than one ups, copy the configure section form #UPS CONF BEGIN tag to #UPS CONF END tag and set the upsc's parameters.
      
      #UPS CONF BEGIN
      UserParameter=ups.BatteryCharge,upsc Powerwalker@192.168.43.42 battery.charge > /dev/stdout 2> /dev/null
      UserParameter=ups.BatteryVoltage,upsc Powerwalker@192.168.43.42 battery.voltage > /dev/stdout 2> /dev/null
      UserParameter=ups.InputVoltage,upsc Powerwalker@192.168.43.42 input.voltage > /dev/stdout 2> /dev/null
      UserParameter=ups.OutputVoltage,upsc Powerwalker@192.168.43.42 output.voltage > /dev/stdout 2> /dev/null
      UserParameter=ups.UpsLoad,upsc Powerwalker@192.168.43.42 ups.load > /dev/stdout 2> /dev/null
      UserParameter=ups.UpsStatus,upsc Powerwalker@192.168.43.42 ups.status > /dev/stdout 2> /dev/null | sed 's/OL/ONLINE/g; s/OB/ON BATTERY/g;'
      #UPS CONF END
  • make executable and restart agent:
    Code:
    chown zabbix:zabbix /etc/zabbix/zabbix_agentd.d/userparameter_nut.conf
    chmod 750 /etc/zabbix/zabbix_agentd.d/userparameter_nut.conf
    systemctl restart zabbix-agent
  • add “Network UPS Tool Basic” Template to Host Voyager in Zabbix

Add cronjob workaround​

Somehow the UPS gets stale from time to time and once stale it won't recover. To fix this I created a one-liner that checks if the UPS state is stale and if it is, it will restart the NUT driver to recover it.
  • add cronjob: nano /etc/crontab
    • add there:
      Code:
      # check every minute if UPS is stale and in case it is restart driver
      * *     * * *   root    /usr/bin/upsc Powerwalker@localhost > /dev/null 2>&1 ; if [ $? -ne 0 ] ; then /usr/bin/systemctl restart nut-driver > /dev/null 2>&1 && echo "UPS stale...restarting driver..." >> /var/log/bm_cron.log ; fi
 
  • Like
Reactions: Markus 7
Ich war ein paar Tage "raus" aus dem Thema aber werde mir eure Vorschläge und Ideen gerne am Wochenende anschauen :)
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!