Jaka jest skuteczna strategia tworzenia kopii zapasowych poza siedzibą dla lustrzanej puli ZFS?

9

Używam puli ZFS składającej się z dwóch lustrzanych dysków. Aby móc tworzyć kopie zapasowe poza siedzibą, kupiłem jeszcze dwa dyski.

Mój pierwotny plan polegał na utworzeniu kopii zapasowej poza siedzibą, dołączając trzeci dysk do kopii lustrzanej, czekając na resilver ZFS, a następnie odłącz dysk i przenieś go poza miejsce instalacji. Działa to wystarczająco dobrze, ale byłem zaskoczony, że wydaje się, że wykonuje pełny resilver za każdym razem, gdy dysk jest podłączony (czytałem i być może źle zrozumiałem, że każde dołączenie spowoduje przyrostowy lub delta resilver). Powoduje to, że tworzenie kopii zapasowych trwa dłużej niż jest to dopuszczalne.

Moje wymagania to mieć kopię mojego zpoola i wszystkie jego migawki, które mogę obracać codziennie. Oznacza to, że resilvering musi zająć maksymalnie 24 godziny - obecnie jest to bliskie, ale nasze plany powiększenia puli przekroczą ten przedział czasowy.

Jak mogę przechowywać kopie zapasowe poza siedzibą, które nie wymagają pełnej operacji resilveringu? Czy powinienem używać innego systemu plików na moich dyskach kopii zapasowych (np. Eksportować obraz, zamiast być częścią puli ZFS)? Czy powinienem mieć kopie zapasowe w osobnej puli i wysyłać do niej nowe migawki podczas ich tworzenia?

STW
źródło
Moją obecną strategią jest metoda wielu puli, w której Zfs wysyła i odbiera, aby synchronizować migawki. Chciałbym usłyszeć, jeśli znajdziesz argument przeciwko tej lub lepszej opcji.
so12311,

Odpowiedzi:

3

Po wielu majstrowaniach i eksperymentach znalazłem rozwiązanie, choć z dość dużym kompromisem.

Po pierwsze, opcje, które musiałem wykluczyć:

  • Posiadanie drugiego zewnętrznego serwera ZFS z pulą lustrzaną nie było opcją ze względu na koszty. Gdyby była to opcja, byłoby to zdecydowanie najlepsze podejście, wykorzystujące wysyłanie / odbieranie ZFS do wysyłania migawek do zdalnej puli.

  • Mając drugą, lustrzaną pulę ZFS, z której mógłbym usunąć dyski, aby zabrać je do domu. Jest to bardziej wykonalne niż pierwsza opcja, ale potrzebowałbym drugiej puli, aby zawsze mieć dwa dyski u klienta (lub użyć dwóch kopii danych na jednym dysku u klienta). Obecnie mam cztery dyski i nie ma już miejsca na jedną piątą na serwerze. To byłoby uczciwe podejście, ale wciąż nie idealne.

  • Za pomocą ZFS podłącz i odłącz, aby obrócić dysk kopii zapasowej do i z lustrzanej puli. Działa to dobrze, ale musi wykonywać pełny resilver za każdym razem, gdy dysk jest dodawany. To trwa niedopuszczalnie długo, więc nie mogłem na tym polegać.

Moje rozwiązanie jest podobne do używania attachi detach, jakkolwiek używa onlinei offline. Ma to tę zaletę, że wykonuje resilvering delta w porównaniu do pełnego resilveringu, ale wadą jest to, że pula zawsze zgłasza DEGRADEDstan (pula zawsze ma dwa dyski; obracające się dyski zewnętrzne są zaznaczone, offlinegdy znajdują się w zdalnym magazynie i resilver, a następnie wchodzą w tryb online kiedy są na miejscu).

Krótkie podsumowanie i przegląd mojej konfiguracji:

Mam jeden serwer ZFS i cztery identyczne dyski. ZFS jest skonfigurowany do korzystania z puli lustrzanej. Dwa z czterech dysków są stałymi członkami tej puli. Pozostałe dwa dyski się obracają; jeden jest zawsze w magazynie zewnętrznym, drugi jest częścią puli, która ma służyć jako gotowa kopia zapasowa.

Kiedy przychodzi czas na obracanie kopii zapasowych:

  • Czekam na zfs scrubzakończenie, aby upewnić się, że dysk kopii zapasowej jest wolny od błędów

  • I zfs offlinedysk, który zostanie pobrany zdalnie. Po jego wyłączeniu musiałbym go rozwinąć hdparm -Y /dev/id. Po minucie częściowo wyjmuję sanie dyskowe (na tyle, aby zapewnić utratę mocy), a następnie daję mu kolejną minutę przed całkowitym wyciągnięciem napędu, aby upewnić się, że przestał się obracać. Dysk trafia do torby statycznej, a następnie do etui ochronnego i wychodzi poza miejsce.

  • Przynoszę drugi dysk zewnętrzny. Zostaje zainstalowany w zasobniku Hotswap i obraca się. Używam zfs onlinedo przywracania dysku do puli i rozpoczynam częściowe resilverowanie, aby było współbieżne.

