Jak wykonywać przyrostowe / ciągłe kopie zapasowe puli ZFS?

25

W jaki sposób można stale / przyrostowo tworzyć kopie zapasowe ZFS poza miejscem?

Rozumiem, że send/receiveover ssh jest jedną z metod, która wymaga ręcznego zarządzania migawkami.

Znalazłem kilka narzędzi, jednak większość z nich nie jest już obsługiwana.

Jedynym narzędziem, które wygląda obiecująco, jest https://github.com/jimsalterjrs/sanoid, jednak martwię się, że mało znane narzędzie może wyrządzić więcej szkody niż pożytku, ponieważ może uszkodzić / usunąć dane.

Jak wykonywane są ciągłe / przyrostowe kopie zapasowe ZFS?

Greg
źródło
2
Odpowiem trochę później, ale mam rozwiązanie, które wykonuje ten typ replikacji co 15 sekund z podstawowego serwera ZFS na serwer pomocniczy.
ewwhite

Odpowiedzi:

33

ZFS to niesamowity system plików i rozwiązuje wiele moich lokalnych i współdzielonych potrzeb w zakresie przechowywania danych.

Chociaż podoba mi się pomysł klastrowego ZFS, tam gdzie to możliwe, czasem jest to niepraktyczne lub potrzebuję pewnego geograficznego oddzielenia węzłów magazynowania.

Jednym z moich przypadków użycia jest replikacja pamięci o wysokiej wydajności na serwerach aplikacji Linux. Na przykład popieram starsze oprogramowanie, które korzysta z dysków SSD NVMe o niskim opóźnieniu dla swoich danych. Aplikacja ma opcję kopii lustrzanej na poziomie aplikacji, która może replikować się na serwer pomocniczy, ale często jest niedokładna i trwa 10 minut RPO .

Rozwiązałem ten problem, mając serwer pomocniczy (również działający na ZFS na podobnym lub odmiennym sprzęcie), który może być lokalny, zdalny lub oba. Łącząc trzy narzędzia wymienione poniżej, stworzyłem rozwiązanie do replikacji, które zapewnia mi ciągłą replikację, głębokie przechowywanie migawek i elastyczne opcje przełączania awaryjnego.

Zfs-auto-snapshot - https://github.com/zfsonlinux/zfs-auto-snapshot

Po prostu przydatne narzędzie do włączania okresowych migawek systemu plików ZFS. Zazwyczaj działam według następującego harmonogramu dotyczącego wielkości produkcji:

# /etc/cron.d/zfs-auto-snapshot

PATH="/usr/bin:/bin:/usr/sbin:/sbin"

*/5 * * * * root /sbin/zfs-auto-snapshot -q -g --label=frequent --keep=24 //
00 * * * * root /sbin/zfs-auto-snapshot -q -g --label=hourly --keep=24 //
59 23 * * * root /sbin/zfs-auto-snapshot -q -g --label=daily --keep=14 //
59 23 * * 0 root /sbin/zfs-auto-snapshot -q -g --label=weekly --keep=4 //
00 00 1 * * root /sbin/zfs-auto-snapshot -q -g --label=monthly --keep=4 //

Syncoid (Sanoid) - https://github.com/jimsalterjrs/sanoid

Ten program może uruchamiać ad-hoc snap / replikację systemu plików ZFS do dodatkowego celu. Używam tylko syncoidowej części produktu.

Zakładając server1 i server2 , proste polecenia Uruchom z server2 aby wyciągnąć dane z serwer1 :

#!/bin/bash

/usr/local/bin/syncoid root@server1:vol1/data vol2/data

exit $?

Monit - https://mmonit.com/monit/

Monit to niezwykle elastyczny harmonogram zadań i menedżer realizacji. Domyślnie działa w odstępie 30 sekund, ale modyfikuję konfigurację, aby użyć 15-sekundowego podstawowego cyklu czasowego.

Przykładowa konfiguracja, która uruchamia powyższy skrypt replikacji co 15 sekund (1 cykl)

check program storagesync with path /usr/local/bin/run_storagesync.sh
        every 1 cycles
        if status != 0 then alert

