ZFS yansıtılmış havuz için etkili bir tesis dışı yedekleme stratejisi nedir?


9

İki yansıtılmış diskten oluşan bir ZFS havuzu kullanıyorum. Site dışı yedeklemelerin devam edebilmesi için iki disk daha satın aldım.

İlk planım aynaya üçüncü bir disk takarak, ZFS'nin yeniden beklemesini bekleyip diski söküp dışarıda taşıyarak tesis dışı yedekleme oluşturmaktı. Bu yeterince iyi çalışıyor, ancak her disk takıldığında tam bir resilver gerçekleştirdiğine şaşırdım (her ekin artımlı veya delta resilver ile sonuçlanacağını okudum ve muhtemelen yanlış anladım). Bu, yedeklemelerin kabul edilenden daha uzun sürmesine neden olur.

Gereksinimlerim, zpool'umun ve günlük olarak döndürebildiğim tüm anlık görüntülerinin site dışında bir kopyasına sahip olmak. Bu, yeniden yenileme işleminin en fazla 24 saat sürmesi gerektiği anlamına gelir - şu anda buna yakın, ancak havuzumuzu büyütme planlarımız onu bu zaman diliminin ötesine itecektir.

Tam bir yeniden yenileme işlemi gerektirmeyen site dışı yedeklemeleri nasıl saklayabilirim? Yedek sürücülerimde farklı bir dosya sistemi kullanmalı mıyım (örneğin, ZFS havuzunun bir parçası olmak yerine bir görüntüyü dışa aktarma)? Yedekleri ayrı bir havuzda almalı ve oluşturuldukça yeni anlık görüntüler göndermem gerekir mi?


Mevcut stratejim, anlık görüntülerin senkronize olmasını sağlamak için zfs gönderme ve alma özelliğiyle çoklu havuz yöntemidir. Buna veya daha iyi bir seçeneğe karşı bir argüman bulursanız duymak isterim.
so12311

Yanıtlar:


3

Çok fazla müdahaleden ve denemeden sonra, oldukça büyük bir takas olmasına rağmen bir çözüm buldum.

Öncelikle, dışlamak zorunda olduğum seçenekler:

  • Yansıtılmış bir havuz ile ikinci bir tesis dışında ZFS sunucusu olması maliyet nedeniyle bir seçenek değildi. Bir seçenek olsaydı, uzaktaki havuza anlık görüntü göndermek için ZFS gönderme / alma yöntemini kullanarak bu en iyi yaklaşım olurdu.

  • Diskleri eve götürmek için kaldırabileceğim ikinci bir yerinde ZFS yansıtılmış havuz olması. Bu ilk seçenek daha uygulanabilir, ancak her zaman yerinde iki disk (veya tek bir yerinde diskte iki veri kopyaları kullanmak için) için ikinci havuzu gerekir. Şu anda dört diskim var ve sunucuda beşinci disk için yer kalmadı. Bu adil bir yaklaşım olabilir ama yine de ideal değildir.

  • ZFS'yi kullanarak yedekleme diskini yansıtılmış havuzun içine ve dışına döndürmek için takın ve çıkarın. Bu iyi çalışır, ancak disk her eklendiğinde tam bir resilver gerçekleştirmelidir. Bu kabul edilemeyecek kadar uzun sürüyor ve bu yüzden buna güvenemedim.

Benim çözümüm kullanmaya benzer attachve detachancak kullanır onlineve offline. Bu, tam bir yeniden çözümlemeye karşı bir delta yeniden çözümleme gerçekleştirme avantajına sahiptir, ancak havuzun her zaman bir DEGRADEDdurumu bildirdiği dezavantaj (havuzun her zaman iki diski vardır; Dönen site dışı diskler, offlineuzak depolama ve yeniden çözümlemede olduklarında işaretlenir ve daha sonra çevrimiçi olur yerinde olduklarında).

Yani, hızlı bir özet ve kurulumuma genel bakış:

Bir ZFS sunucum ve dört aynı diskim var. ZFS, yansıtılmış bir havuz kullanacak şekilde ayarlanmıştır. Dört diskten ikisi bu havuzun kalıcı üyeleridir. Diğer iki disk dönüyor; biri her zaman tesis dışı depolama alanındadır, diğeri ise kullanıma hazır bir yedekleme işlevi görmek için havuzun bir parçasıdır.

