Files
ROMFASTSQL/proxmox/cluster/failover
Claude Agent 8a0c557981 feat(failover): add VM 201 manual failover + recovery scripts, watchdog alert
VM 201 (Windows critical) stays out of HA by design. Added:
- failover-vm201.sh: interactive failover pvemini -> pveelite with ZFS replication state
- recover-vm201-to-pvemini.sh: interactive reverse migration with uptime + split-brain checks
- pvemini-down-alert.sh: cron watchdog on pveelite, emails full runbook after 2min DOWN

Replication RPO tightened: CT 108 + VM 201 to 5min, CT 171 to 15min.
CT 171 added to HA (ha-group-main) for continuous Claude Code access.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 12:40:49 +00:00
..

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:

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

# 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