Files
ROMFASTSQL/proxmox/ups/docs/UPS-SHUTDOWN-README.md
Marius 87b9709a0d Add complete UPS monitoring system with monthly battery testing
This commit adds a comprehensive UPS monitoring and management system for
the Proxmox cluster with automated shutdown orchestration and monthly
battery health testing.

Features:
- NUT (Network UPS Tools) configuration for INNO TECH USB UPS
- Automated cluster shutdown on power failure (3-minute grace period)
- Monthly automated battery testing with health evaluation
- Email notifications via PVE::Notify system
- WinNUT monitoring client for Windows VM 201

Components added:
- config/: NUT configuration files (ups.conf, upsd.conf, upsmon.conf, etc.)
- scripts/ups-shutdown-cluster.sh: Orchestrated cluster shutdown
- scripts/ups-monthly-test.sh: Monthly battery test with email reports
- scripts/upssched-cmd: Event handler for UPS state changes
- docs/: Complete installation and usage documentation

Key findings:
- UPS battery.charge reporting has 10-40 second delay after test start
- Test must monitor voltage drop (1.5-2V) and charge drop (9-27%)
- Battery health evaluation: EXCELLENT/GOOD/FAIR/POOR based on discharge rate
- Email notifications use Handlebars templates without Unicode emojis for compatibility

Configuration:
- UPS: INNO TECH (Voltronic protocol, vendor 0665:5161)
- Primary node: pvemini (10.0.20.201) with USB connection
- Monthly test: cron 0 0 1 * * /opt/scripts/ups-monthly-test.sh
- Shutdown timer: 180 seconds on battery before cluster shutdown

Documentation includes complete installation guides for NUT server,
WinNUT client, and troubleshooting procedures.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-06 21:39:46 +03:00

5.7 KiB

Documentație Sistem UPS Shutdown Orchestrat

Configurare Completă

Hardware

  • UPS: INNO TECH USB to Serial (ID: 0665:5161)
  • Conectat la: pvemini (10.0.20.201) - via USB
  • Cluster Proxmox:
    • pvemini (10.0.20.201) - PRIMARY (are UPS-ul conectat)
    • pve1 (10.0.20.200) - SECONDARY
    • pve2 (10.0.20.202) - SECONDARY

Software

  • NUT (Network UPS Tools) versiunea 2.8.0
  • WinNUT pe VM 201 (Windows 11) pentru monitorizare vizuală

Fișiere de Configurare

1. /etc/nut/ups.conf

Configurează driver-ul pentru UPS:

[nutdev1]
    driver = nutdrv_qx
    port = auto
    vendorid = 0665
    productid = 5161
    subdriver = cypress
    desc = "UPS Cypress via USB"

2. /etc/nut/upsd.conf

Server NUT - ascultă pe localhost și rețea:

LISTEN 127.0.0.1 3493
LISTEN 10.0.20.201 3493

3. /etc/nut/upsd.users

Utilizatori autorizați:

[admin]
    password = parola99
    actions = SET
    instcmds = ALL
    upsmon master

4. /etc/nut/upsmon.conf

Monitor local:

MONITOR nutdev1@localhost 1 admin parola99 master
NOTIFYCMD /usr/sbin/upssched
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC

5. /etc/nut/upssched.conf

Scheduler pentru evenimente:

  • ONBATT: Așteaptă 180 secunde (3 minute) înainte de shutdown
  • LOWBATT: Shutdown imediat
  • ONLINE: Anulează toate timer-ele

Scripturi Create

1. /usr/local/bin/ups-shutdown-cluster.sh

Script principal de shutdown orchestrat

Ordinea de operații:

  1. Verifică status UPS (trebuie OB sau LB)
  2. Oprește toate VM-urile de pe toate nodurile (paralel)
  3. Așteaptă 90 secunde
  4. Shutdown pve1 și pve2 (secundare)
  5. Așteaptă 30 secunde
  6. Shutdown pvemini (primary - ultimul)

Logare: /var/log/ups-shutdown.log

2. /usr/local/bin/ups-shutdown-test.sh

Script de test (DRY RUN) - NU oprește nimic

Folosește-l pentru a testa:

/usr/local/bin/ups-shutdown-test.sh
tail -f /var/log/ups-shutdown-test.log