Ten system gwarantuje, że w danym momencie mam dwa ONLINEdyski lustrzane i jeden OFFLINEdysk zdalny (który został wyczyszczony). Czwarty dysk jest albo przeskalowany, albo w trybie online, co ma tę zaletę, że w przypadku awarii działającego dysku prawdopodobnie pula będzie nadal składać się z dwóch dysków online.

Działa dobrze przez ostatnie kilka tygodni, ale nadal uważam to za hackish podejście. Sprawdzę, czy napotkam jakieś poważne problemy.


Aktualizacja: Po kilku miesiącach pracy z tym stwierdziłem, że w moim rzeczywistym użyciu resilvering zajmuje tyle samo czasu na odłączenie / dołączenie i offline / online. W moich testach nie sądzę, żebym uruchomił szorowanie - mam przeczucie, że jeśli dysk jest niedostępny dla szorowania, to wymaga pełnej resilver.

STW
źródło
Czy to na pewno nie zadziała z trzema urządzeniami zamiast czterema? Oracle Solaris ZFS Administration Guide stwierdza, że basen jest lustro nic zarzucić „Jeśli wszystkie elementy lustrem są usuwane” [podkr], co zdaje się sugerować, że czwarty dysk nie jest to bezwzględnie konieczne.
Kenny Evitt,
1
Przez trzy urządzenia masz na myśli dwa dyski, które są zawsze w puli i jeden, który czasami jest poza siedzibą, czy jeden dysk, który jest zawsze w puli, i dwa dyski, które obracają się poza siedzibą? W przypadku drugiej opcji spodziewałbym się utraty danych, jeśli pula napotka złe dane, podczas gdy jest tylko jeden dysk w pełni online (gdy drugi dysk jest albo obracany, albo nie jest jeszcze w pełni przeskalowany). Moje dwa centy to zawsze upewnić się, że twoja lustrzana pula ma dwa dyski online w pełnym wymiarze godzin.
STW
Miałem na myśli drugą opcję, o której wspomniałeś. W przypadku tej opcji, jak prawdopodobne są złe dane, gdy tylko jeden dysk jest w trybie online? Częściowe / przyrostowe resilverowanie powinno być względnie szybkie, prawda? I nawet jeśli były złe dane, czy nie powinieneś być w stanie odzyskać danych z drugiego dysku? Lub odzyskać z trzeciego dysku, najgorszy przypadek? [Oczywiście są scenariusze, w których odzyskanie nie jest możliwe; ale to prawda nawet w przypadku czterech dysków; lub jakikolwiek inny numer.]
Kenny Evitt
Trzymałbym się zawsze posiadania dwóch lustrzanych dysków online, z trzecim i czwartym używanym do obracania kopii zapasowych. Za każdym razem, gdy masz tylko jeden dysk online w lustrze, jesteś podatny na zagrożenia - i nawet przy moim podejściu istnieje ryzyko, że dysk kopii zapasowej poza siedzibą może rozwinąć problemy z integralnością i nie będzie w 100% możliwy do odzyskania (idealnie byłoby być w dowolnym momencie dwoma dyskami lustrzanymi poza siedzibą, aby można było porównać ich integralność).
STW
Podsumowując, ZFS polega na unikaniu pojedynczej kopii danych (lub przynajmniej na parzystości, umożliwiającej rekonstrukcję złych danych). Jeśli masz tylko jeden dysk online lub jedną kopię danych kopii zapasowej, istnieje ryzyko utraty danych.
STW
2

Dlaczego ZFS nie wyśle ​​migawek na zdalną maszynę ZFS? Używam do tego prostego skryptu bash:

#!/usr/local/bin/bash
# ZFS Snapshot BASH script by Shawn Westerhoff
# Updated 1/14/2014

### DATE VARIABLES
# D = Today's date
# D1 = Yesterday's date
# D# = Today less # days date
Y=$(date -v-1d '+%m-%d-%Y')
D=$(date +%m-%d-%Y)
D1=$(date -v-1d '+%m-%d-%Y')
D10=$(date -v-10d '+%m-%d-%Y')
D20=$(date -v-20d '+%m-%d-%Y')

# Step 1: Make the snapshots

for i in $( zfs list -H -o name ); do
    if [ $i == tier1 ]
    then echo "$i found, skipping"
    else
    zfs snapshot $i@$D
    fi
done

# Step 2: Send the snapshots to backup ZFS sever

    for i in $( zfs list -H -o name ); do
        zfs send -i $i@$D1 $i@$D | ssh -c arcfour root@10.10.10.10 zfs recv $i
    done

# Step 3: Destroy snapshots that are 20 days old

for i in $( zfs list -H -o name ); do
        if [ $i == tier1 ]
        then echo "$i found, skipping"
        else
        zfs destroy $i@$D20
        fi
done
Shawn Westerhoff
źródło
0

Stworzyłem narzędzie o nazwie snapdump, które pozwala ci tworzyć przyrostowe zrzuty zestawów danych ZFS do obcego (non ZFS) systemu plików. Snapdump obsługuje również przywracanie przyrostowego łańcucha migawek za pomocą jednego polecenia.

Omry Yadan
źródło