# 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 `*/5` min, pve1 `*/5` min | 5 min | | VM 201 Windows roacentral | Nivel 0 | **NU** (failover manual) | pveelite `*/5` min, pve1 `*/5` min | 5 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 — failover manual VM 201 (Windows production) **nu este în HA deliberat**. Incident anterior: când pvemini a fost scos temporar din HA pentru mentenanță, VM 201 a migrat automat — comportament nedorit pentru Windows production care cere fereastră de mentenanță controlată. ### 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-group-main` (pvemini:100, pveelite:50, pve1:33) - `max_restart 3, max_relocate 2` - Replicare 5 min → failover automat cu RPO 5 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 ```