3. /usr/local/bin/upssched-cmd

Handler pentru evenimente UPS

Apelat automat de upssched când:

  • UPS pe baterie 3 minute → lansează shutdown orchestrat
  • Baterie scăzută → shutdown imediat
  • Pierdere comunicație → doar logging

Logare: /var/log/ups-events.log

Testare și Verificare

Verificare Status UPS

# Status general
upsc nutdev1

# Doar status
upsc nutdev1 ups.status

# Baterie
upsc nutdev1 battery.charge

# Tensiuni
upsc nutdev1 input.voltage output.voltage

Verificare Servicii

systemctl status nut-server
systemctl status nut-monitor
journalctl -u nut-server -f
journalctl -u nut-monitor -f

Test Manual Shutdown (DRY RUN)

/usr/local/bin/ups-shutdown-test.sh

Test Simulare UPS pe Baterie

⚠️ ATENȚIE: Acest test va iniția shutdown real dacă îl lași 3 minute!

# Deconectează fizic UPS-ul de la priză pentru 30 secunde
# Monitorizează logs:
tail -f /var/log/ups-events.log

# Reconectează înainte de 3 minute pentru a anula shutdown-ul

Monitorizare din WinNUT (VM 201)

Conexiune

  • Server: 10.0.20.201
  • Port: 3493
  • UPS Name: nutdev1
  • Username: admin
  • Password: parola99
  • Polling Interval: 15 secunde

Ce Vezi în WinNUT

  • Input/Output Voltage
  • Frequency
  • Battery Charge (%)
  • Battery Voltage
  • UPS Load (%)
  • UPS Status (Online/On Battery/Low Battery)

Scenarii de Funcționare

Scenario 1: Întrerupere Scurtă (< 3 minute)

  1. Curent se întrerupe → UPS trece pe baterie
  2. Timer de 180 secunde pornește
  3. Curent revine → Timer anulat
  4. Rezultat: Niciun sistem nu se oprește

Scenario 2: Întrerupere Lungă (> 3 minute)

  1. Curent se întrerupe → UPS trece pe baterie
  2. Timer 180 secunde expiră
  3. Scriptu de shutdown pornește:
    • VM-uri se opresc pe toate nodurile
    • După 90s: pve1, pve2 se opresc
    • După încă 30s: pvemini se oprește
  4. Rezultat: Shutdown orchestrat complet

Scenario 3: Baterie Scăzută Imediată

  1. UPS raportează LOWBATT
  2. Shutdown IMEDIAT (fără timer)
  3. Același flux de shutdown orchestrat
  4. Rezultat: Shutdown rapid pentru protecție

Loguri și Troubleshooting

Fișiere de Log

/var/log/ups-shutdown.log       # Shutdown orchestrat real
/var/log/ups-shutdown-test.log  # Test dry-run
/var/log/ups-events.log         # Evenimente UPS (upssched)
journalctl -u nut-server        # Server NUT
journalctl -u nut-monitor       # Monitor NUT

Comenzi Utile

# Liste conexiuni active la NUT
ss -tnp | grep :3493

# Test conectivitate de pe alt nod
ssh root@10.0.20.200 'upsc nutdev1@10.0.20.201'

# Restart servicii
systemctl restart nut-server nut-monitor

Întreținere

Verificare Săptămânală

# Status UPS
upsc nutdev1 ups.status battery.charge

# Test dry-run
/usr/local/bin/ups-shutdown-test.sh

# Verificare logs
tail -20 /var/log/ups-events.log

Verificare Lunară

  • Test fizic: deconectează UPS 30 secunde
  • Verifică că WinNUT detectează schimbarea
  • Verifică că logs arată evenimentul
  • Reconectează înainte de 3 minute

⚠️ IMPORTANT

  1. Nu modifica timpul de 3 minute fără consultare - trebuie să fie suficient pentru:

    • VM-uri să se oprească graceful
    • Noduri secundare să se închidă
    • pvemini să rămână ultimul funcțional
  2. Testează periodic scriptul dry-run pentru a verifica că SSH funcționează între noduri

  3. Monitorizează statusul bateriei UPS - înlocuiește bateria când charge devine sub 80%

  4. WinNUT este doar pentru monitorizare - shutdown-ul este automat de pe Proxmox

Contact și Suport