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:
460
proxmox/cluster/ups/docs/INSTALARE-NUT.md
Normal file
460
proxmox/cluster/ups/docs/INSTALARE-NUT.md
Normal 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
|
||||
376
proxmox/cluster/ups/docs/INSTALARE-WINNUT.md
Normal file
376
proxmox/cluster/ups/docs/INSTALARE-WINNUT.md
Normal 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!**
|
||||
515
proxmox/cluster/ups/docs/UPS-BATTERY-REPLACEMENT.md
Normal file
515
proxmox/cluster/ups/docs/UPS-BATTERY-REPLACEMENT.md
Normal 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 să 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 să încarce bateria nouă
|
||||
- Verifică că 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 să 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
|
||||
470
proxmox/cluster/ups/docs/UPS-MONTHLY-TEST.md
Normal file
470
proxmox/cluster/ups/docs/UPS-MONTHLY-TEST.md
Normal 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
|
||||
253
proxmox/cluster/ups/docs/UPS-SHUTDOWN-README.md
Normal file
253
proxmox/cluster/ups/docs/UPS-SHUTDOWN-README.md
Normal 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)
|
||||
Reference in New Issue
Block a user