Reorganize proxmox documentation into subdirectories per LXC/VM

- Create cluster/ for Proxmox cluster infrastructure (SSH guide, HA monitor, UPS)
- Create lxc108-oracle/ for Oracle Database documentation and scripts
- Create vm201-windows/ for Windows 11 VM docs and SSL certificate scripts
- Add SSL certificate monitoring scripts (check-ssl-certificates.ps1, monitor-ssl-certificates.sh)
- Remove archived VM107 references (decommissioned)
- Update all cross-references between files
- Update main README.md with new structure and navigation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Marius
2026-01-27 17:02:49 +02:00
parent 1da4c2347c
commit 4d51d5b2d2
33 changed files with 954 additions and 593 deletions

View File

@@ -0,0 +1,460 @@
# Instalare și Configurare NUT (Network UPS Tools) pe Proxmox
## Despre
Acest ghid descrie instalarea și configurarea NUT (Network UPS Tools) pe un cluster Proxmox pentru monitorizare UPS și shutdown orchestrat automat.
## Arhitectură
- **Nod PRIMARY (pvemini - 10.0.20.201):** Are UPS-ul conectat fizic via USB, rulează NUT server și driver
- **Noduri SECONDARY (pve1, pve2):** Pot monitoriza UPS-ul prin rețea (opțional)
- **VM 201 (Windows 11):** Monitorizare vizuală prin WinNUT client
## Prerequisite
- Proxmox VE instalat
- UPS conectat via USB la nodul primary
- Acces root la noduri
## 1. Instalare NUT pe Nodul PRIMARY
### 1.1. Instalare pachete
```bash
apt update
apt install -y nut nut-client nut-server
```
### 1.2. Detectare UPS
```bash
# Listează dispozitive USB
lsusb
# Exemple output:
# Bus 001 Device 002: ID 0665:5161 Cypress Semiconductor USB to Serial
# Verifică dacă kernel-ul a detectat UPS-ul
dmesg | grep -i ups
dmesg | grep -i hid
```
### 1.3. Testare driver NUT
```bash
# Caută driver potrivit pentru UPS-ul tău
nut-scanner -U
# sau
nut-scanner --usb_scan
```
## 2. Configurare NUT
### 2.1. Configurare Driver UPS (`/etc/nut/ups.conf`)
Creează configurația pentru UPS:
```bash
cat > /etc/nut/ups.conf << 'EOF'
[nutdev1]
driver = nutdrv_qx
port = auto
vendorid = 0665
productid = 5161
subdriver = cypress
desc = "UPS Cypress via USB"
EOF
```
**Note:**
- Înlocuiește `vendorid` și `productid` cu valorile de la `lsusb`
- Driver-ul `nutdrv_qx` funcționează pentru majoritatea UPS-urilor Voltronic/Megatec/Q1
- Alte drivere comune: `usbhid-ups`, `blazer_usb`, `nutdrv_qx`
### 2.2. Configurare Server NUT (`/etc/nut/upsd.conf`)
```bash
cat >> /etc/nut/upsd.conf << 'EOF'
# Ascultă pe localhost pentru monitorul local
LISTEN 127.0.0.1 3493
# Ascultă pe IP-ul nodului pentru clienți din rețea
LISTEN 10.0.20.201 3493
EOF
```
**Note:**
- Înlocuiește `10.0.20.201` cu IP-ul nodului tău PRIMARY
- Portul default NUT este 3493
### 2.3. Configurare Utilizatori (`/etc/nut/upsd.users`)
```bash
cat > /etc/nut/upsd.users << 'EOF'
[admin]
password = parola99
actions = SET
instcmds = ALL
upsmon master
EOF
```
**IMPORTANT:** Schimbă parola `parola99` cu ceva sigur!
### 2.4. Configurare Monitor Local (`/etc/nut/upsmon.conf`)
Editează `/etc/nut/upsmon.conf` și adaugă:
```bash
# Monitorizare UPS local
MONITOR nutdev1@localhost 1 admin parola99 master
# Folosește upssched pentru notificări
NOTIFYCMD /usr/sbin/upssched
# Activează notificările cu EXEC pentru evenimente
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
```
**Note:**
- `master` = acest nod controlează UPS-ul (va fi ultimul care se închide)
- `1` = powervalue (câte surse de alimentare alimentează acest UPS)
### 2.5. Configurare NUT Mode (`/etc/nut/nut.conf`)
```bash
cat > /etc/nut/nut.conf << 'EOF'
MODE=netserver
EOF
```
Moduri disponibile:
- `none` - NUT dezactivat
- `standalone` - Doar local, fără rețea
- `netserver` - Server + local (recomandat pentru PRIMARY)
- `netclient` - Doar client (pentru noduri SECONDARY)
## 3. Pornire Servicii
### 3.1. Pornire driver UPS
```bash
upsdrvctl start
```
Ar trebui să vezi:
```
Network UPS Tools - UPS driver controller 2.8.0
Network UPS Tools - Megatec/Q1 protocol USB driver 0.32 (2.8.0)
Using subdriver: Cypress 0.10
```
### 3.2. Pornire server NUT
```bash
systemctl enable nut-server
systemctl start nut-server
systemctl status nut-server
```
### 3.3. Pornire monitor NUT
```bash
systemctl enable nut-monitor
systemctl start nut-monitor
systemctl status nut-monitor
```
## 4. Verificare Funcționare
### 4.1. Test status UPS
```bash
# Listează UPS-uri disponibile
upsc -l
# Afișează toate informațiile despre UPS
upsc nutdev1
# Doar status
upsc nutdev1 ups.status
# Baterie
upsc nutdev1 battery.charge
upsc nutdev1 battery.voltage
# Tensiuni
upsc nutdev1 input.voltage
upsc nutdev1 output.voltage
```
### 4.2. Verificare conexiuni
```bash
# Verifică dacă upsd ascultă pe portul 3493
ss -tulpn | grep 3493
# Ar trebui să vezi:
# tcp LISTEN 0 16 127.0.0.1:3493 0.0.0.0:*
# tcp LISTEN 0 16 10.0.20.201:3493 0.0.0.0:*
```
### 4.3. Test de pe alt sistem
```bash
# De pe un alt nod sau sistem:
upsc nutdev1@10.0.20.201
```
## 5. Configurare Scheduler Evenimente (upssched)
### 5.1. Creare `/etc/nut/upssched.conf`
```bash
cat > /etc/nut/upssched.conf << 'EOF'
CMDSCRIPT /usr/local/bin/upssched-cmd
PIPEFN /run/nut/upssched.pipe
LOCKFN /run/nut/upssched.lock
# UPS pe baterie - așteaptă 180 secunde (3 minute)
AT ONBATT * START-TIMER onbatt 180
# Baterie scăzută - acțiune imediată
AT LOWBATT * EXECUTE lowbatt
# Curent revenit - anulează timer
AT ONLINE * CANCEL-TIMER onbatt
# Comunicație pierdută - așteaptă 30 secunde
AT COMMBAD * START-TIMER commbad 30
# Comunicație restabilită
AT COMMOK * CANCEL-TIMER commbad
EOF
```
### 5.2. Creare handler script
Copiaza scriptul `upssched-cmd` din directorul `scripts/` in `/usr/local/bin/`:
```bash
cp scripts/upssched-cmd /usr/local/bin/
chmod +x /usr/local/bin/upssched-cmd
```
### 5.3. Configurare sudo pentru user nut
Scripturile ruleaza ca user `nut` si au nevoie de sudo pentru a accesa PVE::Notify:
```bash
# Instaleaza sudo daca nu exista
apt-get install -y sudo
# Configureaza permisiuni sudo pentru user nut
cat > /etc/sudoers.d/nut << 'EOF'
nut ALL=(root) NOPASSWD: /usr/bin/perl
EOF
chmod 440 /etc/sudoers.d/nut
```
### 5.4. Configurare permisiuni fisiere log
Fisierele de log trebuie sa fie writable de user-ul `nut`:
```bash
touch /var/log/ups-events.log /var/log/ups-shutdown.log
chown nut:nut /var/log/ups-events.log /var/log/ups-shutdown.log
chmod 664 /var/log/ups-events.log /var/log/ups-shutdown.log
```
### 5.5. Creare director runtime
```bash
mkdir -p /run/nut
chown nut:nut /run/nut
chmod 770 /run/nut
```
## 6. Instalare Scripturi Shutdown Orchestrat
### 6.1. Copiere scripturi
```bash
# Script principal de shutdown
cp scripts/ups-shutdown-cluster.sh /usr/local/bin/
chmod +x /usr/local/bin/ups-shutdown-cluster.sh
# Script de test (dry-run)
cp scripts/ups-shutdown-test.sh /usr/local/bin/
chmod +x /usr/local/bin/ups-shutdown-test.sh
```
### 6.2. Editare noduri în script
Editează `/usr/local/bin/ups-shutdown-cluster.sh` și verifică:
```bash
NODES=("10.0.20.200" "10.0.20.202") # IP-urile nodurilor SECONDARY
```
### 6.3. Configurare SSH între noduri
Pentru ca scriptul să funcționeze, trebuie ca nodul PRIMARY să poată face SSH pe nodurile SECONDARY fără parolă:
```bash
# Generează SSH key dacă nu există
ssh-keygen -t ed25519 -N "" -f /root/.ssh/id_ed25519
# Copiază cheia pe nodurile SECONDARY
ssh-copy-id root@10.0.20.200
ssh-copy-id root@10.0.20.202
# Test conexiune
ssh root@10.0.20.200 "hostname"
ssh root@10.0.20.202 "hostname"
```
## 7. Testare
### 7.1. Test dry-run
```bash
/usr/local/bin/ups-shutdown-test.sh
cat /var/log/ups-shutdown-test.log
```
### 7.2. Test simulare UPS pe baterie (ATENȚIE!)
**⚠️ PERICOL:** Acest test va iniția shutdown real dacă îl lași să ruleze 3 minute!
```bash
# Monitorizează logs
tail -f /var/log/ups-events.log &
# Deconectează fizic UPS-ul de la priză
# Așteaptă 10-30 secunde
# Verifică că logs-urile arată "ONBATT"
# RECONECTEAZĂ UPS-ul înainte de 3 minute!
# Verifică că timer-ul a fost anulat
journalctl -u nut-monitor -f
```
## 8. Troubleshooting
### 8.1. Driver-ul nu pornește
```bash
# Verifică permisiuni USB
ls -la /dev/bus/usb/*/*
# Driver manual cu debug
/lib/nut/nutdrv_qx -a nutdev1 -DDDDD
# Verifică logs
journalctl -u nut-driver@nutdev1 -f
```
### 8.2. Server nu pornește
```bash
# Verifică configurația
upsd -c reload
# Debug mode
upsd -D
# Logs
journalctl -u nut-server -f
```
### 8.3. Monitor nu se conectează
```bash
# Verifică parola în upsd.users
cat /etc/nut/upsd.users
# Verifică MONITOR line în upsmon.conf
grep "^MONITOR" /etc/nut/upsmon.conf
# Test manual
upsmon -D
```
### 8.4. UPS nu răspunde
```bash
# Reload driver
upsdrvctl stop
upsdrvctl start
# Verifică comunicația USB
lsusb -v -d 0665:5161
```
## 9. Logs și Monitorizare
### Logs importante:
```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
journalctl -u nut-driver@nutdev1 # Driver UPS
```
### Comenzi utile:
```bash
# Status complet UPS
upsc nutdev1
# Comenzi disponibile
upscmd -l nutdev1
# Variabile disponibile
upsc nutdev1 | grep -E "battery|input|output|ups.status"
# Monitorizare în timp real
watch -n 2 'upsc nutdev1 ups.status battery.charge input.voltage'
```
## 10. Întreținere
### Zilnic/Săptămânal:
```bash
# Verifică status UPS
upsc nutdev1 ups.status battery.charge
# Verifică servicii
systemctl status nut-server nut-monitor
```
### Lunar:
```bash
# Test dry-run
/usr/local/bin/ups-shutdown-test.sh
# Test fizic (deconectare scurtă < 1 min)
```
### Anual:
```bash
# Test complet de baterie pe UPS
# Backup înainte de test!
```
## Referințe
- Documentație oficială NUT: https://networkupstools.org/
- Lista drivere compatibile: https://networkupstools.org/stable-hcl.html
- NUT Users Manual: https://networkupstools.org/docs/user-manual.chunked/index.html
- Troubleshooting Guide: https://networkupstools.org/docs/user-manual.chunked/ar01s07.html

