Files
ROMFASTSQL/proxmox/cluster/failover/README.md
Marius ff7e7da6d1 docs(cluster): procedura de oprire planificata + corectii stare HA reala
Runbook nou pentru oprirea controlata a celor 3 noduri (lucrari electrice,
mutare rack, mentenanta UPS) fara ca HA sa relocheze resursele si fara ca
watchdog-ul sa reseteze hard nodul ramas fara quorum.

Doua capcane documentate:
- /etc/pve/datacenter.cfg nu exista => shutdown_policy implicit `conditional`
  => poweroff pe nod declanseaza FAILOVER, nu freeze
- watchdog-ul face reset hard dupa ~60s pe nodul care pierde quorumul cu
  servicii HA inca active

Corectii in failover/README.md, verificate pe clusterul live:
- VM 201 ESTE in HA (grup ha-prefer-pvemini), docul spunea ca nu e
- CT 108 e in ha-prefer-pvemini (pvemini:100, pve1:50, pveelite:10),
  nu in ha-group-main cu pveelite:50/pve1:33
- replicare CT 108 si VM 201 la */15 min, nu */5 => RPO real 15 min

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RRyaDj39hPQ89SZS6URRpS
2026-08-27 12:28:54 +03:00

5.0 KiB

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.

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:

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):

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.

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

# 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