diff --git a/proxmox/vm109-windows-dr/README.md b/proxmox/vm109-windows-dr/README.md index 7d1160b..1b6585b 100644 --- a/proxmox/vm109-windows-dr/README.md +++ b/proxmox/vm109-windows-dr/README.md @@ -4,26 +4,33 @@ **VMID:** 109 **Rol:** Disaster Recovery pentru Oracle Database (backup RMAN de pe server Windows extern) -## ⚠️ Important — VM 109 NU este în HA (din 2026-04-20) +## ⚠️ Important — Topologie după 2026-04-25 -După incidentul 2026-04-20 (vezi `../cluster/incidents/2026-04-20-cluster-outage.md`), VM 109 a fost scos din HA cu `ha-manager remove vm:109`. Motivele: +VM 109 trăiește pe **pveelite** (10.0.20.202), co-located cu storage-ul NFS Oracle backups. Configurația post-incident 04-20: -- VM 109 este un DR test VM, nu un serviciu live -- Scriptul DR test de sâmbătă (`scripts/weekly-dr-test-proxmox.sh`) pornește/oprește VM 109 manual cu `qm start/stop` -- Cu HA activ, un bug `set -e` în script a lăsat VM 109 pornit 2.5 zile, apoi la crashul pvemini HA a relocat VM 109 pe pveelite (16 GB) → OOM cascade - -**Efecte:** -- VM 109 NU mai e repornit automat la crash node -- VM 109 NU se mai mută de pe pvemini -- VM 109 pornește DOAR la invocarea scriptului DR sau manual cu `qm start 109` -- Scriptul DR are acum `trap cleanup_vm EXIT` care garantează `qm stop 109` la orice ieșire +- **VM 109 în HA, grup `ha-prefer-pveelite`** (pveelite=100, pvemini=50, pve1=10), `state=stopped`, `nofailback=1` — HA face failover dacă pveelite cade dar nu repornește VM 109 automat (rămâne stopped, scriptul DR îl pornește săptămânal). +- **Apărări împotriva incident 04-20**: + - `trap cleanup_vm EXIT` în scriptul DR (commit 8a0c557) cu guard `DR_VM_STARTED_BY_US` (commit 2e8cd9c) — oprește VM 109 doar dacă scriptul l-a pornit. + - `vm109-watchdog.sh` cron pe ambele pveelite + pvemini (cluster-aware) — oprește forțat VM 109 dacă rulează > 60 min în afara ferestrei test (Sâmbătă 05:55-07:30). Debug exempt: `touch /var/run/vm109-debug.flag`. + - Pre-flight check în DR script: refuză `qm start 109` dacă cluster degraded sau memorie disponibilă < (VM 109 mem + 1 GB margin). + - `max_restart=3, max_relocate=2` pe toate serviciile HA — cap pe restart loops la OOM. **Verificare status:** ```bash -ssh root@10.0.20.201 "qm status 109" # trebuie stopped -ssh root@10.0.20.201 "ha-manager status | grep 109 || echo 'nu e în HA'" +ssh root@10.0.20.201 "ha-manager status | grep -E '109|201|108'" +ssh root@10.0.20.202 "qm status 109" # trebuie stopped între teste ``` +## 🔄 Storage Failover (pveelite → pvemini) + +`/mnt/pve/oracle-backups` e dataset ZFS replicat pveelite → pvemini la 15 min (`zfs-replicate-oracle-backups.sh`) + mirror nightly pe pve1 backup-ssd (`nightly-backup-mirror.sh`). La pveelite down: + +1. **Email automat** din `pveelite-down-alert.sh` (cron pe pvemini, prag 5 min) cu instrucțiuni de failover copy-paste. +2. Operator rulează pe pvemini: `/opt/scripts/failover-dr-to-pvemini.sh` — promote ZFS readonly → off, configurează NFS export, patch primary Oracle scheduled task IP via SSH. +3. Când pveelite revine: `/opt/scripts/failback-dr-to-pveelite.sh` — invers, cu zfs send incremental + restaurare config. + +Script-urile refuză să ruleze dacă cealaltă parte e accesibilă (anti-split-brain). + --- # 🛡️ Oracle DR System - Complete Architecture