View File

@@ -0,0 +1,376 @@
# Instalare și Configurare WinNUT pe Windows 11 (VM 201)
## Despre
WinNUT este un client NUT (Network UPS Tools) pentru Windows care permite monitorizarea vizuală a unui UPS conectat la un server NUT remote (în cazul nostru, pvemini).
**IMPORTANT:** WinNUT este folosit DOAR pentru monitorizare vizuală. Shutdown-ul automat este gestionat de scripturile de pe Proxmox.
## Prerequisite
- Windows 11 (VM 201 pe pvemini)
- Server NUT funcțional pe pvemini (10.0.20.201)
- Conectivitate rețea către serverul NUT (port 3493)
## 1. Descărcare WinNUT
### Opțiunea 1: GitHub Releases (Recomandat)
1. Deschide browser în VM 201
2. Accesează: https://github.com/gawindx/WinNUT-V2/releases
3. Descarcă ultima versiune (ex: `WinNUT-v2.x.x-Setup.exe`)
### Opțiunea 2: Build from source (Opțional)
```powershell
# Clonează repository
git clone https://github.com/gawindx/WinNUT-V2.git
cd WinNUT-V2
# Urmează instrucțiunile de build din README
```
## 2. Instalare WinNUT
### 2.1. Rulare instalator
1. Rulează `WinNUT-v2.x.x-Setup.exe` ca Administrator
2. Acceptă UAC prompt
3. Alege directorul de instalare (implicit: `C:\Program Files\WinNUT`)
4. Finalizează instalarea
### 2.2. Verificare instalare
WinNUT ar trebui să pornească automat după instalare. Icon-ul va apărea în system tray.
## 3. Configurare WinNUT
### 3.1. Deschidere fereastră Options
- Click dreapta pe icon-ul WinNUT din system tray
- Selectează **"Options"** sau dublu-click pe icon
### 3.2. Tab Connection
Configurează următoarele:
| Câmp | Valoare | Descriere |
|------|---------|-----------|
| **NUT host** | `10.0.20.201` | IP-ul serverului NUT (pvemini) |
| **NUT Port** | `3493` | Portul default NUT |
| **UPS Name** | `nutdev1` | Numele UPS-ului (din ups.conf) |
| **Polling Interval** | `15` | Interval de polling în secunde (NU pune 0!) |
| **Login** | `admin` | Username (din upsd.users) |
| **Password** | `parola99` | Parola (din upsd.users) |
| **Re-establish connection** | ☑ Checked | Reconectare automată |
**IMPORTANT:**
- **Polling Interval** trebuie să fie > 0 (recomandat: 15)
- Dacă Polling Interval = 0, WinNUT nu se va conecta!
### 3.3. Tab Calibration
Lasă valorile default sau ajustează după preferințe pentru afișarea gauge-urilor.
### 3.4. Tab Miscellaneous
Configurări opționale:
-**Start with Windows** - Pornire automată
-**Minimize to tray** - Minimizare în system tray
-**Sound alerts** - Alerte sonore (opțional)
### 3.5. Tab Shutdown Options
**⚠️ IMPORTANT:** NU configura shutdown options în WinNUT!
Shutdown-ul este gestionat automat de scripturile de pe Proxmox. WinNUT este doar pentru monitorizare.
Lasă toate opțiunile de shutdown dezactivate:
- ☐ Shutdown on battery
- ☐ Shutdown on low battery
- ☐ Force shutdown
### 3.6. Salvare configurație
1. Click **OK** pentru a salva
2. WinNUT se va reconecta automat la serverul NUT
3. În câteva secunde, ar trebui să vezi datele UPS-ului
## 4. Verificare Funcționare
### 4.1. Fereastră principală
După conectare cu succes, ar trebui să vezi:
**Gauge-uri (indicatoare circulare):**
- **Input Voltage** (Tensiune intrare): ~230V
- **Output Voltage** (Tensiune ieșire): ~230V
- **Frequency** (Frecvență): ~50Hz
- **Battery Charge** (Încărcare baterie): 0-100%
- **Battery Voltage** (Tensiune baterie): ~24V (depinde de UPS)
- **UPS Load** (Sarcină UPS): 0-100%
**Status checkboxes:**
-**UPS On Line** - UPS pe curent electric (normal)
-**UPS On Battery** - UPS pe baterie (întrerupere curent)
-**UPS Overload** - UPS supraîncărcat
-**UPS Battery Low** - Baterie scăzută
**Informații suplimentare:**
- **Manufacturer:** (producător UPS)
- **Name:** nutdev1
- **Serial:** (număr serie)
- **Firmware:** (versiune firmware)
### 4.2. System tray icon
- **Verde:** UPS On Line (normal)
- **Galben:** UPS On Battery (atenție)
- **Roșu:** UPS Battery Low (critic)
### 4.3. Mesaj reconectare
În partea de jos a ferestrei vezi:
```
[id 4: 10/6/2025 7:56:48 PM] Try Reconnect 1 / 30
```
Dacă vezi acest mesaj constant:
1. Verifică configurația Connection (mai ales Polling Interval)
2. Verifică conectivitatea rețea (ping 10.0.20.201)
3. Verifică că serverul NUT rulează pe pvemini
## 5. Testare
### 5.1. Test conectivitate din PowerShell
```powershell
# Test ping
Test-NetConnection -ComputerName 10.0.20.201 -Port 3493
# Ar trebui să vezi:
# TcpTestSucceeded : True
```
### 5.2. Test simulare UPS pe baterie
1. Deconectează fizic UPS-ul de la priză (pe pvemini)
2. Observă în WinNUT:
- Checkbox **"UPS On Battery"** devine ☑
- Icon în system tray devine galben
- Input voltage scade
- Battery charge începe să scadă
3. Reconectează UPS-ul
4. Observă că status revine la **"UPS On Line"**
**NU lăsa UPS-ul pe baterie mai mult de 3 minute** - se va declanșa shutdown automat!
## 6. Troubleshooting
### 6.1. WinNUT nu se conectează
**Verificări:**
1. **Polling Interval = 0?**
- Schimbă la 15 secunde
- Click OK și așteaptă 10-20 secunde
2. **Firewall blochează portul 3493?**
```powershell
# Test port
Test-NetConnection -ComputerName 10.0.20.201 -Port 3493
```
3. **Server NUT nu rulează?**
- SSH pe pvemini:
```bash
systemctl status nut-server
ss -tulpn | grep 3493
```
4. **Date de autentificare greșite?**
- Verifică username/password din Options
- Compară cu `/etc/nut/upsd.users` de pe pvemini
5. **Nume UPS greșit?**
- Verifică că UPS Name = `nutdev1`
- Listează UPS-uri disponibile:
```bash
ssh root@10.0.20.201 "upsc -l"
```
### 6.2. WinNUT se conectează dar nu afișează date
1. **Restart WinNUT:**
- Click dreapta → Exit
- Pornește WinNUT din nou
2. **Verifică permisiuni:**
- Username `admin` trebuie să existe în `/etc/nut/upsd.users`
3. **Verifică logs pe server:**
```bash
ssh root@10.0.20.201 "journalctl -u nut-server -n 50"
```
### 6.3. Icon-ul lipsește din system tray
1. Deschide **Settings → Personalization → Taskbar**
2. Click pe **"Taskbar corner overflow"**
3. Activează **WinNUT**
### 6.4. Eroare "Connection refused"
**Pe pvemini, verifică:**
```bash
# Server ascultă pe IP-ul corect?
ss -tulpn | grep 3493
# Firewall permite trafic?
iptables -L INPUT -n | grep 3493
# Restart server
systemctl restart nut-server
```
## 7. Configurare Avansată
### 7.1. Monitorizare multiple UPS-uri
WinNUT poate monitoriza un singur UPS. Pentru multiple UPS-uri:
- Rulează multiple instanțe WinNUT (necesită build custom)
- Folosește alte tool-uri (NUT-Monitor, upsc via SSH)
### 7.2. Export date UPS
WinNUT nu are funcție de export built-in. Pentru logging:
**Opțiunea 1: PowerShell script**
```powershell
# Script simplu de logging UPS via SSH
while ($true) {
$status = ssh root@10.0.20.201 "upsc nutdev1 ups.status battery.charge input.voltage"
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$timestamp - $status" | Out-File -Append C:\UPS-Logs\ups-log.txt
Start-Sleep -Seconds 60
}
```
**Opțiunea 2: Monitoring tools**
- Prometheus + NUT Exporter
- Grafana + InfluxDB
- Zabbix
### 7.3. Notificări personalizate
Pentru notificări Windows când UPS trece pe baterie:
**PowerShell monitoring script:**
```powershell
# Rulează continuu, verifică status UPS
$lastStatus = "OL"
while ($true) {
try {
$currentStatus = ssh root@10.0.20.201 "upsc nutdev1 ups.status"
if ($currentStatus -match "OB" -and $lastStatus -eq "OL") {
# Notificare Windows
[System.Windows.Forms.MessageBox]::Show(
"UPS a trecut pe baterie!",
"ALERT UPS",
[System.Windows.Forms.MessageBoxButtons]::OK,
[System.Windows.Forms.MessageBoxIcon]::Warning
)
}
$lastStatus = $currentStatus
} catch {
Write-Host "Error: $_"
}
Start-Sleep -Seconds 10
}
```
## 8. Alternative la WinNUT
Dacă WinNUT nu funcționează satisfăcător:
### 8.1. NUT-Monitor (Java)
- Cross-platform (Windows, Linux, macOS)
- Interfață mai modernă
- Download: https://github.com/networkupstools/nut/wiki/NUT-Monitor
### 8.2. upsc via SSH
Folosește direct comanda `upsc` prin SSH:
```powershell
# PowerShell - Status UPS
ssh root@10.0.20.201 "upsc nutdev1"
# Doar câmpuri specifice
ssh root@10.0.20.201 "upsc nutdev1 ups.status battery.charge input.voltage"
# Monitoring continuu
while ($true) {
Clear-Host
ssh root@10.0.20.201 "upsc nutdev1 ups.status battery.charge input.voltage"
Start-Sleep -Seconds 5
}
```
### 8.3. Web UI pe server
Instalează web UI pe pvemini:
```bash
# Instalare NUT CGI scripts
apt install -y nut-cgi apache2
# Configurare
# Accesează: http://10.0.20.201/cgi-bin/nut/upsstats.cgi
```
## 9. Pornire Automată WinNUT
### 9.1. Via Task Scheduler
1. Deschide **Task Scheduler**
2. Create Task:
- **General:**
- Name: WinNUT Auto Start
- Run whether user is logged on or not
- **Triggers:**
- At startup
- **Actions:**
- Start a program: `C:\Program Files\WinNUT\WinNUT.exe`
- **Conditions:**
- Start only if network available
### 9.2. Via Startup Folder
1. `Win + R` → `shell:startup`
2. Crează shortcut către `WinNUT.exe`
## 10. Documentație și Suport
- **WinNUT GitHub:** https://github.com/gawindx/WinNUT-V2
- **NUT Documentation:** https://networkupstools.org/
- **Issues:** Raportează probleme pe GitHub Issues
## Rezumat Configurare Rapidă
```
NUT host: 10.0.20.201
NUT Port: 3493
UPS Name: nutdev1
Polling Interval: 15
Login: admin
Password: parola99
Re-establish conn: ✓ Checked
```
**Click OK → Așteaptă 10-20 secunde → Vezi date UPS!**

