zrepl - darmowa replikacja ZFS, która zawstydza komercję

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