Jest to łatwe do zautomatyzowania i dodania za pomocą zarządzania konfiguracją. Pakując wykonanie migawki / replikacji w Monit, otrzymujesz scentralizowany status, kontrolę zadań i alarmowanie (e-mail, SNMP, skrypt niestandardowy).


W rezultacie mam serwery, które mają wiele miesięcy miesięcznych migawek oraz wiele punktów wycofywania i przechowywania w ciągu: https://pastebin.com/zuNzgi0G - Plus, ciągła, 15-sekundowa replika atomowa:

# monit status

Program 'storagesync'
  status                            Status ok
  monitoring status                 Monitored
  last started                      Wed, 05 Apr 2017 05:37:59
  last exit value                   0
  data collected                    Wed, 05 Apr 2017 05:37:59
.
.
.
Program 'storagesync'
  status                            Status ok
  monitoring status                 Monitored
  last started                      Wed, 05 Apr 2017 05:38:59
  last exit value                   0
  data collected                    Wed, 05 Apr 2017 05:38:59
ewwhite
źródło
4
Dziękuję za wysłanie, twoja odpowiedź jest fenomenalna i dokładnie tego szukałem (od opóźnienia do monitorowania procesu). Również czytam github.com/ewwhite/zfs-ha/wiki i jestem pod wielkim wrażeniem. Jeszcze raz dziękuję :)
Greg
6

Możesz to zrobić na dwa różne sposoby:

  1. Tradycyjny, niezależny od systemu plików sposób, który był / był używany przez ostatnie dziesięciolecia, za pomocą narzędzi takich jak rsynclub Bacula. Tam przetestowałeś i (miejmy nadzieję) stabilne, duże oprogramowanie, które można dostosować do dużych wdrożeń i używać go nawet po przejściu na ZFS
  2. Jedno z narzędzi wykorzystujących ZFS send/recv. Może to być twoje własne rozwiązanie, skrypt lub rozszerzony skrypt z różnych na Github i in., Lub bardziej bogate w funkcje narzędzia, takie jak Sanoid lub ZnapZend (send / recv z obsługą mbuffer i planami przechowywania). W takim przypadku najprawdopodobniej nie znajdziesz żadnych dużych, „przedsiębiorczych” (w sensie negatywnym) rozwiązań, ale narzędzia, które wykonują tylko jedno zadanie i mogą być łączone z innymi narzędziami w celu dostosowania do konkretnej konfiguracji.

Ogólnie ufałbym tylko narzędziu, którego kod źródłowy jest dostępny, i utrzymywałbym to tak proste, jak to możliwe. Jeśli używasz send/recv, nie musisz dużo zarządzać, wystarczy usunąć migawkę n-1 po stronie lokalnej, gdy transmisja i ustanowienie migawki n po stronie zdalnej zakończyły się powodzeniem.

Możesz podzielić swój transport w dowolny sposób, może to być nawet asynchronizacja (migawki nie muszą być odbierane natychmiast), jeśli zachowasz żelazną zasadę, że możesz wysłać różnicę między lokalną bieżącą / nową a lokalną poprzednią migawką , a lokalna poprzednia migawka jest najnowsza po stronie zdalnej (do momentu zakończenia tworzenia kopii zapasowej i zresetowania).

Teraz, gdy o tym myślę, prawdopodobnie mógłbyś zakodować to w maszynie stanów i mieć pewność, że nie dojdą żadne nieprzewidziane przypadki.

użytkownik121391
źródło
Nie rozumiem, w jaki sposób rsyncrozwiązanie oparte na skali mogłoby skalować się do ciągłej replikacji dużego systemu plików na skalę korporacyjną. Zmiany mogą nastąpić szybciej, niż rsyncmogłyby je odkryć.
Andrew Henle,
2
@AndrewHenle Nie popierałbym również tego, chciałem go tylko przedstawić, ponieważ pytanie nie określało zakresu / rozmiaru danych ani ram czasowych. Dlatego w przypadku rzadkich działań może istnieć możliwość, że będzie to zależne od systemu plików. Oczywiście straciłbyś ładne delty na poziomie bloku ...
użytkownik121391
@ user121391 Całkowicie zgadzam się z tobą, jeśli chodzi o open source. Dziękujemy za szczegółową odpowiedź.
Greg
@Dave tak jak piszę ...
ewwhite
1
Gorąco polecamy znapzend
Trent Lloyd