docs(dr): refresh README with post-2026-04-25 architecture
VM 109 returned to its original home on pveelite, co-located with
oracle-backups NFS storage. The README is updated to reflect that:
the VM is now in HA (ha-prefer-pveelite, state=stopped, nofailback=1)
rather than excluded from HA, and the new layered defences (trap
guard, watchdog cron, dynamic memory pre-flight, max_restart caps)
are documented alongside the original 8a0c557 trap.
Adds a Storage Failover section describing the pveelite -> pvemini
manual failover flow: email alert from pveelite-down-alert.sh,
failover-dr-to-pvemini.sh on the surviving node, failback when
pveelite returns. The pve1 nightly mirror is the third copy.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,26 +4,33 @@
|
|||||||
**VMID:** 109
|
**VMID:** 109
|
||||||
**Rol:** Disaster Recovery pentru Oracle Database (backup RMAN de pe server Windows extern)
|
**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
|
- **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).
|
||||||
- Scriptul DR test de sâmbătă (`scripts/weekly-dr-test-proxmox.sh`) pornește/oprește VM 109 manual cu `qm start/stop`
|
- **Apărări împotriva incident 04-20**:
|
||||||
- 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
|
- `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`.
|
||||||
**Efecte:**
|
- Pre-flight check în DR script: refuză `qm start 109` dacă cluster degraded sau memorie disponibilă < (VM 109 mem + 1 GB margin).
|
||||||
- VM 109 NU mai e repornit automat la crash node
|
- `max_restart=3, max_relocate=2` pe toate serviciile HA — cap pe restart loops la OOM.
|
||||||
- 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
|
|
||||||
|
|
||||||
**Verificare status:**
|
**Verificare status:**
|
||||||
```bash
|
```bash
|
||||||
ssh root@10.0.20.201 "qm status 109" # trebuie stopped
|
ssh root@10.0.20.201 "ha-manager status | grep -E '109|201|108'"
|
||||||
ssh root@10.0.20.201 "ha-manager status | grep 109 || echo 'nu e în HA'"
|
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
|
# 🛡️ Oracle DR System - Complete Architecture
|
||||||
|
|||||||
Reference in New Issue
Block a user