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>
238 lines
5.7 KiB
Markdown
238 lines
5.7 KiB
Markdown
# 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:
|
|
```bash
|
|
/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
|
|
```bash
|
|
# Status general
|
|
upsc nutdev1
|
|
|
|
# Doar status
|
|
upsc nutdev1 ups.status
|
|
|
|
# Baterie
|
|
upsc nutdev1 battery.charge
|
|
|
|
# Tensiuni
|
|
upsc nutdev1 input.voltage output.voltage
|
|
```
|
|
|
|
### Verificare Servicii
|
|
```bash
|
|
systemctl status nut-server
|
|
systemctl status nut-monitor
|
|
journalctl -u nut-server -f
|
|
journalctl -u nut-monitor -f
|
|
```
|
|
|
|
### Test Manual Shutdown (DRY RUN)
|
|
```bash
|
|
/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!**
|
|
```bash
|
|
# 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
|
|
```bash
|
|
/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
|
|
```bash
|
|
# 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ă
|
|
```bash
|
|
# 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
|
|
- Documentație NUT: https://networkupstools.org/
|
|
- Script creat: 2025-10-06
|
|
- Ultima modificare: 2025-10-06
|