W jaki sposób można stale / przyrostowo tworzyć kopie zapasowe ZFS poza miejscem?
Rozumiem, że send/receive
over 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?
Odpowiedzi:
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:
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 :
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)
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
źródło
Możesz to zrobić na dwa różne sposoby:
rsync
lubBacula
. 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 ZFSsend/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.
źródło
rsync
rozwią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żrsync
mogłyby je odkryć.