Add UPS battery replacement procedure and maintenance shutdown script
Adds complete procedure for replacing UPS battery when entire cluster is powered by the same UPS, requiring full cluster shutdown. New files: - scripts/ups-maintenance-shutdown.sh: Automated orchestrated shutdown for maintenance operations with confirmation prompts and progress display - docs/UPS-BATTERY-REPLACEMENT.md: Complete step-by-step guide for battery replacement including pre-shutdown, physical replacement, and post-startup verification procedures Features: - Orchestrated shutdown: VMs → LXC containers → secondary nodes → primary - Interactive confirmation before shutdown - Color-coded progress indicators - Countdown timers for each phase - Post-replacement verification checklist - Troubleshooting guide for common issues - Recovery procedures for cluster/quorum problems The procedure accounts for all 3 cluster nodes (pve1, pvemini, pveelite) being on the same UPS, requiring complete infrastructure shutdown. Documentation includes: - When to replace battery (based on monthly test results) - Pre-planning and user notification templates - Physical battery replacement safety procedures - Cluster recovery and VM restart procedures - Post-replacement testing and verification - 24-hour and 1-week monitoring checklists Estimated maintenance window: 30-60 minutes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -19,12 +19,14 @@ proxmox/ups/
|
|||||||
│ ├── ups-shutdown-cluster.sh # Script principal shutdown orchestrat
|
│ ├── ups-shutdown-cluster.sh # Script principal shutdown orchestrat
|
||||||
│ ├── ups-shutdown-test.sh # Script test (dry-run)
|
│ ├── ups-shutdown-test.sh # Script test (dry-run)
|
||||||
│ ├── upssched-cmd # Handler evenimente upssched
|
│ ├── upssched-cmd # Handler evenimente upssched
|
||||||
│ └── ups-monthly-test.sh # Test lunar automat baterie (NOU!)
|
│ ├── ups-monthly-test.sh # Test lunar automat baterie
|
||||||
|
│ └── ups-maintenance-shutdown.sh # Shutdown pentru mentenanță UPS (NOU!)
|
||||||
└── docs/ # Documentație
|
└── docs/ # Documentație
|
||||||
├── INSTALARE-NUT.md # Ghid instalare NUT pe Proxmox
|
├── INSTALARE-NUT.md # Ghid instalare NUT pe Proxmox
|
||||||
├── INSTALARE-WINNUT.md # Ghid instalare WinNUT pe Windows
|
├── INSTALARE-WINNUT.md # Ghid instalare WinNUT pe Windows
|
||||||
├── UPS-SHUTDOWN-README.md # Documentație completă sistem
|
├── UPS-SHUTDOWN-README.md # Documentație completă sistem
|
||||||
└── UPS-MONTHLY-TEST.md # Documentație test lunar baterie (NOU!)
|
├── UPS-MONTHLY-TEST.md # Documentație test lunar baterie
|
||||||
|
└── UPS-BATTERY-REPLACEMENT.md # Procedură înlocuire baterie (NOU!)
|
||||||
```
|
```
|
||||||
|
|
||||||
🎯 Utilizare:
|
🎯 Utilizare:
|
||||||
@@ -399,6 +401,12 @@ iptables -A INPUT -p tcp --dport 3493 -s 10.0.20.0/24 -j ACCEPT
|
|||||||
- NUT server pe pvemini expune date la toate nodurile
|
- NUT server pe pvemini expune date la toate nodurile
|
||||||
- Logging complet evenimente și teste
|
- Logging complet evenimente și teste
|
||||||
|
|
||||||
|
### ✅ Mentenanță Baterie (NOU!)
|
||||||
|
- Script automat shutdown orchestrat pentru înlocuire baterie
|
||||||
|
- Procedură pas-cu-pas completă cu checklist-uri
|
||||||
|
- Recovery procedures pentru probleme comune
|
||||||
|
- Documentație: [`docs/UPS-BATTERY-REPLACEMENT.md`](docs/UPS-BATTERY-REPLACEMENT.md)
|
||||||
|
|
||||||
## Autori și Istoric
|
## Autori și Istoric
|
||||||
|
|
||||||
- **Creat:** 2025-10-06
|
- **Creat:** 2025-10-06
|
||||||
|
|||||||
515
proxmox/ups/docs/UPS-BATTERY-REPLACEMENT.md
Normal file
515
proxmox/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
|
||||||
156
proxmox/ups/scripts/ups-maintenance-shutdown.sh
Normal file
156
proxmox/ups/scripts/ups-maintenance-shutdown.sh
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Script de shutdown orchestrat pentru mentenanță UPS
|
||||||
|
# Folosit când trebuie să oprești complet clusterul pentru înlocuire baterie
|
||||||
|
#
|
||||||
|
# Autor: Claude Code
|
||||||
|
# Data: 2025-10-06
|
||||||
|
|
||||||
|
LOGFILE="/var/log/ups-maintenance.log"
|
||||||
|
NODES=("10.0.20.200" "10.0.20.202") # pve1, pveelite (adaptează dacă IP-urile sunt altele)
|
||||||
|
|
||||||
|
# Culori pentru output
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
log() {
|
||||||
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOGFILE
|
||||||
|
}
|
||||||
|
|
||||||
|
echo -e "${BLUE}========================================${NC}"
|
||||||
|
echo -e "${BLUE}UPS MAINTENANCE - CLUSTER SHUTDOWN${NC}"
|
||||||
|
echo -e "${BLUE}========================================${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}⚠️ ATENȚIE: Acest script va opri TOATE nodurile cluster!${NC}"
|
||||||
|
echo -e "${YELLOW}⚠️ Folosit pentru mentenanță UPS (înlocuire baterie)${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${RED}Cluster nodes care vor fi oprite:${NC}"
|
||||||
|
echo " - pve1 (10.0.20.200)"
|
||||||
|
echo " - pveelite (10.0.20.202)"
|
||||||
|
echo " - pvemini (10.0.20.201) - ULTIMUL"
|
||||||
|
echo ""
|
||||||
|
read -p "Continui cu shutdown? (scrie 'DA' pentru confirmare): " confirm
|
||||||
|
|
||||||
|
if [ "$confirm" != "DA" ]; then
|
||||||
|
echo -e "${RED}Anulat de utilizator.${NC}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "========================================"
|
||||||
|
log "MAINTENANCE SHUTDOWN - START"
|
||||||
|
log "Initiated by: $(whoami)"
|
||||||
|
log "========================================"
|
||||||
|
|
||||||
|
# 1. Verificare status cluster înainte
|
||||||
|
log "Step 1: Verificare status cluster..."
|
||||||
|
pvecm status | tee -a $LOGFILE
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 2. Oprire VM-uri pe toate nodurile
|
||||||
|
log "Step 2: Oprire VM-uri pe TOATE nodurile..."
|
||||||
|
|
||||||
|
echo -e "${BLUE}Oprire VM-uri pe pvemini (local)...${NC}"
|
||||||
|
for vmid in $(qm list | awk 'NR>1 {print $1}'); do
|
||||||
|
vm_name=$(qm config $vmid | grep '^name:' | cut -d' ' -f2 || echo "VM-$vmid")
|
||||||
|
vm_status=$(qm status $vmid | awk '{print $2}')
|
||||||
|
|
||||||
|
if [ "$vm_status" == "running" ]; then
|
||||||
|
log " Oprire VM $vmid ($vm_name) pe pvemini..."
|
||||||
|
qm shutdown $vmid --timeout 180 &
|
||||||
|
else
|
||||||
|
log " VM $vmid ($vm_name) deja oprit"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Oprire VM-uri pe nodurile secundare
|
||||||
|
for node_ip in ${NODES[@]}; do
|
||||||
|
echo -e "${BLUE}Oprire VM-uri pe nod $node_ip...${NC}"
|
||||||
|
ssh -o ConnectTimeout=5 root@$node_ip "
|
||||||
|
for vmid in \$(qm list | awk 'NR>1 {print \$1}'); do
|
||||||
|
vm_name=\$(qm config \$vmid | grep '^name:' | cut -d' ' -f2 || echo 'VM-'\$vmid)
|
||||||
|
vm_status=\$(qm status \$vmid | awk '{print \$2}')
|
||||||
|
|
||||||
|
if [ \"\$vm_status\" == \"running\" ]; then
|
||||||
|
echo ' Oprire VM '\$vmid' ('\$vm_name') pe $node_ip...'
|
||||||
|
qm shutdown \$vmid --timeout 180 &
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
" 2>&1 | tee -a $LOGFILE
|
||||||
|
done
|
||||||
|
|
||||||
|
log "Așteptare 3 minute pentru shutdown VM-uri..."
|
||||||
|
echo -e "${YELLOW}Aștept 180 secunde pentru oprirea graceful a VM-urilor...${NC}"
|
||||||
|
for i in {180..1}; do
|
||||||
|
echo -ne "\r${YELLOW}Rămas: $i secunde...${NC} "
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 3. Verificare VM-uri oprite
|
||||||
|
log "Step 3: Verificare VM-uri oprite..."
|
||||||
|
running_vms=$(qm list | awk 'NR>1 && $3=="running" {print $1}')
|
||||||
|
if [ ! -z "$running_vms" ]; then
|
||||||
|
log "WARNING: VM-uri încă pornite pe pvemini: $running_vms"
|
||||||
|
echo -e "${YELLOW}WARNING: Unele VM-uri încă rulează. Oprire forțată în 30 secunde...${NC}"
|
||||||
|
sleep 30
|
||||||
|
for vmid in $running_vms; do
|
||||||
|
log " Force stop VM $vmid"
|
||||||
|
qm stop $vmid
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 4. Oprire containere (dacă există)
|
||||||
|
log "Step 4: Oprire containere LXC (dacă există)..."
|
||||||
|
pct list 2>/dev/null | awk 'NR>1 && $2=="running" {print $1}' | while read ctid; do
|
||||||
|
log " Oprire container $ctid"
|
||||||
|
pct shutdown $ctid --timeout 60 &
|
||||||
|
done
|
||||||
|
sleep 70
|
||||||
|
|
||||||
|
# 5. Oprire noduri secundare
|
||||||
|
log "Step 5: Oprire noduri secundare (pve1, pveelite)..."
|
||||||
|
for node_ip in ${NODES[@]}; do
|
||||||
|
log " Shutdown nod $node_ip în 2 minute..."
|
||||||
|
echo -e "${RED}Shutdown nod $node_ip...${NC}"
|
||||||
|
ssh -o ConnectTimeout=5 root@$node_ip "shutdown -h +2 'UPS Maintenance - Battery Replacement'" 2>&1 | tee -a $LOGFILE &
|
||||||
|
done
|
||||||
|
|
||||||
|
log "Așteptare 150 secunde pentru shutdown noduri secundare..."
|
||||||
|
echo -e "${YELLOW}Aștept 150 secunde pentru oprirea nodurilor secundare...${NC}"
|
||||||
|
for i in {150..1}; do
|
||||||
|
echo -ne "\r${YELLOW}Rămas: $i secunde până la shutdown pvemini...${NC} "
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 6. Oprire nod local (pvemini) - ULTIMUL
|
||||||
|
log "Step 6: Oprire pvemini (nod PRIMARY - ULTIMUL)..."
|
||||||
|
log "========================================"
|
||||||
|
log "MAINTENANCE SHUTDOWN - COMPLETE"
|
||||||
|
log "Nodurile secundare ar trebui să fie oprite."
|
||||||
|
log "pvemini se va opri în 2 minute."
|
||||||
|
log "========================================"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}========================================${NC}"
|
||||||
|
echo -e "${GREEN}SHUTDOWN ORCHESTRAT FINALIZAT${NC}"
|
||||||
|
echo -e "${GREEN}========================================${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}URMĂTORII PAȘI:${NC}"
|
||||||
|
echo "1. Așteaptă 2 minute pentru oprirea completă a pvemini"
|
||||||
|
echo "2. Verifică că toate LED-urile nodurilor sunt stinse"
|
||||||
|
echo "3. Deconectează UPS de la priză"
|
||||||
|
echo "4. Înlocuiește bateria UPS"
|
||||||
|
echo "5. Reconectează UPS la priză"
|
||||||
|
echo "6. Pornește nodurile (apasă buton power sau WOL)"
|
||||||
|
echo "7. Verifică cluster cu: pvecm status"
|
||||||
|
echo ""
|
||||||
|
echo -e "${RED}pvemini se va opri în 2 minute!${NC}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
shutdown -h +2 "UPS Maintenance - Battery Replacement - Primary Node"
|
||||||
|
|
||||||
|
exit 0
|
||||||
Reference in New Issue
Block a user