Apa strategi cadangan luar kantor yang efektif untuk kumpulan cermin ZFS?

9

Saya menggunakan kumpulan ZFS yang terdiri dari dua disk yang dicerminkan. Untuk menjalankan pencadangan di luar kantor, saya telah membeli dua disk lagi.

Rencana awal saya adalah membuat backup di luar kantor dengan melampirkan disk ketiga ke mirror, menunggu ZFS untuk resilver, kemudian lepaskan drive dan bawa ke luar kantor. Ini berfungsi cukup baik, tetapi saya terkejut bahwa tampaknya melakukan resilver penuh setiap kali disk terpasang (saya pernah membaca, dan mungkin disalahpahami, bahwa setiap lampiran akan menghasilkan resilver tambahan atau delta). Ini menghasilkan cadangan yang membutuhkan waktu lebih lama daripada yang dapat diterima.

Persyaratan saya adalah memiliki salinan zpool di luar kantor dan semua snapshotnya yang dapat saya putar setiap hari. Ini berarti resilver perlu paling lama 24 jam - saat ini sudah dekat dengan itu, tetapi rencana kami untuk menumbuhkan kumpulan kami akan mendorongnya melampaui jangka waktu itu.

Bagaimana saya bisa menyimpan cadangan di luar kantor yang tidak memerlukan operasi resilver penuh? Haruskah saya menggunakan sistem file yang berbeda pada drive cadangan saya (mis. Mengekspor gambar daripada menjadikannya bagian dari kumpulan ZFS)? Haruskah saya memiliki cadangan di kumpulan terpisah dan mengirim foto baru ke sana saat dibuat?

STW
sumber
Strategi saya saat ini adalah metode multi-kumpulan, dengan zfs mengirim dan menerima agar snapshot tetap disinkronkan. Senang mendengar jika Anda menemukan argumen yang menentang ini atau opsi yang lebih baik.
so12311

Jawaban:

3

Setelah banyak mengutak-atik dan bereksperimen, saya menemukan solusi, meskipun dengan tradeoff yang cukup besar.

Pertama, opsi yang harus saya hilangkan:

  • Memiliki server ZFS luar kantor kedua dengan kolam cermin bukan pilihan karena biaya. Seandainya itu menjadi pilihan, ini sejauh ini akan menjadi pendekatan terbaik, memanfaatkan ZFS kirim / terima untuk mengirim foto ke pool jarak jauh.

  • Memiliki kolam mirror ZFS di tempat kedua, yang dapat saya ambil dari disk untuk dibawa pulang. Ini lebih layak daripada opsi pertama, tetapi saya akan membutuhkan kumpulan kedua untuk selalu memiliki dua disk di tempat (atau menggunakan dua salinan data pada satu disk di tempat). Saat ini saya memiliki empat disk, dan tidak ada lagi ruang untuk seperlima di server. Ini akan menjadi pendekatan yang adil tetapi masih belum ideal.

  • Menggunakan ZFS melampirkan dan melepaskan untuk memutar disk cadangan masuk dan keluar dari kolam mirrored. Ini bekerja dengan baik, tetapi harus melakukan resilver penuh setiap kali disk ditambahkan. Ini butuh waktu lama, jadi saya tidak bisa mengandalkan ini.

Solusi saya mirip dengan menggunakan attachdan detach, namun menggunakan onlinedan offline. Ini memiliki keuntungan melakukan resilver delta versus resilver penuh, tetapi kelemahan bahwa pool selalu melaporkan DEGRADEDkeadaan (pool selalu memiliki dua disk; disk luar kantor yang berputar ditandai offlineketika mereka berada di penyimpanan jauh dan resilver dan kemudian online) ketika mereka ada di tempat).

Jadi, rekap cepat dan ikhtisar pengaturan saya:

Saya memiliki satu server ZFS dan empat disk identik. ZFS diatur untuk menggunakan kolam cermin. Dua dari empat disk adalah anggota tetap dari kumpulan ini. Dua disk lainnya berputar; satu selalu dalam penyimpanan di luar kantor, yang lain adalah bagian dari kumpulan untuk bertindak sebagai cadangan siap-pakai.

