Přeskočit obsah

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 1 nepř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

  1. Vypnout DR VM na záložním nodu
  2. Nastartovat originální VM na opraveném nodu
  3. Ověřit replikacipvesr status (může být potřeba pvesr delete + pvesr create-local-job pro reset)

[!CAUTION] Nikdy nepouštět stejnou VM na obou nodech současně! Způsobí IP konflikty a ZFS split-brain.