Yedekleri döndürmenin zamanı geldiğinde:

  • zfs scrubYedek diskin hatasız olduğundan emin olmak için tamamlanmasını bekliyorum

  • Ben zfs offlineuzak alınacak disk. Çevrimdışı olduktan sonra onu geri çeviririm hdparm -Y /dev/id. Bir dakika sonra disk kızağını kısmen çıkarıyorum (güç kaybını sağlamak için yeterli) ve daha sonra sürücüyü tamamen çekmeden önce, dönmeyi durdurduğundan emin olmak için bir dakika daha veriyorum. Disk statik bir torbaya ve ardından koruyucu bir kasaya girer ve saha dışına çıkar.

  • Diğer tesis dışı diski getirdim. Hotwwap tepsisine takılır ve döner. Kullandığım zfs onlinehavuzuna diski geri döndürebilir ve eşzamanlı hale getirmek için kısmi resilvering başlaması.

Bu sistem, herhangi bir zamanda iki adet ONLINEayna diski ve bir adet OFFLINEuzak disk (temizlenmiş) olduğunu garanti eder . Dördüncü disk ya yeniden dağıtılıyor ya da çevrimiçi, bu da çalışan bir sürücünün arızalanması durumunda muhtemelen havuzun iki çevrimiçi diskten tutarlı olması avantajına sahip.

Son birkaç hafta boyunca iyi çalıştı, ama yine de bunu hackish bir yaklaşım olarak görüyorum. Herhangi bir önemli sorunla karşılaşırsam takip edeceğim.


Güncelleme: Birkaç ay boyunca bununla çalıştıktan sonra, gerçek dünya kullanımımda yeniden doldurmanın hem ayırma / ekleme hem de çevrimdışı / çevrimiçi için aynı zaman aldığını gördüm. Testlerimde bir fırça kullandığımı sanmıyorum - önsezim, bir sürücü bir fırça için çevrimdışı ise tam bir resilver gerektirir.


Bu kesinlikle dört yerine üç cihazla çalışmayacak mı? Oracle Solaris ZFS Yönetim Kılavuzu ayna havuzu "Eğer hatalı olduğunu bildiren tüm bileşenlerin bir aynanın kaldırılır" [vurgu benim], dördüncü sürücü kesinlikle gerekli olmadığını ima etmek gibi görünüyor hangi.
Kenny Evitt

1
Üç cihazla, her zaman havuzda olan ve zaman zaman saha dışında olan iki disk veya her zaman havuzda bulunan ve diski saha dışında dönen iki disk mi kastediyorsunuz? İkinci seçenekte, havuz tamamen tek bir çevrimiçi disk varken (2. disk ya döndürülüyorsa ya da henüz tam olarak yeniden dönüştürülmezken) kötü verilerle karşılaşırsa veri kaybını beklerim. İki sentim, yansıtılmış havuzunuzun her zaman iki tam zamanlı çevrimiçi diske sahip olmasını sağlamaktır.
STW

Bahsettiğiniz ikinci seçenek demek istedim. Bu seçenekle, yalnızca bir disk çevrimiçi durumdayken hatalı verilerin olasılığı nedir? Kısmi / artımlı yeniden yaşlandırma nispeten hızlı olmalı, değil mi? Ve kötü veriler olsa bile, ikinci sürücüden kurtulamamanız gerekir mi? Veya üçüncü sürücüden kurtarma, en kötü durum? [Açıkçası iyileşmenin mümkün olmadığı senaryolar var; ancak bu dört sürücüde bile geçerlidir; veya aslında herhangi bir sayı.]
Kenny Evitt

Yedekleri döndürmek için kullanılan üçüncü ve dördüncüsü ile her zaman iki çevrimiçi yansıtılmış diske sahip olmayı sürdürürüm. Bir aynada yalnızca bir çevrimiçi diskiniz olduğunda, savunmasız olduğunuz bir zamandır - ve benim yaklaşımımla bile, site dışı yedekleme diskinin bütünlük sorunları geliştirme ve% 100 kurtarılamayacağı riski vardır (ideal olarak herhangi bir zamanda iki yansıtılmış disk olması, böylece ikisinin bütünlüğü karşılaştırılabilir).
STW

Özetlemek gerekirse, ZFS, verilerin tek bir kopyasından kaçınmakla ilgilidir (veya en azından pariteye sahip, kötü verilerin yeniden oluşturulmasına izin vermek). Yalnızca bir çevrimiçi diskiniz veya yedek verilerin bir kopyasına sahip olduğunuzda veri kaybı riski vardır.
STW

2

Neden zfs anlık görüntülerinizi uzak bir ZFS makinesine göndermiyor? Bunun için basit bir bash betiği kullanıyorum:

#!/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

0

Yabancı (zfs olmayan) bir dosya sistemine zfs veri kümelerinizin artımlı dökümlerini oluşturmanıza izin veren snapdump adlı bir araç oluşturdum . Snapdump ayrıca, tek bir komutla artımlı bir anlık görüntü zincirini geri yüklemeyi de destekler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.