Arbeitet zeitgesteuert (z.B. alle 10 Minuten) oder manuell.
Berechnet Deltas zwischen zwei Snapshots über das fast-diff-Feature.
Vorteil: Keine Write Amplification, ideal für WAN-Strecken mit höherer Latenz.
Nachteil: Höheres RPO (Recovery Point Objective) abhängig vom Intervall.
Vergleich: Journal vs. Snapshot
Kriterium
Journal-basiert (journaling)
Snapshot-basiert (snapshot-based)
RPO (Recovery Point Objective)
Extrem niedrig (Sekundenbereich)
Intervallabhängig (z.B. 5–15 Min.)
Performance-Impact
Hoch (doppeltes Schreiben)
Minimal (nur während Snapshot-Diff)
Netzwerkanforderung
Dauerhafter Stream
Höhere Bandbreite für periodische Bursts
Anwendungsfall
Kritische Datenbanken, VMs
Standard-VMs, LXC-Container
Mode wechseln via CLI
Bevor gespiegelt werden kann, muss der Pool-Modus definiert und das Feature aktiviert werden.
Aktivierung für Journal-basiertes Spiegeln:
# 1. Pool auf Image-Spiegelung vorbereitenrbd mirror pool enable vm-storage-a pool [--site-name]# 2. Journaling-Feature für das spezifische Image aktivierenrbd feature enable vm-storage-a/vm-100-disk-0 journaling
Aktivierung für Snapshot-basiertes Spiegeln:
# 1. Pool auf Snapshot-Modus umstellenrbd mirror pool enable vm-storage-a image [--site-name]# 2. Image im Snapshot Modus versetzenrbd mirror image enable vm-storage-a/$i snapshot;# 3. Schedule hinzufügen (z.B. alle 10 Minuten ein Sync-Point)rbd mirror snapshot schedule add 10m --pool vm-storage-a
Netzwerkarchitektur für rbd-mirror
Für eine stabile Spiegelung ist die Trennung der Datenströme entscheidend:
Ceph Public: VM-Lese-/Schreibzugriffe innerhalb des Standorts.
Ceph Cluster: OSD-Replikation und Heartbeats (Latenzkritisch!).
RBD-Mirror Netz: Dedizierte Verbindung über Standorte hinweg.
Routing über anderes Interface durch spezielle Route
Cluster verbinden: Zwei-Wege-Sync (Bidirektional)
Das klassische Verfahren (Manuell via Keyrings)
# ceph.conf von Quell auf Zielcluster kopierenscp /etc/ceph/ceph.conf <node>:/etc/pve/ceph/cluster-a.confln-s /etc/pve/ceph/cluster-a.conf /etc/ceph/cluster-a.conf# Auf Cluster A: Client anlegen und Key kopierenceph auth get-or-create client.rbd-mirror.cluster-b mon 'profile rbd' osd 'profile rbd'# Auf Cluster B: Peer mühsam via Monitor-IPs hinzufügenrbd mirror pool peer add vm-storage-a client.rbd-mirror.cluster-b@cluster-a
Cluster-Kopplung via Bootstrap-Token (Zwei-Wege)
Schritt 1: Token auf Cluster A erzeugen & auf Cluster B importieren
# Auf Cluster A (Site-A) ausführen:rbd mirror pool peer bootstrap create --site-name cluster-a vm-storage-a > token-a# Datei übertragen, dann auf Cluster B (Site-B) mit Richtung rx-tx importieren:rbd mirror pool peer bootstrap import --site-name cluster-b --direction rx-tx vm-storage-a token-a
Schritt 2: Gegen-Token auf Cluster B erzeugen & auf Cluster A importieren
# Auf Cluster B (Site-B) ausführen:rbd mirror pool peer bootstrap create --site-name cluster-b vm-storage-a > token-b# Datei übertragen, dann auf Cluster A (Site-A) mit Richtung rx-tx importieren:rbd mirror pool peer bootstrap import --site-name cluster-a --direction rx-tx vm-storage-a token-b
Das Proxmox VE “Dilemma”
Wie Ceph RBD-Mirror agiert: Es spiegelt die “nackten” Festplatten-Inhalte (Block-Ebene) asynchron auf den zweiten Cluster.
Wie Ceph NICHT agiert: Es weiß nichts von Proxmox-VM-Konfigurationen.
Das Problem:
Die Konfiguration unter /etc/pve/nodes/<node>/qemu-server/<VMID>.conf fehlt.
Firewall der VM sichern! /etc/pve/firewall/<VMID>.fw
Die Lösung: rsync / scp Automatisierung z.B. mit cronjob
Die Konfigurationsdateien müssen zusätzlich dateibasiert abgeglichen werden.
Promote und Demote
Falls Cluster A noch kontrolliert heruntergefahren werden kann:
rbd mirror image demote vm-storage-a/vm-100-disk-0# oderrbd mirror pool demote vm-storage-a
Image auf Cluster B zum Primärimage befördern (Promote)
Jetzt aktivieren wir die Schreibrechte auf der DR-Seite:
rbd mirror image promote vm-storage-a/vm-100-disk-0# oderrbd mirror pool promote vm-storage-a
Falls Cluster A nicht mehr heruntergefahren werden kann:
Ceph ist auf beiden Cluster bereits vorhanden und wird als Storage genutzt.
Kopplung der Cluster & Aktivierung der Snapshot-Spiegelung für alle Images im Pool.
Figure 1
8. Ausblick: Active-Active Cross-Over Pool-Design
Um die Hardware an beiden Standorten produktiv auszulasten, trennt man die Pfade logisch in zwei Pools auf:
Vorteil: VMs laufen aktiv an beiden Standorten. Replikation arbeitet kreuzweise.
Proxmox Integration: Beide Pools werden auf allen Nodes in der /etc/pve/storage.cfg eingebunden. Der passive Pool verhält sich im Normalbetrieb Read-Only.