Mam jedną pulę ZFS zawierającą kilka zvoli i zestawów danych, z których niektóre są również zagnieżdżone. Wszystkie zestawy danych i wartości Zvols są okresowo migawkowane przez zfs-auto-snapshot. Wszystkie zestawy danych i wartości Zvols mają również ręcznie utworzone migawki.
Skonfigurowałem zdalną pulę, na której z powodu braku czasu wstępne kopiowanie przez lokalną szybką sieć za pośrednictwem Zfs send -R nie zostało zakończone (niektórych zestawów danych brakuje, niektóre zestawy danych są przestarzałe lub brakuje migawek).
Teraz pula jest fizycznie zdalna przez połączenie o niskiej prędkości i muszę okresowo synchronizować pulę zdalną z pulą lokalną, co oznacza, że dane obecne w puli lokalnej muszą zostać skopiowane do puli zdalnej, dane usunięte z puli lokalnej muszą zostać usunięte z puli zdalnej, a dane obecne w puli zdalnej, ale nie w puli lokalnej, należy usunąć z puli zdalnej, używając danych oznaczających „zvols”, „zestawy danych” lub „migawki”.
Gdybym robił to między dwoma zwykłymi systemami plików za pomocą rsync, byłoby to „-axPHAX --delete” (tak właśnie robię, aby wykonać kopię zapasową niektórych systemów).
Jak skonfigurować zadanie synchronizacji, aby zvols i zestawy danych puli zdalnej (w tym ich migawki) mogły być zsynchronizowane z lokalnymi zvols, zestawami danych i migawkami?
Chciałbym uniknąć przesyłania przez ssh, ze względu na niską przepustowość ssh; Wolałbym zamiast tego mbuffer lub iscsi.
źródło
zfs send -R ...
? Jeśli przesyłałeś dane wyjściowe przez potokssh
, czy wyłączałeś znaki specjalne za pomocązfs send -R ... | ssh -e none ...
?zfs send -R -i pool@snap1 pool@snap2 | gzip --fast > /output/file.gz
Odpowiedzi:
Oświadczenie: Ponieważ nigdy nie korzystałem z Zvols, nie mogę powiedzieć, czy różnią się one w replikacji od zwykłych systemów plików lub migawek. Zakładam, że tak, ale nie wierz mi na słowo.
Twoje pytanie to tak naprawdę wiele pytań, staram się na nie odpowiadać osobno:
Jak replikować / utworzyć kopię lustrzaną kompletnej puli w lokalizacji zdalnej
Musisz podzielić zadanie na dwie części: po pierwsze, początkowa replikacja musi być kompletna, następnie możliwa jest replikacja przyrostowa, o ile nie zadzierasz z migawkami replikacji . Aby włączyć przyrostową replikację, musisz zachować ostatnie migawki replikacji, wszystko przed tym można usunąć. Jeśli usuniesz poprzednią migawkę,
zfs recv
narzeka i przerywa replikację. W takim przypadku musisz zacząć wszystko od nowa, więc staraj się tego nie robić.Jeśli potrzebujesz tylko odpowiednich opcji, są to:
zfs send
:-R
: wyślij wszystko w ramach danej puli lub zestawu danych (replikacja rekurencyjna, potrzebna cały czas, obejmuje-p
). Ponadto podczas odbierania wszystkie usunięte migawki źródłowe są usuwane w miejscu docelowym.-I
: uwzględnij wszystkie migawki pośrednie między ostatnią migawką replikacji a bieżącą migawką replikacji (potrzebne tylko przy wysyłkach przyrostowych)zfs recv
:-F
: rozwiń pulę docelową, w tym usunięcie istniejących zestawów danych, które są usuwane w źródle-d
: odrzuć nazwę puli źródłowej i zastąp ją nazwą docelowej puli (pozostałe ścieżki systemu plików zostaną zachowane, aw razie potrzeby również utworzone)-u
: nie montuj systemu plików na miejscu docelowymJeśli wolisz pełny przykład, oto mały skrypt:
Użyj czegoś szybciej niż SSH
Jeśli masz wystarczająco zabezpieczone połączenie, na przykład tunel IPSec lub OpenVPN i oddzielną sieć VLAN, która istnieje tylko między nadawcą a odbiorcą, możesz przełączyć się z SSH na nieszyfrowane alternatywy, takie jak mbuffer, jak opisano tutaj , lub możesz użyć SSH ze słabym / brakiem szyfrowania i wyłączono kompresję, która jest szczegółowo opisana tutaj . Była też strona internetowa na temat ponownego przeliczania SSH, aby była znacznie szybsza, ale niestety nie pamiętam adresu URL - zmodyfikuję go później, jeśli go znajdę.
W przypadku bardzo dużych zestawów danych i powolnych połączeń może być również przydatna pierwsza transmisja za pośrednictwem dysku twardego (użyj szyfrowanego dysku do przechowywania zpool i przesłania go w zapieczętowanej paczce za pośrednictwem kuriera, poczty lub osobiście). Ponieważ metoda przesyłania nie ma znaczenia dla wysyłania / odbierania, możesz przesłać wszystko do dysku, wyeksportować pulę, wysłać dysk do miejsca docelowego, zaimportować pulę, a następnie przesłać wszystkie przyrostowe wysyłki za pośrednictwem protokołu SSH.
Problem z pomieszanymi migawkami
Jak wspomniano wcześniej, jeśli usuniesz / zmodyfikujesz migawki replikacji, otrzymasz komunikat o błędzie
co oznacza, że twoje polecenie było złe lub jesteś w niespójnym stanie, w którym musisz usunąć migawki i zacząć wszystko od nowa.
Ma to kilka negatywnych implikacji:
Istnieje możliwe rozwiązanie tych problemów, ale sam tego nie próbowałem. Możesz użyć
zfs bookmark
nowej funkcji w OpenSolaris / illumos stworzonej specjalnie do tego zadania. To uwolniłoby cię od zarządzania migawkami. Jedynym minusem jest to, że obecnie działa tylko dla pojedynczych zestawów danych, a nie rekurencyjnie. Będziesz musiał zapisać listę wszystkich starych i nowych zbiorów danych, a następnie przeglądać je, dodawać do zakładek, wysyłać i odbierać, a następnie aktualizować listę (lub małą bazę danych, jeśli wolisz).Jeśli spróbujesz trasy z zakładkami, chciałbym usłyszeć, jak Ci się udało!
źródło
zpool
.-d 1
do obuzfs list
poleceń, aby ograniczyć głębokość wyszukiwania (nie trzeba wyszukiwać poniżej nazwy puli). Pozwala to uniknąć długich opóźnień w pulach z dużą ilością migawek (np. Moja pula „kopii zapasowej” ma 320000 migawek izfs list -r -t snapshot backup
zajmuje 13 minut. Uruchomienie zajmuje tylko 0,06 sekundy-d 1
).zfs destroy
Polecenia w pętli for następnie potrzebuje-r
opcję rekursywnie usunąć wszystkie migawki z tego samego snapname.Osobiście stworzyłbym sobie listę zvoli, zestawów danych itp. Na zdalnym serwerze, które nie mają aktualnych migawek, a następnie zaktualizowałem te migawki
zfs send
, nawet jeśli jest to czasochłonne i zużywa dużo przepustowości.Wtedy mógłbym po prostu kontynuować używanie
zfs send
od tego momentu i nie musiałbym ponownie wymyślać koła, pisząc własny kod synchronizacji.rsync
jest miły dla starszych systemów plików, alezfs send
jest znacznie lepszy dla ZFS - wie dokładnie, które bloki zmieniły się w migawce i wysyła tylko je, podczas gdy rsync musi porównywać poszczególne pliki i / lub znaczniki czasu między serwerami lokalnymi i zdalnymi. to samo dotyczybtrfs send
puli btrfs.Jeśli masz tylko niewielką liczbę migawek, które wymagają aktualizacji, można to zrobić ręcznie. W przeciwnym razie, aby zrobić to automatycznie, potrzebujesz listy najnowszych lokalnych migawek vs zdalnych migawek oraz skrypt do porównywania wersji, a następnie
zfs send
lokalnych migawek, które są nieaktualne na serwerze rmeote.Wystarczy, jeśli zależy ci tylko na najnowszej migawce dla każdego zestawu danych. Jeśli zależy Ci na wszystkich poprzednich migawkach, oczywiście skrypt również będzie musiał je obsłużyć ... i to staje się o wiele bardziej skomplikowane. W niektórych przypadkach konieczne może być wycofanie na zdalnym serwerze, aby można było ponownie wysłać pośrednie / brakujące migawki.
Jeśli chcesz mieć bezpieczne połączenie ze zdalnym serwerem, naprawdę nie masz innego wyboru, jak tylko użyć
ssh
- a może skonfigurować tunel zopenvpn
czymś i użyćnetcat
.źródło
export ZREP_R=-R
w ogóle nie działała. :(Rzuć okiem na `zrepl 'na FreeBSD, który może ułatwić Ci życie, a każdy jest o wiele łatwiejszy. Został zaprezentowany kilka dni temu podczas BSDCan2018 w Ottawie. Wygląda obiecująco i może być rozwiązaniem twoich problemów
źródło
zrep to fajne rozwiązanie typu „wszystko w jednym” ORAZ posiada dokumentację + informacje o tym, jak uzyskać szybsze transfery niż zwykłe transfery SSH
https://github.com/bolthole/zrep
jest także crosssplatform: obsługiwany w systemach Linux, Freebsd i Solaris / Illumos
źródło