feat(cluster): scripturi de oprire si repornire controlata a clusterului

cluster-shutdown.sh / cluster-startup.sh — automatizeaza procedura din
docs/oprire-planificata-cluster.md. Ruleaza de pe statia de admin prin SSH,
nu de pe un nod: nodul care se opreste ultimul nu poate raporta rezultatul,
iar la pornire scriptul trebuie sa astepte nodurile din afara.

Decizii importante:
- guest-urile din HA se opresc/pornesc cu `ha-manager set --state`, NU cu
  pct/qm shutdown; din CLI acestea nu actualizeaza state-ul HA si CRM-ul
  poate reporni guest-ul in mijlocul opririi
- apartenenta la HA se descopera dinamic din `ha-manager config`
- ordinea de oprire e pe dependente: consumatorii intai, CT 108 Oracle
  ultimul, cu `shutdown immediate` in baza inainte de a opri containerul
- shutdown-ul salveaza local ce rula; startup-ul porneste exact atat, ca sa
  nu reporneasca VM-uri oprite intentionat
- NEVER_AUTOSTART (109, 301, 310) protejeaza fallback-ul fara fisier de
  stare: VM 109 e DR-ul a carui pornire nedorita a declansat incidentul
  2026-04-20, restul sunt template-uri
- garda impotriva rularii de pe un nod sau din CT 171 (s-ar sinucide)
- ping_host() portabil Git Bash / Linux

Corectat in runbook: ordinea de oprire spunea "Oracle primul", gresit ca
ordine de dependente — VM 201 si CT 104 consuma baza.

Ambele testate cu --dry-run pe clusterul live.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RRyaDj39hPQ89SZS6URRpS
This commit is contained in:
Marius
2026-08-27 13:45:11 +03:00
parent bd83bf809c
commit 3ae491f8f2
4 changed files with 789 additions and 17 deletions

View File

@@ -10,7 +10,31 @@ mutare rack, mentenanță UPS, intervenții la switch.
---
## TL;DR
## Varianta automată
Toată procedura de mai jos e implementată în două scripturi, de rulat **de pe
stația de admin** (nu de pe un nod):
```bash
cd proxmox/cluster/scripts
./cluster-shutdown.sh --dry-run # arată exact ce ar face, nu atinge nimic
./cluster-shutdown.sh # oprire completă, cu confirmări
# ... după revenirea curentului, cu nodurile pornite fizic ...
./cluster-startup.sh # repornire completă
```
`cluster-shutdown.sh` salvează local ce guest-uri rulau, iar `cluster-startup.sh`
pornește **exact** ce era pornit — nu repornește VM-uri oprite intenționat.
**Rulează întâi cu `--dry-run`.** Restul documentului explică de ce fiecare pas e
necesar și cum se face manual din GUI, dacă preferi.
---
## TL;DR (procedura manuală)
1. **Datacenter → Options → HA Settings → Shutdown Policy = `Freeze`** ← fără asta, HA mută resursele
2. Dezactivează cron-urile de alertă (`pvemini-down-alert`, `vm109-watchdog`, `pveelite-down-alert`, `oom-alert`)
@@ -149,23 +173,30 @@ singure la primul tick după revenire.
## Pas 2 — oprește guest-urile manual
Ordine importantă: **Oracle primul**, restul după.
Ordinea corectă e cea de **dependențe: consumatorii întâi, Oracle ULTIMUL**.
VM 201 (IIS) și CT 104 (flowise) folosesc baza din CT 108.
| Nod | Guest | În HA | Cum |
|-----|-------|-------|-----|
| pvemini | **CT 108** central-oracle | Da | `shutdown immediate` în DB, apoi Shutdown CT |
| pvemini | VM 201 roacentral | Da | Shutdown (guest agent) |
| pvemini | VM 302 oracle-test | Nu | Shutdown |
| pvemini | VM 303 Win11-Adina | Nu | Shutdown |
| pvemini | CT 100 portainer | Da | Shutdown |
| pvemini | CT 102 docker.romfast.ro | Nu | Shutdown |
| pvemini | CT 103 dokploy | Da | Shutdown |
| pvemini | CT 104 flowise | Da | Shutdown |
| pvemini | CT 106 gitea | Da | Shutdown |
| pvemini | CT 171 claude-agent | Da | Shutdown |
| pve1 | CT 101 minecraft | Da | Shutdown |
| pve1 | CT 110 moltbot | Da | Shutdown |
| pveelite | — | — | nimic pornit (CT 301 și VM 109 sunt `stopped`) |
| # | Nod | Guest | În HA | Cum |
|---|-----|-------|-------|-----|
| 1 | pvemini | VM 303 Win11-Adina | Nu | Shutdown |
| 2 | pvemini | VM 302 oracle-test | Nu | Shutdown |
| 3 | pvemini | VM 201 roacentral | Da | Shutdown (guest agent) |
| 4 | pve1 | CT 101 minecraft | Da | Shutdown |
| 5 | pve1 | CT 110 moltbot | Da | Shutdown |
| 6 | pvemini | CT 104 flowise | Da | Shutdown |
| 7 | pvemini | CT 106 gitea | Da | Shutdown |
| 8 | pvemini | CT 103 dokploy | Da | Shutdown |
| 9 | pvemini | CT 102 docker.romfast.ro | Nu | Shutdown |
| 10 | pvemini | CT 100 portainer | Da | Shutdown |
| 11 | pvemini | CT 171 claude-agent | Da | Shutdown |
| 12 | pvemini | **CT 108 central-oracle** | Da | `shutdown immediate` în DB, apoi Shutdown CT |
pveelite nu are nimic pornit în mod normal (CT 301 și VM 109 sunt `stopped`).
> **Din CLI, folosește `ha-manager set <sid> --state stopped` pentru guest-urile
> din HA**, nu `pct shutdown` / `qm shutdown`. Din linia de comandă acestea **nu**
> actualizează state-ul HA, iar CRM-ul poate reporni guest-ul în mijlocul opririi.
> Din GUI nu e o problemă — butonul Shutdown trece oricum prin HA.
### Oracle CT 108 — shutdown curat al bazei