zrepl - darmowa replikacja ZFS, która zawstydza komercję
Kiedy rozmawia się z administratorami używającymi NetAppu, Pure Storage czy Dell EMC PowerStore, temat replikacji pojawia się zawsze w tym samym kontekście: "mamy licencję na SnapMirror / synchronous replication, kosztowała fortunę, ale działa". Tymczasem od kilku lat istnieje narzędzie, które robi to samo - i więcej - za zero złotych. Nazywa się zrepl i jeśli Twoja infrastruktura stoi na ZFS, warto wiedzieć, co masz pod ręką.
Czym jest zrepl?
zrepl to napisany w Go demon do replikacji filesystemów ZFS. Nie jest nakładką na zfs send | ssh | zfs recv oklejoną bashowym skryptem - to pełnoprawna usługa z własnym protokołem RPC, mechanizmem wznowienia transferu, zarządzaniem snapshotami i eksportem metryk do Prometheusa. Projekt jest aktywnie rozwijany, dostępny na Debianie, Ubuntu, FreeBSD i pochodnych RedHata.
Kluczowa architektura to model push/pull: serwer źródłowy może pchać dane do zdalnego odbiorcy (push), albo odbiorca może aktywnie pobierać snapshoty ze źródła (pull). To istotne - w scenariuszu backupu często wygodniej, żeby serwer backupowy sam inicjował połączenie, zamiast dawać serwerowi produkcyjnemu dostęp do backupowej maszyny.
Co zrepl robi, za co gdzie indziej płacisz
Inkrementalna replikacja ze śledzeniem stanu
Podstawa działania zrepl to mechanizm bookmarks i holds ZFS. Narzędzie automatycznie tworzy zakładki po stronie nadawcy, które pozwalają wyznaczać punkt startowy dla kolejnego transferu bez trzymania pełnego snapshotu. Jeśli połączenie zostanie przerwane w trakcie - transfer jest automatycznie wznawiany od miejsca, w którym stanął (zfs send --resume). Brzmi banalnie, ale w praktyce w wielu komercyjnych narzędziach backup to opcja premium.
Szyfrowanie end-to-end do niezaufanego odbiorcy
zrepl wspiera encrypted raw send - dane są replikowane w postaci zaszyfrowanej (native ZFS encryption) i serwer docelowy nigdy nie widzi klucza ani treści. Możesz replikować wrażliwe dane do chmury lub kolokacji bez udostępniania kluczy. W produktach klasy enterprise to osobna licencja lub osobny moduł.
Granularne polityki retencji
Zamiast trzymać X ostatnich snapshotów, zrepl oferuje schemat grandfathering: definiujesz, że chcesz mieć snapshoty co godzinę z ostatnich 24h, codzienne z ostatniego tygodnia, tygodniowe z ostatniego miesiąca i miesięczne z ostatniego roku. Reguły działają niezależnie po stronie źródłowej i docelowej. Zrób to za darmo w NetApp ONTAP bez SnapCenter - powodzenia.
Transport: TCP z TLS lub SSH
Połączenie między nadawcą a odbiorcą można zestawić przez czysty TCP (szybko, brak narzutu), TCP z wzajemnym uwierzytelnieniem TLS (certyfikaty klientów) lub SSH. Ograniczenie pasma (bandwidth_limit) jest wbudowane - przydatne, gdy replikujesz przez łącze produkcyjne i nie chcesz zagłodzić ruchu użytkowników.
Monitoring out-of-the-box
zrepl eksponuje endpoint /metrics w formacie Prometheus. Czas ostatniej udanej replikacji, liczba błędów, ilość przetransferowanych danych - wszystko gotowe do podpięcia pod Grafanę. Porównaj to z sytuacją, w której musisz parsować logi komercyjnego narzędzia, żeby wyciągnąć cokolwiek sensownego do alertów.
A co z woluminami blokowymi?
ZFS pozwala tworzyć nie tylko filesystemy, ale też zvole - blokowe urządzenia wirtualne, które można eksportować przez iSCSI jako dyski widoczne dla innych systemów. Typowe zastosowanie: serwer ESXi lub Proxmox montuje datastora przez iSCSI bezpośrednio z zasobnika ZFS.
zrepl replikuje zvole dokładnie tak samo jak zwykłe filesystemy ZFS - bo z perspektywy puli ZFS to po prostu kolejny dataset. Replikacja jest blokowa, inkrementalna i spójna. Jedyna rzecz, o której trzeba pamiętać: przed robieniem snapshotu zvola wypadałoby zamrozić I/O po stronie systemu korzystającego ze zvola (np. przez VMware quiesce lub fsfreeze), żeby snapshot był crash-consistent. zrepl ma wbudowany mechanizm pre/post-snapshot hooks, w których możesz wywołać dowolny skrypt - idealnie nadaje się do integracji z tym procesem.
Praktyczny wniosek: Jeśli prowadzisz małe lub średnie środowisko wirtualizacyjne oparte na Proxmoksie z ZFS i eksportujesz datastory przez iSCSI jako zvole, możesz mieć pełną replikację tych wolumenów na zdalny węzeł lub NAS - bez żadnych dodatkowych kosztów licencyjnych.
Szybki przykład konfiguracji
Poniżej minimalna konfiguracja push - serwer produkcyjny replikuje data/vm-disks (w tym zvole) na zdalny serwer backupowy:
# /etc/zrepl/zrepl.yml (po stronie źródłowej)
jobs:
- name: push_to_backup
type: push
connect:
type: tls
address: "backup.example.local:8448"
ca: /etc/zrepl/ca.crt
cert: /etc/zrepl/prod.crt
key: /etc/zrepl/prod.key
filesystems:
"data/vm-disks<": true # replikuje dataset i wszystkie dzieci (w tym zvole)
snapshotting:
type: periodic
prefix: zrepl_
interval: 15m
hooks:
- type: command
path: /usr/local/bin/freeze-vms.sh # quiesce przed snapshotem
timeout: 30s
err_is_fatal: true
pruning:
keep_sender:
- type: grid
grid: 1x1h(keep=all) | 24x1h | 14x1d | 8x4w | 24x4w
regex: "^zrepl_"
keep_receiver:
- type: grid
grid: 24x1h | 30x1d | 52x1w
regex: "^zrepl_"
Konfiguracja odbiorcy (serwer backup) to osobny job typu sink, który nasłuchuje na porcie 8448 i przyjmuje dane z uwierzytelnionym certyfikatem klienta. Dokumentacja na zrepl.github.io opisuje to krok po kroku.
Porównanie z komercyjnymi alternatywami
| Funkcja | zrepl | NetApp SnapMirror | Veeam (z agentami) |
|---|---|---|---|
| Koszt | $0 | Licencja per TB / per węzeł | Licencja per socket lub VM |
| Replikacja inkrementalna ZFS | Natywna (zfs send) | Natywna (WAFL) | Przez agenta, nie natywnie |
| Encrypted raw send | Wbudowane | Osobna opcja/licencja | Szyfrowanie tunelu, nie danych |
| Replikacja zvoli | Tak (jak każdy dataset) | Tak (SnapMirror for SAN) | Wymaga Veeam Backup for Storage |
| Retencja grandfathering | Wbudowana, elastyczna | SnapVault + polityki ONTAP | GFS - tylko w edycjach płatnych |
| Prometheus metrics | Natywne | Wymaga ONTAP API lub eksportera | REST API, brak natywnego exportera |
| Wznowienie przerwanego transferu | Automatyczne | Automatyczne | Retry od początku lub checkpoint (Ent.) |
Oczywiście porównanie nie jest do końca uczciwe - NetApp czy Pure Storage oferują znacznie więcej niż samą replikację (tiering, dedup, QoS na poziomie kontrolera sprzętowego). Ale jeśli prowadzisz środowisko oparte na ZFS (TrueNAS, Proxmox z ZFS, FreeBSD, Ubuntu z OpenZFS) i szukasz solidnej replikacji danych - zrepl robi tę robotę bez żadnych kosztów i bez dependency na vendora.
Kiedy zrepl może nie wystarczyć
Uczciwie trzeba powiedzieć, że zrepl nie jest odpowiedzią na każdy problem:
- Synchronous replication (RPO = 0) - zrepl działa asynchronicznie. Jeśli potrzebujesz synchronicznej replikacji blokowej na poziomie sprzętu (np. NetApp MetroCluster, Pure Storage ActiveCluster), to nie ta liga.
- Brak ZFS po drugiej stronie - odbiorca musi mieć ZFS. Nie ma opcji replikacji na np. ext4 czy NTFS.
- GUI - nie ma. Wszystko konfiguruje się w YAML-u i obsługuje przez CLI lub Prometheusa. Dla niektórych to zaleta, dla innych bloker.
- Wsparcie komercyjne - to projekt open source utrzymywany przez jednego głównego developera (Christian Schwarz). Brak enterprise support.
Podsumowanie
zrepl to jeden z tych projektów, które robią jedną rzecz i robią ją bardzo dobrze. Jeśli masz ZFS - masz za darmo narzędzie do replikacji, za które w świecie komercyjnym płaciłbyś dziesiątki tysięcy złotych rocznie. Obsługuje zarówno filesystemy, jak i zvole, ma sensowny model retencji, szyfrowanie end-to-end i wbudowany monitoring.
Projekt jest aktywnie rozwijany i dostępny na GitHubie. Dokumentacja jest zaskakująco dobra jak na projekt open source - szybki start zajmuje rzeczywiście koło 10 minut.
Jeśli budujesz homelab, środowisko SMB lub po prostu chcesz uniezależnić backup od drogich licencji - warto poświęcić godzinę na postawienie pierwszego joba w zrepl. Naprawdę.

Komentarze
Prześlij komentarz