View File

@@ -0,0 +1,515 @@
# Procedură Înlocuire Baterie UPS
## Despre
Ghid complet pentru înlocuirea bateriei UPS când cluster-ul Proxmox este complet alimentat de UPS. Include scripturi automate, checklist-uri și proceduri de recovery.
**⚠️ IMPORTANT:** Toate cele 3 noduri (pve1, pvemini, pveelite) sunt pe același UPS, deci **trebuie oprit complet cluster-ul**.
## Când Trebuie Înlocuită Bateria?
### Indicatori din Testele Lunare:
| Indicator | Acțiune |
|-----------|---------|
| **Health: POOR** (charge drop > 55%) | ⚠️ URGENT - Înlocuiește IMEDIAT |
| **Health: FAIR** (charge drop 35-55%) | 📅 Planifică în 1-3 luni |
| **Health: GOOD** (charge drop 15-35%) | ✅ Monitorizează lunar |
| **Health: EXCELLENT** (charge drop < 15%) | Baterie OK |
### Alte Semne:
- Vârsta bateriei > 3-4 ani
- UPS emite beep-uri frecvente
- Timp de autonomie scăzut vizibil (< 5 minute cu sarcină normală)
- Baterie umflată sau deteriorată fizic
- 3+ teste lunare consecutive cu health FAIR/POOR
## Pregătire
### 1. Comandă Baterie Nouă
**Verifică specificațiile UPS-ului:**
```bash
ssh root@10.0.20.201 "upsc nutdev1 2>/dev/null | grep -E 'battery.voltage.nominal|battery.type'"
```
Pentru UPS-ul tău (INNO TECH):
- Tensiune nominală: **24V** (2x 12V în serie)
- Tip: Probabil **12V 7Ah** sau **12V 9Ah** (2 bucăți)
**Verifică FIZIC bateria actuală** înainte de comandă:
- Model exact scris pe baterie
- Capacitate (Ah)
- Dimensiuni fizice
### 2. Planificare Fereastră de Mentenanță
**Timpul estimat: 30-60 minute**
Breakdown:
- Shutdown cluster: ~10 minute
- Înlocuire fizică baterie: 10-15 minute
- Pornire și verificare cluster: 10-15 minute
- **Buffer pentru probleme:** 15-20 minute
**Moment recomandat:**
- Duminică 02:00-04:00 (minimal impact)
- SAU orice fereastră de mentenanță aprobată
### 3. Anunță În Avans
**Template email/notificare:**
```
Subject: [IMPORTANT] Mentenanță Programată UPS - Duminică 02:00-04:00
Bună ziua,
Duminică, [DATA], între orele 02:00-04:00 va avea loc o intervenție
programată pentru înlocuirea bateriei UPS.
IMPACT:
- Toate serverele/serviciile vor fi indisponibile timp de ~45 minute
- Cluster Proxmox va fi oprit complet
- VM-uri și servicii vor fi oprite orchestrat și repornite automat
Ce se va întâmpla:
1. 02:00 - Shutdown orchestrat cluster (VM-uri + noduri)
2. 02:15 - Înlocuire fizică baterie UPS
3. 02:30 - Pornire noduri + verificare cluster
3. 02:45 - Pornire VM-uri și verificare servicii
În caz de probleme, timpul poate fi extins cu 30-60 minute.
Vă rugăm să salvați orice lucru în curs și să vă deconectați
de la servicii cu 10 minute înainte (01:50).
Mulțumim pentru înțelegere!
```
## Procedură Pas-cu-Pas
### ETAPA 1: Pre-Shutdown (15 minute înainte)
**1.1. Conectare la pvemini:**
```bash
ssh root@10.0.20.201
```
**1.2. Verificare finală status cluster:**
```bash
# Status cluster
pvecm status
# VM-uri running
qm list | grep running
# Status UPS
upsc nutdev1 ups.status battery.charge
# Backup-uri recente?
ls -lh /var/lib/vz/dump/ | tail -5
```
**1.3. Notificare utilizatori (dacă aplicabil):**
```bash
# Trimite mesaj pe toate nodurile (wall)
for node in pve1 pvemini pveelite; do
ssh root@$node "wall 'ATENȚIE: Cluster se va opri în 15 minute pentru mentenanță UPS!'"
done
```
### ETAPA 2: Shutdown Orchestrat
**2.1. Rulare script automat:**
```bash
cd /opt/scripts
./ups-maintenance-shutdown.sh
```
Scriptul va:
- Cere confirmare (scrie **DA**)
- Opri toate VM-urile (timeout 180s)
- Opri containerele LXC
- Opri nodurile secundare (pve1, pveelite)
- Opri pvemini (ultimul)
**2.2. Monitorizare (opțional):**
Deschide un al doilea terminal SSH și monitorizează:
```bash
# Monitor log
tail -f /var/log/ups-maintenance.log
# Monitor VM-uri
watch -n 5 'qm list'
```
**2.3. Așteptare:**
- Script va afișa countdown
- Totul se va opri automat în ~10 minute
- **pvemini se va opri ultimul (2 minute după nodurile secundare)**
### ETAPA 3: Verificare Oprire Completă
**3.1. Verifică LED-uri:**
- **pve1:** LED-uri stinse
- **pveelite:** LED-uri stinse
- **pvemini:** LED-uri stinse
**3.2. Verifică ventilatoare:**
- Ascultă - toate ventilatoarele ar trebui fie oprite
**3.3. Dacă un nod nu s-a oprit:**
- Conectează monitor/keyboard la nod
- SAU apasă lung butonul de power (10 secunde) pentru force shutdown
- **ULTIMĂ OPȚIUNE:** Deconectează alimentarea
### ETAPA 4: Înlocuire Fizică Baterie
** ATENȚIE LA SIGURANȚĂ:**
- Folosește mănuși izolante
- NU scurtcircuita terminalele bateriei
- Notează polaritatea (+/-)
**4.1. Deconectare UPS:**
```
1. Deconectează UPS de la priză (scoate din priză)
2. Apasă butonul de power al UPS-ului 5 secunde (descarcă condensatori)
```
**4.2. Deschide UPS:**
```
1. Identifică panoul de acces baterie (de obicei față sau spate)
2. Deșurubează/deschide panoul
3. Fotografiază conexiunile (pentru referință)
```
**4.3. Deconectare baterie veche:**
```
1. Notează polaritatea (+ la roșu, - la negru)
2. Deconectează mai întâi cablul NEGATIV (-)
3. Apoi deconectează cablul POZITIV (+)
4. Scoate bateria veche cu grijă
```
**4.4. Instalare baterie nouă:**
```
1. Plasează bateria nouă în suport
2. Conectează cablul POZITIV (+) PRIMUL
3. Apoi conectează cablul NEGATIV (-)
4. Verifică că conexiunile sunt ferme
5. Asigură-te că bateria nu se mișcă
```
**4.5. Închide UPS:**
```
1. Închide panoul de acces
2. Fixează șuruburile
```
**4.6. Reconectare:**
```
1. Conectează UPS la priză
2. Pornește UPS (buton de power)
3. Verifică LED-uri: ar trebui să vadă "charging" sau "online"
4. Ascultă beep-uri - normal este 1 beep la pornire
```
**4.7. Așteptare încărcare inițială:**
- Lasă UPS-ul conectat 2-3 minute încarce bateria nouă
- Verifică nu sunt erori pe display
### ETAPA 5: Pornire Cluster
**5.1. Pornire noduri - Ordine inversă:**
**Primul: Noduri secundare (pve1, pveelite)**
```
1. Apasă butonul de power pe pve1
2. Apasă butonul de power pe pveelite
3. Așteaptă 2 minute pentru boot
```
**Al doilea: Nod primary (pvemini)**
```
1. Apasă butonul de power pe pvemini
2. Așteaptă 3 minute pentru boot complet
```
**5.2. Conectare la pvemini când e disponibil:**
```bash
# Așteaptă până poți face SSH
ssh root@10.0.20.201
```
### ETAPA 6: Verificări Post-Pornire
**6.1. Verificare cluster:**
```bash
# Status cluster - ar trebui să vezi toate cele 3 noduri
pvecm status
# Verifică quorum
corosync-quorumtool -s
# Toate nodurile online?
pvecm nodes
```
**Așteptat:**
```
Quorate: Yes
Expected votes: 3
Total votes: 3
Nodeid: 1 (pve1) - online
Nodeid: 2 (pvemini) - online
Nodeid: 3 (pveelite) - online
```
**6.2. Verificare UPS:**
```bash
# Status UPS
upsc nutdev1
# Valori importante:
upsc nutdev1 ups.status # Ar trebui: OL (Online)
upsc nutdev1 battery.charge # Poate fi 50-80% (baterie nouă în încărcare)
upsc nutdev1 battery.voltage # ~24-27V
```
**6.3. Verificare servicii NUT:**
```bash
systemctl status nut-server
systemctl status nut-monitor
# Logs pentru erori
journalctl -u nut-server -n 50
```
### ETAPA 7: Pornire VM-uri
**7.1. Verifică ce VM-uri au autostart:**
```bash
# VM-uri cu onboot=1
grep -r "onboot: 1" /etc/pve/qemu-server/
# Sau
qm list | head -1 && grep "^onboot" /etc/pve/qemu-server/*.conf | grep "onboot: 1"
```
**7.2. Pornire VM-uri critice manual:**
```bash
# Listează toate VM-urile
qm list
# Pornește VM-uri importante
qm start 201 # roacentral (Windows 11)
# Adaugă alte VM-uri critice
# Sau pornește toate VM-urile care erau running:
for vmid in $(qm list | awk 'NR>1 {print $1}'); do
qm start $vmid
done
```
**7.3. Verificare VM-uri:**
```bash
# Status VM-uri
qm list
# Pentru fiecare VM important, verifică:
qm status 201
```
### ETAPA 8: Test Final Baterie Nouă
**8.1. Rulare test baterie NUT:**
```bash
# Test automat
/opt/scripts/ups-monthly-test.sh
# Monitorizează log
tail -f /var/log/ups-monthly-test.log
```
**8.2. Verificare rezultat test:**
```bash
# Ar trebui să vezi EXCELLENT sau GOOD pentru baterie nouă
tail -30 /var/log/ups-monthly-test.log | grep -A 5 "Sănătate baterie"
```
**Așteptat pentru baterie nouă:**
- Charge drop: < 10% (EXCELLENT)
- Voltage drop: 1-2V
- Recuperare rapidă: < 60 secunde
**8.3. Test fizic (opțional dar recomandat):**
```bash
# Deconectează UPS de la priză 10 secunde
# Monitorizează în WinNUT pe VM 201
# UPS ar trebui să susțină sarcina fără probleme
# Reconectează la priză
```
### ETAPA 9: Notificare Finalizare
**9.1. Email/notificare utilizatori:**
```
Subject: Mentenanță UPS Finalizată Cu Succes
Mentenanța programată a fost finalizată cu succes.
STATUS:
✅ Baterie UPS înlocuită
✅ Toate nodurile cluster online
✅ Quorum OK
✅ VM-uri repornite
✅ Test baterie: [EXCELLENT/GOOD]
Serviciile sunt disponibile.
Durata totală: [XX] minute
Mulțumim pentru răbdare!
```
**9.2. Documentare în log:**
```bash
echo "[$(date)] UPS Battery replaced. Old battery removed, new battery installed. Test result: [RESULT]. Cluster fully operational." >> /var/log/ups-maintenance.log
```
## Troubleshooting
### Problema 1: Un nod nu pornește după shutdown
**Verificări:**
```bash
# Încearcă SSH
ssh root@[IP-NOD]
# Dacă nu răspunde:
# 1. Verifică LED-uri de pe nod - sunt aprinse?
# 2. Conectează monitor la nod - ce erori apar?
# 3. Verifică cablul de rețea
# 4. Hard reset: butoane power lung (10s) apoi pornește din nou
```
**Recovery:**
```bash
# Dacă nodul lipsește din cluster:
pvecm nodes
# Forțează quorum cu 2 noduri (ULTIMĂ OPȚIUNE):
pvecm expected 2
```
### Problema 2: UPS nu funcționează după înlocuire baterie
**Verificări:**
- LED-uri UPS - ce culoare?
- Beep-uri - ce pattern?
- Polaritate baterie corectă? (+ la +, - la -)
- Conexiuni ferme?
**Soluții:**
```bash
# Verifică ce raportează NUT
upsc nutdev1
# Dacă nu răspunde:
systemctl restart nut-driver@nutdev1
systemctl restart nut-server
```
### Problema 3: Baterie nouă se descarcă prea repede în test
**Normal pentru bateriile noi:**
- Primele 2-3 cicluri de încărcare pot fi instabile
- Bateria trebuie "condiționată" (câteva cicluri complete)
**Verificare:**
```bash
# Rulează test din nou după 24 ore
/opt/scripts/ups-monthly-test.sh
# Dacă și al 2-lea test e POOR:
# -> Baterie defectă, returnează la furnizor
```
### Problema 4: Cluster nu formează quorum
**Verificări:**
```bash
# Status pe fiecare nod
ssh root@10.0.20.200 "pvecm status"
ssh root@10.0.20.201 "pvecm status"
ssh root@10.0.20.202 "pvecm status"
# Corosync funcționează?
ssh root@10.0.20.201 "systemctl status corosync"
```
**Recovery:**
```bash
# Restart corosync pe toate nodurile
for node in 10.0.20.200 10.0.20.201 10.0.20.202; do
ssh root@$node "systemctl restart corosync pve-cluster"
done
# Așteaptă 30 secunde
sleep 30
# Verifică din nou
pvecm status
```
## Checklist Post-Înlocuire
### Verificare Imediată (primele 24 ore):
- [ ] Toate nodurile online în cluster
- [ ] Quorum OK (pvecm status)
- [ ] UPS status: OL (Online)
- [ ] Baterie nouă se încarcă (battery.charge crește)
- [ ] Test automat baterie: EXCELLENT sau GOOD
- [ ] VM-uri critice pornite și funcționale
- [ ] Servicii în producție OK
- [ ] Notificare utilizatori trimisă
- [ ] Documentat în log (/var/log/ups-maintenance.log)
### Monitorizare Prima Săptămână:
- [ ] Zi 1: Verificare battery.charge ajunge la 100%
- [ ] Zi 3: Test fizic scurt (deconectare 10s)
- [ ] Zi 7: Test baterie complet (rulare script lunar manual)
### Acțiuni După 1 Lună:
- [ ] Verificare test lunar automat (1 ale lunii)
- [ ] Rezultat ar trebui fie în continuare EXCELLENT/GOOD
- [ ] Dacă nu: verifică baterie/conexiuni
## Checklist Înainte de Următoarea Mentenanță
Pentru mentenanța viitoare (peste 3-4 ani), verifică că:
- [ ] Acest document este actualizat
- [ ] IP-urile nodurilor sunt corecte în script
- [ ] Backup-uri recente există
- [ ] Procedura a fost testată/revizuită
- [ ] Ai bateria de rezervă comandată din timp
## Referințe
- Script shutdown: `/opt/scripts/ups-maintenance-shutdown.sh`
- Log mentenanță: `/var/log/ups-maintenance.log`
- Test lunar: `/opt/scripts/ups-monthly-test.sh`
- Documentație UPS: [`UPS-SHUTDOWN-README.md`](UPS-SHUTDOWN-README.md)
---
**Autor:** Claude Code
**Data:** 2025-10-06
**Versiune:** 1.0

