Disaster Recovery (ZFS Replication)
Postup pro obnovení kritických služeb při výpadku jednoho z Proxmox nodů.
[!IMPORTANT] RTO (Recovery Time Objective): ~5-10 minut (ZFS replika je ready, stačí spustit VM) RPO (Recovery Point Objective): max 90 minut (interval ZFS replikace
*/01:30)Stav od 2026-07-06 večer: dvouuzlový cluster pmx1 + nový pmx2 (ASUS PN54-S1). QDevice a ha-manager zatím nejsou — failover je ruční podle tohoto dokumentu (viz
todos.md).
⚠️ Krok 0 při výpadku KTERÉHOKOLI uzlu: kvórum
Dvouuzlový cluster ztratí při výpadku jednoho uzlu kvórum — /etc/pve přejde do read-only a VM nejdou spouštět (cfs-lock ... no quorum!). Proto na přeživším uzlu vždy nejdřív:
pvecm expected 1
Dále: config VM „patří" mrtvému uzlu, před startem ho přesuň (příklad pro VM 102 při smrti pmx2):
mv /etc/pve/nodes/pmx2/qemu-server/102.conf /etc/pve/nodes/pmx1/qemu-server/
[!CAUTION]
pvecm expected 1nepřežije reboot přeživšího uzlu — po restartu bez kvóra nenastartuje žádná VM (ani pfSense = celý dům bez sítě; stalo se 2026-07-06). Po každém rebootu zopakovat z konzole, dokud je cluster degradovaný. Pokud je mrtvý uzel definitivně ztracen, udělej stav trvalým:pvecm delnode <mrtvý-uzel>(předtím zálohuj/etc/pve/nodes/<uzel>/— obsahuje configy jeho VM/LXC).
Architektura
graph LR
subgraph pmx2_group["pmx2 — nový ASUS (192.168.20.3)"]
VM100["🟢 pfSense (100)"]
VM102["🟢 HA (102)"]
CT107["🟢 Debian-svc/nginx (107)"]
end
subgraph pmx1_group["pmx1 (192.168.20.2)"]
VM105["🟢 PBS (105)"]
VM109["🟢 UniFi OS (109)"]
CT106["🟢 Scrypted (106)"]
CT104["🟡 Immich (104, experiment)"]
VM103["🔴 Win11 (103, trvale off)"]
end
VM100 -.->|"ZFS repl. */01:30"| pmx1_group
VM102 -.->|"ZFS repl. */01:30"| pmx1_group
CT107 -.->|"ZFS repl. */01:30"| pmx1_group
VM105 -.->|"ZFS repl. */01:30"| pmx2_group
ZFS Replication Jobs
| Job ID | Guest | Směr | Interval |
|---|---|---|---|
100-0 |
pfSense | pmx2 → pmx1 | */01:30 (každých 90 min) |
102-0 |
Home Assistant | pmx2 → pmx1 | */01:30 |
107-0 |
debian-services (nginx, monitoring) | pmx2 → pmx1 | */01:30 |
105-0 |
PBS | pmx1 → pmx2 | */01:30 |
Bez rate limitu (reálný strop ~30 MB/s dává SSH šifrování na 1GbE). Scrypted (106), UniFi (109) a Immich (104) repliku vědomě nemají — obnovují se z PBS zálohy (~10 min), Immich je experiment bez zálohy.
Správa: pvesr list, pvesr status, pvesr schedule-now <job-id>
🚨 Výpadek pmx2 (kritický — nese síť i HA)
Dopad: pfSense (= internet, DNS, DHCP, celá síť), Home Assistant, debian-services (nginx/ha.marada.name, Grafana, Loki, n8n).
PBS, Scrypted (zvonek), UniFi a kamery zůstávají na pmx1 — ale bez routeru jsou dostupné jen lokálně.
1. Přístup k pmx1
Síť je bez DHCP/DNS — použij zařízení s platnou DHCP lease nebo statickou IP (192.168.20.x, bez gateway to na LAN funguje): https://192.168.20.2:8006. Kdyby nic, monitor + klávesnice k pmx1.
2. Spustit klenoty z replik (pořadí: síť první)
pvecm expected 1 # Krok 0 — bez toho start selže (no quorum)
mv /etc/pve/nodes/pmx2/qemu-server/100.conf /etc/pve/nodes/pmx1/qemu-server/
mv /etc/pve/nodes/pmx2/qemu-server/102.conf /etc/pve/nodes/pmx1/qemu-server/
mv /etc/pve/nodes/pmx2/lxc/107.conf /etc/pve/nodes/pmx1/lxc/
qm start 100 # pfSense — vrátí síť; počkat ~60 s, ověřit ping 192.168.20.1 a 8.8.8.8
qm start 102 # Home Assistant
pct start 107 # debian-services (nginx, monitoring)
Poté zakázat replikační joby mířící na mrtvý uzel (spamují chyby): pvesr disable 100-0 102-0 107-0.
[!NOTE] RAM na pmx1 bude těsná (klenoty + jeho vlastní zátěž ≈ 29/30 GB). Pokud je potřeba prostor:
pct stop 104(Immich, experiment).
3. Ověření
| Služba | Test | Očekávaný výsledek |
|---|---|---|
| pfSense / internet | ping 8.8.8.8 |
Odpověď |
| Home Assistant | http://192.168.20.7:8123 |
Dashboard |
| Externí přístup | https://ha.marada.name |
HA login |
🚨 Výpadek pmx1 (méně kritický)
Dopad: PBS (zálohy počkají), UniFi management (AP/switche jedou dál na last-known configu), Scrypted (zvonek!), Immich. Síť, internet, HA i externí přístup zůstávají funkční (pmx2).
Obnova
# na pmx2:
pvecm expected 1 # Krok 0 — kvórum
mv /etc/pve/nodes/pmx1/qemu-server/105.conf /etc/pve/nodes/pmx2/qemu-server/
qm start 105 # PBS z repliky
# Scrypted (zvonek) — repliku nemá, obnov z PBS zálohy:
pct restore 106 pbs-truenas:backup/ct/106/<nejnovější> --storage local-zfs
pct start 106
# UniFi (109) obnov z PBS jen pokud potřebuješ management (jinak počká na opravu uzlu)
Poté pvesr disable 105-0.
🚨 Výpadek Fyzického Switche (Síť)
Produkční switch je jediný: UniFi USW-48-PoE v racku. Záloha = Aruba HPE 1830 24G (cold standby tamtéž, 12 PoE portů). Kabely se nepřepojují 1:1 — porty na Arubě jsou jiné a je jich míň; přepojuje se po fázích podle priorit (konektivita → WiFi/IoT → kamery).
➡️ Kompletní postup a mapování portů: Failover Plán v plan.md — jediný zdroj pravdy, tady ho neduplikujeme.
[!WARNING] Plán funguje jen s předkonfigurovanou Arubou (VLANy dle mapování). Konfiguraci záložního switche je nutné ověřit po každé změně VLAN/portů na USW-48 — neověřená záloha = fiktivní záloha. Stav ověření viz
todos.md.
Poznámka pro nouzový provoz: všechna WiFi AP musí skončit v jednom fyzickém switchi (rozdělená AP mezi dva switche = 5min roamingové výpadky kvůli MAC aging). Pokud se všechna nevejdou, přebytečná nech odpojená.
Po Opravě Nodu
- Vypnout DR VM na záložním nodu
- Nastartovat originální VM na opraveném nodu
- Ověřit replikaci —
pvesr status(může být potřebapvesr delete+pvesr create-local-jobpro reset)
[!CAUTION] Nikdy nepouštět stejnou VM na obou nodech současně! Způsobí IP konflikty a ZFS split-brain.