Ketika tiba saatnya untuk memutar cadangan:

  • Saya menunggu untuk zfs scrubmenyelesaikan untuk memastikan disk cadangan cukup bebas dari kesalahan

  • Saya zfs offlinedisk yang akan diambil jarak jauh. Setelah offline saya hdparm -Y /dev/idakan memutarnya. Setelah satu menit, saya melepas sebagian kereta luncur disk (hanya cukup untuk memastikan daya yang hilang) dan kemudian memberikannya satu menit lagi sebelum sepenuhnya menarik drive untuk memastikan telah berhenti berputar. Disk dimasukkan ke dalam kantong statis dan kemudian pelindung dan pergi ke luar kantor.

  • Saya membawa disk offsite lainnya. Itu akan diinstal di baki hotswap dan berputar. Saya gunakan zfs onlineuntuk mengembalikan disk ke kolam dan memulai resilver parsial untuk membuatnya bersamaan.

Sistem ini menjamin bahwa pada waktu tertentu saya memiliki dua ONLINEdisk cermin dan satu OFFLINEdisk jarak jauh (yang telah digosok). Disk keempat adalah resilvered atau online, yang memiliki manfaat bahwa jika drive berjalan gagal itu mungkin kumpulan masih akan konsisten dari dua disk online.

Ini bekerja dengan baik selama beberapa minggu terakhir, tetapi saya masih menganggap ini sebagai pendekatan hackish. Saya akan menindaklanjuti jika saya mengalami masalah besar.


Pembaruan: Setelah menjalankan ini selama beberapa bulan, saya menemukan bahwa di dunia nyata saya menggunakan resilver menggunakan waktu yang sama untuk melepas / memasang dan offline / online. Dalam pengujian saya, saya tidak berpikir saya sedang menjalankan scrub - firasat saya adalah bahwa jika drive offline untuk scrub maka itu memerlukan resilver penuh.

STW
sumber
Apakah ini pasti tidak akan berfungsi hanya dengan tiga perangkat, bukan empat? The Oracle Solaris ZFS Panduan Administrasi menyatakan bahwa kolam cermin yang menyalahkan "Jika semua komponen dari cermin dihapus" [penekanan dari saya], yang tampaknya akan menyiratkan bahwa drive keempat tidak benar-benar diperlukan.
Kenny Evitt
1
Dengan tiga perangkat maksud Anda dua disk yang selalu di kolam renang dan satu yang kadang-kadang di luar lokasi, atau satu disk yang selalu di kolam renang dan dua yang diputar di luar lokasi? Dengan opsi kedua saya akan mengharapkan kehilangan data jika kumpulan menemukan data yang buruk sementara hanya ada satu disk sepenuhnya online (ketika disk 2 sedang diputar atau belum sepenuhnya disilver ulang). Dua sen saya adalah untuk selalu memastikan kolam mirror Anda memiliki dua disk online penuh waktu.
STW
Maksud saya opsi kedua yang Anda sebutkan. Dengan opsi itu, seberapa besar kemungkinan data buruk sementara hanya satu disk yang online? Resilver parsial / bertahap harus relatif cepat, bukan? Dan bahkan jika ada data yang buruk, tidakkah Anda bisa pulih dari drive kedua? Atau pulih dari drive ketiga, kasus terburuk? [Jelas ada skenario di mana pemulihan tidak mungkin; tapi itu benar bahkan dengan empat drive; atau nomor apa pun sebenarnya.]
Kenny Evitt
Saya akan selalu menggunakan dua disk mirror online, dengan yang ketiga dan keempat digunakan untuk memutar cadangan. Setiap kali Anda hanya memiliki satu disk online di mirror adalah waktu yang rentan - dan bahkan dengan pendekatan saya ada risiko bahwa disk cadangan luar kantor dapat mengembangkan masalah integritas dan tidak dapat dipulihkan 100% (idealnya akan ada menjadi dua disk mirror di luar lokasi kapan saja, sehingga integritas keduanya dapat dibandingkan).
STW
Singkatnya, ZFS adalah tentang menghindari satu salinan data (atau setidaknya memiliki paritas, memungkinkan rekonstruksi data buruk). Ketika Anda hanya memiliki satu disk online atau satu salinan data cadangan, itu berisiko kehilangan data.
STW
2

Mengapa zf tidak mengirim foto Anda ke mesin ZFS jarak jauh? Saya menggunakan skrip bash sederhana untuk ini:

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

Saya membuat alat yang disebut snapdump yang memungkinkan Anda membuat dump tambahan set data zfs Anda ke sistem file asing (bukan zfs). Snapdump juga mendukung memulihkan rantai snapshot tambahan dengan satu perintah.

Omry Yadan
sumber