View File

@@ -0,0 +1,470 @@
# Test Lunar Automat Baterie UPS
## Despre
Script automat pentru testarea lunară a bateriei UPS care rulează pe data de 1 a fiecărei luni la ora 00:00. Testul verifică capacitatea reală a bateriei prin comutare pe baterie și monitorizare descărcare/recuperare.
## Funcționalitate
### Ce face scriptul:
1. **Verificare status UPS** înainte de test
- Battery charge, voltage
- Input/output voltage
- Load %
- Verifică că UPS este Online
2. **Rulare test baterie automat**
- Comandă: `upscmd nutdev1 test.battery.start.quick`
- UPS comută pe baterie pentru ~10 secunde
- Descarcă efectiv bateria pentru testare reală
3. **Monitorizare în timp real** (30 secunde)
- Status UPS
- Battery charge %
- Battery voltage
- Detectare anomalii
4. **Analiză rezultate**
- Calculează scăderea încărcării (%)
- Calculează scăderea tensiunii (V)
- Evaluează sănătatea bateriei
5. **Monitorizare recuperare** (5 minute)
- Urmărește reîncărcarea bateriei
- Calculează rata de recuperare
- Oprește când bateria > 95%
6. **Generare rapoarte**
- Raport HTML detaliat cu grafice
- Raport text pentru email
- Log detaliat în `/var/log/ups-monthly-test.log`
7. **Notificare email**
- Trimite raport prin sistemul de notificări Proxmox
- Include sănătatea bateriei în subject
- Rapoarte salvate în `/tmp/ups-test-YYYYMM/`
## Evaluare Sănătate Baterie
Scriptul evaluează sănătatea bateriei bazat pe scăderea încărcării în timpul testului:
| Scădere Încărcare | Sănătate | Status | Acțiune Necesară |
|-------------------|----------|--------|------------------|
| < 10% | **EXCELLENT** | Verde | Nicio acțiune necesară |
| 10-30% | **GOOD** | Verde | Continuă monitorizarea |
| 30-50% | **FAIR** | Galben | Planifică înlocuire în 3-6 luni |
| > 50% | **POOR** | 🔴 Roșu | **URGENT: Înlocuiește bateria!** |
### Exemple de rezultate reale:
**Test 1 (2025-10-06 20:45):**
- Scădere încărcare: 0% (charge reporting delay)
- Scădere tensiune: 1.64V (27.88V → 26.24V)
- Evaluare: **EXCELLENT**
- Recuperare: 30 secunde la 100%
**Notă:** UPS-ul raportează uneori încărcarea cu întârziere. Scăderea tensiunii este un indicator mai precis al capacității bateriei.
## Instalare
### 1. Copiere script pe server
```bash
scp scripts/ups-monthly-test.sh root@10.0.20.201:/opt/scripts/
ssh root@10.0.20.201 "chmod +x /opt/scripts/ups-monthly-test.sh"
```
### 2. Configurare cron
Script-ul se adaugă automat în cron la instalare, dar poți verifica:
```bash
ssh root@10.0.20.201 "crontab -l | grep ups-monthly-test"
```
Ar trebui să vezi:
```
# UPS Monthly Battery Test - Rulează pe 1 ale lunii la 00:00
0 0 1 * * /opt/scripts/ups-monthly-test.sh
```
### 3. Test manual (recomandat înainte de prima rulare lunară)
```bash
ssh root@10.0.20.201 "/opt/scripts/ups-monthly-test.sh"
```
**ATENȚIE:** Testul va comuta UPS-ul pe baterie pentru ~10 secunde!
## Configurare
### Parametri editabili în script:
```bash
UPS_NAME="nutdev1" # Numele UPS-ului din NUT
UPS_USER="admin" # Username pentru comenzi NUT
UPS_PASS="parola99" # Parola pentru comenzi NUT
MAIL_TO="root@pam" # Destinatar email rapoarte
```
### Personalizare cron:
Pentru a schimba data/ora de rulare, editează cron:
```bash
ssh root@10.0.20.201
crontab -e
```
Exemple:
```bash
# Rulează pe 1 ale lunii la 02:00 (noapte)
0 2 1 * * /opt/scripts/ups-monthly-test.sh
# Rulează în fiecare Duminică la 00:00 (săptămânal)
0 0 * * 0 /opt/scripts/ups-monthly-test.sh
# Rulează pe 15 ale lunii la 00:00 (mijloc de lună)
0 0 15 * * /opt/scripts/ups-monthly-test.sh
```
## Rapoarte Generate
### 1. Raport HTML
**Locație:** `/tmp/ups-test-YYYYMM/ups-test-report.html`
Conține:
- Header cu data, UPS, nod
- Status sănătate baterie (color-coded)
- Metrici în grid layout:
- Încărcare înainte/după
- Tensiune înainte/după
- Scădere încărcare
- Recuperare în 5 min
- Tabel detalii tehnice
- Recomandări bazate pe sănătate
- Footer cu timestamp și paths
### 2. Raport Text
**Locație:** `/tmp/ups-test-YYYYMM/ups-test-report.txt`
Versiune text simplă pentru email.
### 3. Log Detaliat
**Locație:** `/var/log/ups-monthly-test.log`
Log complet cu toate măsurătorile:
- Timestamp pentru fiecare pas
- Status UPS în timp real
- Toate valorile măsurate
- Erori sau warnings
**Păstrare:** Log-ul este append-only, conține istoric complet al tuturor testelor.
## Logs și Monitorizare
### Vizualizare log în timp real:
```bash
ssh root@10.0.20.201 "tail -f /var/log/ups-monthly-test.log"
```
### Verificare ultimul test:
```bash
ssh root@10.0.20.201 "tail -50 /var/log/ups-monthly-test.log"
```
### Căutare teste anterioare:
```bash
# Caută toate testele din 2025
ssh root@10.0.20.201 "grep 'UPS MONTHLY BATTERY TEST - START' /var/log/ups-monthly-test.log | grep 2025"
# Vezi rezultatul ultimului test
ssh root@10.0.20.201 "grep 'Sănătate baterie:' /var/log/ups-monthly-test.log | tail -1"
```
### Verificare cron execution:
```bash
# Verifică că cron a rulat scriptul
ssh root@10.0.20.201 "grep ups-monthly-test /var/log/syslog"
```
## Email Notifications
### Configurare sistem de mail
Scriptul încearcă să trimită email prin:
1. **mail command** (recomandat)
2. **logger** (fallback - doar în syslog)
#### Instalare mail command (dacă nu există):
```bash
ssh root@10.0.20.201 "apt update && apt install -y mailutils"
```
#### Configurare SMTP pentru Proxmox:
Editează `/etc/postfix/main.cf`:
```bash
relayhost = smtp.gmail.com:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
```
Creează `/etc/postfix/sasl_passwd`:
```
smtp.gmail.com:587 your-email@gmail.com:your-app-password
```
Apoi:
```bash
postmap /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd*
systemctl restart postfix
```
#### Test email:
```bash
echo "Test email from UPS monitoring" | mail -s "Test" root@pam
```
### Verificare email trimis:
```bash
# Verifică mail queue
ssh root@10.0.20.201 "mailq"
# Verifică mail logs
ssh root@10.0.20.201 "grep 'UPS' /var/log/mail.log"
```
## Troubleshooting
### Testul nu pornește
**Verificare:**
```bash
# UPS online?
upsc nutdev1 ups.status
# Comenzi disponibile?
upscmd -l nutdev1 | grep battery
# Autentificare corectă?
upscmd -u admin -p parola99 nutdev1 test.battery.start.quick
```
### Bateria nu se descarcă în test
**Cauze posibile:**
- UPS-ul nu suportă test real (unele modele low-end)
- Test prea scurt pentru a fi detectat
- Baterie foarte sănătoasă (scădere < 1%)
**Verificare:**
```bash
# Monitorizează tensiune în loc de charge
watch -n 1 'upsc nutdev1 battery.voltage'
# Apoi rulează test manual și observă scăderea
upscmd -u admin -p parola99 nutdev1 test.battery.start.quick
```
### Email nu ajunge
**Verificări:**
```bash
# Mail command instalat?
which mail
# Postfix rulează?
systemctl status postfix
# Verifică logs
tail -50 /var/log/mail.log
# Test manual
echo "Test" | mail -s "Test Subject" root@pam
```
### Script blochează sau timeout
**Cauze:**
- Testul baterie durează prea mult
- UPS nu răspunde
- Probleme rețea
**Soluție:**
Editează scriptul și reduce timeout-urile:
```bash
# Reduce monitorizare de la 15 la 5 iterații
for i in {1..5}; do
```
## Întreținere
### Lunar (După Rulare Automată)
```bash
# Verifică că testul a rulat
ssh root@10.0.20.201 "tail -100 /var/log/ups-monthly-test.log | grep 'COMPLETE'"
# Vezi rezultatul
ssh root@10.0.20.201 "grep 'Sănătate baterie' /var/log/ups-monthly-test.log | tail -1"
# Verifică raportul HTML
ssh root@10.0.20.201 "ls -lh /tmp/ups-test-*/ups-test-report.html"
```
### Anual
```bash
# Cleanup rapoarte vechi (> 12 luni)
ssh root@10.0.20.201 "find /tmp/ups-test-* -type d -mtime +365 -exec rm -rf {} +"
# Rotare log dacă devine prea mare (> 100MB)
ssh root@10.0.20.201 "
if [ \$(stat -f%z /var/log/ups-monthly-test.log) -gt 104857600 ]; then
mv /var/log/ups-monthly-test.log /var/log/ups-monthly-test.log.old
gzip /var/log/ups-monthly-test.log.old
fi
"
```
### La Înlocuire Baterie
După înlocuirea bateriei UPS:
```bash
# Rulează test manual pentru baseline
ssh root@10.0.20.201 "/opt/scripts/ups-monthly-test.sh"
# Verifică că rezultatul este EXCELLENT
ssh root@10.0.20.201 "tail -20 /var/log/ups-monthly-test.log"
# Notează data înlocuirii în log
ssh root@10.0.20.201 "echo '[$(date)] Baterie UPS înlocuită - baseline test executat' >> /var/log/ups-monthly-test.log"
```
## Interpretare Rezultate
### Exemplu rezultat bun:
```
Sănătate baterie: EXCELLENT
Scădere încărcare: 5%
Scădere tensiune: 1.64V
Recuperare: 5% în 30 secunde
```
**Interpretare:** Baterie în stare excelentă, poate susține sarcina, se reîncarcă rapid.
### Exemplu rezultat acceptabil:
```
Sănătate baterie: FAIR
Scădere încărcare: 35%
Scădere tensiune: 4.2V
Recuperare: 15% în 120 secunde
```
**Interpretare:** Baterie uzată, planifică înlocuire în 3-6 luni.
### Exemplu rezultat critic:
```
Sănătate baterie: POOR
Scădere încărcare: 65%
Scădere tensiune: 8.5V
Recuperare: 25% în 300 secunde
```
**Interpretare:** **URGENT!** Baterie critică, înlocuiește imediat! Risc mare de shutdown neplanificat.
## Recomandări Baterie
### Când să înlocuiești bateria:
| Indicator | Bun | Acceptabil | Critic |
|-----------|-----|------------|--------|
| **Vârstă baterie** | < 2 ani | 2-4 ani | > 4 ani |
| **Scădere încărcare** | < 10% | 10-50% | > 50% |
| **Scădere tensiune** | < 2V | 2-5V | > 5V |
| **Timp recuperare** | < 1 min | 1-5 min | > 5 min |
| **Teste failed** | 0 | 1-2 | > 3 |
### Factori care afectează durata de viață:
- **Temperatură:** Ideal 20-25°C (fiecare +10°C reduce durata cu 50%)
- **Cicluri descărcare:** < 20 cicluri/an = bun
- **Profunzime descărcare:** Descărcări până la 50% = OK, sub 20% = deteriorare
- **Calitate baterie:** Baterii branded (APC, Eaton) vs. generice
## Automatizare Avansată
### Alertare automată când bateria devine POOR:
Adaugă în script (după evaluarea sănătății):
```bash
if [ "$BATTERY_HEALTH" == "POOR" ]; then
# Trimite alert urgent
echo "URGENT: Bateria UPS necesită înlocuire!" | \
mail -s "🔴 ALERT UPS: Baterie CRITICĂ!" admin@company.com
# Notificare SMS (dacă ai configurat)
curl -X POST "https://api.service.com/sms" \
-d "to=+40xxxxxxxxx&message=ALERT: Baterie UPS critica!"
fi
```
### Integrare cu Prometheus/Grafana:
Exportă metrici pentru monitorizare long-term:
```bash
# La final de script, exportă metrici
cat >> /var/lib/node_exporter/textfile_collector/ups_battery.prom << EOF
# HELP ups_battery_health Battery health score (0-100)
# TYPE ups_battery_health gauge
ups_battery_health{ups="nutdev1"} $(( 100 - CHARGE_DROP ))
# HELP ups_battery_charge_drop Battery charge drop during test
# TYPE ups_battery_charge_drop gauge
ups_battery_charge_drop{ups="nutdev1"} $CHARGE_DROP
# HELP ups_battery_test_timestamp Last battery test timestamp
# TYPE ups_battery_test_timestamp gauge
ups_battery_test_timestamp{ups="nutdev1"} $(date +%s)
EOF
```
## Referințe
- **NUT Commands:** https://networkupstools.org/docs/user-manual.chunked/ar01s07.html
- **Battery Testing Best Practices:** https://www.apc.com/us/en/faqs/FAQ000267818/
- **Proxmox Notifications:** https://pve.proxmox.com/wiki/Notifications
## Istoric Versiuni
- **v1.0** (2025-10-06)
- Release inițial
- Test automat baterie cu `test.battery.start.quick`
- Rapoarte HTML și text
- Email notifications
- Cron lunar (1 ale lunii)
- Evaluare sănătate baterie (4 nivele)
- Monitorizare recuperare 5 minute
---
**Autor:** Claude Code
**Ultima actualizare:** 2025-10-06

