# Failover & High Availability Strategia HA pe cluster, separată pe nivele de criticitate. ## Rezumat resurse critice | Resursă | Criticitate | HA automat | Replicare | RPO | |---------|-------------|------------|-----------|-----| | CT 108 Oracle central | Nivel 0 | Da | pveelite `*/15` min, pve1 `*/15` min | 15 min | | VM 201 Windows roacentral | Nivel 0 | **Da** (din 2026, vezi mai jos) | pveelite `*/15` min, pve1 `*/15` min | 15 min | | CT 171 claude-agent | Nivel 1 | Da | pveelite `*/15` min, pve1 `*/15` min | 15 min | | CT 104 flowise | Nivel 2 | Da | zilnic 21:15 | 24h | | CT 106 gitea | Nivel 2 | Da | `*/2` ore | 2h | | CT 100 portainer | Nivel 2 | Da | zilnic | 24h | ## VM 201 — HA automat + procedură manuală de rezervă > **Corectat 2026-08-27.** Docul spunea anterior că VM 201 nu este în HA. **Nu mai > este adevărat** — verificat pe cluster live: `vm:201 (pvemini, started)`, grup > `ha-prefer-pvemini`, `max_restart 3`, `max_relocate 2`. VM 201 (Windows production) **este acum în HA**, grup `ha-prefer-pvemini` (pvemini:100, pve1:50, pveelite:10). Dacă pvemini cade, CRM-ul o repornește automat pe pve1 din ultima replicare ZFS (RPO 15 min). Motivul pentru care a stat inițial în afara HA: la o mentenanță în care pvemini a fost scos temporar din HA, VM 201 a migrat automat — comportament nedorit pentru Windows production, care cere fereastră de mentenanță controlată. **Acest risc rămâne valabil.** Pentru orice oprire planificată setează `shutdown_policy=freeze` înainte — vezi [Oprire planificată a clusterului](../docs/oprire-planificata-cluster.md). Procedura manuală de mai jos rămâne validă ca **rezervă**, pentru cazul în care HA nu reușește recovery-ul (lipsă quorum, pveelite fără RAM, replicare rămasă în urmă). ### Declanșator alertă Cron pe pveelite verifică pvemini la fiecare minut: - Script: `/opt/scripts/pvemini-down-alert.sh` - După 2 minute DOWN consecutive → mail `mmarius28@gmail.com` cu comanda failover ready-to-run ### Execuție failover Din orice sesiune SSH: ```bash ssh root@10.0.20.202 /opt/scripts/failover-vm201.sh ``` Scriptul: 1. Verifică pvemini efectiv DOWN (ping + ssh); abort dacă răspunde 2. Verifică VM 201 nu rulează deja pe pveelite 3. Afișează ultima replicare ZFS disponibilă local 4. Cere confirmare interactivă (tastezi `DA`) 5. `qm start 201` pe pveelite 6. Trimite mail confirmare cu pași post-failover Pentru automatizare (fără prompt): ```bash ssh root@10.0.20.202 /opt/scripts/failover-vm201.sh --yes ``` ### După revenire pvemini — script interactiv **NU porni automat VM 201 pe pvemini.** Date posibil divergente. ```bash ssh root@10.0.20.202 /opt/scripts/recover-vm201-to-pvemini.sh ``` Scriptul verifică: - pvemini uptime min. 30 min + erori recente - pvemini reachable ssh + VM 201 nu rulează deja acolo (anti split-brain) - VM 201 running local pe pveelite Pași executați automat (cu confirmare): 1. `qm shutdown 201` pe pveelite 2. `pvesr create-local-job 201-2 pvemini --source pveelite` + run forțat 3. `qm migrate 201 pvemini` offline 4. Cleanup job replicare inversă 5. `qm start 201` pe pvemini Non-interactiv: adaugă `--yes`. ## CT 108 Oracle — HA automat - Group `ha-prefer-pvemini` (pvemini:100, pve1:50, pveelite:10) — *corectat 2026-08-27, docul spunea `ha-group-main` cu alte priorități* - `max_restart 3, max_relocate 2` - Replicare `*/15` min → failover automat cu RPO 15 min - **Constrângere RAM pveelite 16 GB**: dacă pvemini cade, pveelite trebuie să aibă spațiu pentru CT 108 (8 GB) + CT 101 existent + eventual alte CT-uri HA ## CT 171 claude-agent — HA automat - Adăugat în HA pentru acces Claude Code continuu - Dacă pvemini cade, CT 171 pornește pe pveelite cu ultima replicare (max 15 min în urmă) - State = workspace files din `/workspace/` — replicate ZFS ## Fișiere relevante | Fișier | Locație | Scop | |--------|---------|------| | `failover-vm201.sh` | `/opt/scripts/` pe pveelite | Failover manual VM 201 pvemini → pveelite | | `recover-vm201-to-pvemini.sh` | `/opt/scripts/` pe pveelite | Recovery interactiv VM 201 pveelite → pvemini | | `pvemini-down-alert.sh` | `/opt/scripts/` pe pveelite | Watchdog 1 min, mail dacă pvemini DOWN 2 min | | `oom-alert.sh` | `/opt/scripts/` pe toate nodurile | Alertă OOM kills | ## Comenzi utile ```bash # Stare replicare ssh root@10.0.20.201 "pvesr status" # Stare HA ssh root@10.0.20.201 "ha-manager status" # Forțează replicare acum (util înainte de mentenanță) ssh root@10.0.20.201 "pvesr run --id 108-1; pvesr run --id 201-1; pvesr run --id 171-1" # Test script failover (dry — fără confirmare) ssh root@10.0.20.202 "/opt/scripts/failover-vm201.sh" # va abort dacă pvemini răspunde ``` ## Oprire planificată a întregului cluster Pentru lucrări electrice, mutare rack sau mentenanță UPS — **nu folosi butonul Shutdown direct**. Politica implicită `conditional` relochează resursele HA, iar watchdog-ul resetează hard nodul rămas fără quorum. → [Oprire planificată a clusterului](../docs/oprire-planificata-cluster.md)