View File

@@ -0,0 +1,253 @@
# 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:** Notificare email imediată + așteaptă 180 secunde (3 minute) înainte de shutdown
- **LOWBATT:** Shutdown imediat + notificare email
- **ONLINE:** Anulează timer-ele + notificare email "curent revenit"
### 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. **📧 Email: "Shutdown cluster PORNIT"**
3. Oprește toate VM-urile și LXC de pe toate nodurile (paralel)
4. Așteaptă 90 secunde pentru oprire graceful
5. Shutdown pve1 → **📧 Email: "Shutdown pve1 trimis"**
6. Shutdown pveelite → **📧 Email: "Shutdown pveelite trimis"**
7. Așteaptă 60 secunde
8. **📧 Email: "Shutdown pvemini (ULTIMUL NOD)"**
9. Comandă UPS shutdown (oprire completă UPS)
10. Shutdown pvemini (primary - ultimul)
Logare: `/var/log/ups-shutdown.log` + `journalctl -t ups-shutdown`
#### 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** - trimite notificări email via PVE::Notify
| Eveniment | Acțiune | Email |
|-----------|---------|-------|
| `onbatt_start` | UPS trece pe baterie | "Trecere pe baterie - Timer 3 min" |
| `onbatt` | Timer 3 min expirat | "Pe baterie 3 min - SHUTDOWN" + lansare shutdown |
| `online` | Curent revenit | "Curent revenit - OK" |
| `lowbatt` | Baterie critică | "BATERIE CRITICĂ" + shutdown imediat |
| `commbad` | Comunicație pierdută | "Comunicație pierdută cu UPS" |
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. **📧 Email: "Trecere pe baterie"**
3. Timer de 180 secunde pornește
4. Curent revine → Timer anulat
5. **📧 Email: "Curent revenit - OK"**
6. **Rezultat:** Niciun sistem nu se oprește
### Scenario 2: Întrerupere Lungă (> 3 minute)
1. Curent se întrerupe → UPS trece pe baterie
2. **📧 Email: "Trecere pe baterie"**
3. Timer 180 secunde expiră
4. **📧 Email: "Pe baterie 3 min - SHUTDOWN"**
5. Script de shutdown pornește:
- **📧 Email: "Shutdown cluster PORNIT"**
- VM-uri/LXC se opresc pe toate nodurile
- După 90s: pve1 se oprește → **📧 Email**
- pveelite se oprește → **📧 Email**
- După 60s: **📧 Email: "Shutdown pvemini (ULTIMUL NOD)"**
- UPS primește comandă shutdown
- pvemini se oprește
6. **Rezultat:** Shutdown orchestrat complet + UPS oprit
### Scenario 3: Baterie Scăzută Imediată
1. UPS raportează LOWBATT
2. **📧 Email: "BATERIE CRITICĂ - SHUTDOWN IMEDIAT"**
3. Shutdown **IMEDIAT** (fără timer)
4. Același flux de shutdown orchestrat
5. **Rezultat:** Shutdown rapid pentru protecție + UPS oprit
## 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: 2026-01-13 (adăugat notificări email + UPS shutdown)