Bagaimana cara melakukan backup incremental / terus-menerus dari zfs pool?

25

Bagaimana kolam zfs dapat didukung secara terus-menerus / bertahap di luar lokasi?

Saya mengenali send/receiveover ssh adalah salah satu metode namun yang melibatkan harus mengelola foto secara manual.

Ada beberapa alat yang saya temukan namun sebagian besar tidak lagi didukung.

Satu-satunya alat yang terlihat menjanjikan adalah https://github.com/jimsalterjrs/sanoid namun saya khawatir bahwa alat yang tidak dikenal luas dapat lebih berbahaya daripada bagusnya karena dapat merusak / menghapus data.

Bagaimana pencadangan zfs terus menerus / bertahap dilakukan?

Greg
sumber
2
Saya akan merespons sedikit kemudian, tetapi saya punya solusi yang melakukan replikasi jenis ini setiap 15 detik dari server ZFS primer ke sekunder.
ewwhite

Jawaban:

33

ZFS adalah sistem file yang luar biasa dan memecahkan banyak kebutuhan penyimpanan data lokal dan bersama saya.

Sementara, saya suka ide mengelompokkan ZFS sedapat mungkin, kadang-kadang tidak praktis, atau saya perlu beberapa pemisahan geografis dari node penyimpanan.

Salah satu kasus penggunaan yang saya miliki adalah penyimpanan bereplikasi kinerja tinggi pada server aplikasi Linux. Sebagai contoh, saya mendukung produk perangkat lunak lama yang mendapatkan manfaat dari hard disk NVMe latensi rendah untuk datanya. Aplikasi memiliki opsi mirroring tingkat aplikasi yang dapat mereplikasi ke server sekunder, tetapi seringkali tidak akurat dan merupakan RPO 10 menit .

Saya telah memecahkan masalah ini dengan memiliki server sekunder (juga menjalankan ZFS pada perangkat keras yang serupa atau berbeda) yang bisa lokal, jauh atau keduanya. Dengan menggabungkan ketiga utilitas yang dirinci di bawah ini, saya telah membuat solusi replikasi yang memberi saya replikasi berkelanjutan, retensi snapshot yang dalam, dan opsi failover fleksibel.

zfs-auto-snapshot - https://github.com/zfsonlinux/zfs-auto-snapshot

Hanya alat praktis untuk mengaktifkan snapshot tingkat sistem file ZFS secara berkala. Saya biasanya menjalankan dengan jadwal berikut pada volume produksi:

# /etc/cron.d/zfs-auto-snapshot

PATH="/usr/bin:/bin:/usr/sbin:/sbin"

*/5 * * * * root /sbin/zfs-auto-snapshot -q -g --label=frequent --keep=24 //
00 * * * * root /sbin/zfs-auto-snapshot -q -g --label=hourly --keep=24 //
59 23 * * * root /sbin/zfs-auto-snapshot -q -g --label=daily --keep=14 //
59 23 * * 0 root /sbin/zfs-auto-snapshot -q -g --label=weekly --keep=4 //
00 00 1 * * root /sbin/zfs-auto-snapshot -q -g --label=monthly --keep=4 //

Syncoid (Sanoid) - https://github.com/jimsalterjrs/sanoid

Program ini dapat menjalankan snap / replikasi ad-hoc dari sistem file ZFS ke target sekunder. Saya hanya menggunakan bagian syncoid dari produk.

Dengan asumsi server1 dan server2 , perintah sederhana dijalankan dari server2 untuk menarik data dari server1 :

#!/bin/bash

/usr/local/bin/syncoid root@server1:vol1/data vol2/data

exit $?

Monit - https://mmonit.com/monit/

Monit adalah penjadwal pekerjaan dan manajer eksekusi yang sangat fleksibel. Secara default, ini bekerja pada interval 30 detik, tetapi saya memodifikasi konfigurasi untuk menggunakan siklus waktu dasar 15 detik.

Contoh konfigurasi yang menjalankan skrip replikasi di atas setiap 15 detik (1 siklus)

check program storagesync with path /usr/local/bin/run_storagesync.sh
        every 1 cycles
        if status != 0 then alert

Ini mudah untuk diotomatisasi dan ditambahkan melalui manajemen konfigurasi. Dengan membungkus eksekusi snapshot / replikasi di Monit, Anda mendapatkan status terpusat, kontrol pekerjaan dan peringatan (email, SNMP, skrip khusus).


Hasilnya adalah saya memiliki server yang memiliki beberapa bulan snapshot bulanan dan banyak poin rollback dan retensi dalam: https://pastebin.com/zuNzgi0G - Plus, replika atom 15 detik yang terus menerus bergulir:

# monit status

Program 'storagesync'
  status                            Status ok
  monitoring status                 Monitored
  last started                      Wed, 05 Apr 2017 05:37:59
  last exit value                   0
  data collected                    Wed, 05 Apr 2017 05:37:59
.
.
.
Program 'storagesync'
  status                            Status ok
  monitoring status                 Monitored
  last started                      Wed, 05 Apr 2017 05:38:59
  last exit value                   0
  data collected                    Wed, 05 Apr 2017 05:38:59
putih
sumber
4
Terima kasih telah memposting, jawaban Anda sangat fenomenal dan persis apa yang saya cari (dari latensi hingga pemantauan proses). Juga membaca github.com/ewwhite/zfs-ha/wiki dan saya sangat terkesan. Sekali lagi terima kasih :)
Greg
6

Anda memiliki dua cara berbeda untuk melakukannya:

  1. Cara tradisional, filesystem-agnostik yang digunakan untuk dekade terakhir, dengan alat seperti rsyncatau Bacula. Di sana Anda telah menguji dan (mudah-mudahan) stabil, perangkat lunak besar yang dapat dikustomisasi untuk penyebaran besar dan dapat digunakan bahkan jika Anda beralih dari ZFS
  2. Salah satu alat yang memanfaatkan ZFS send/recv. Ini bisa berupa solusi Anda sendiri, skrip atau skrip lanjutan dari berbagai yang ada di Github et al., Atau lebih banyak alat kaya fitur seperti Sanoid atau ZnapZend (kirim / terima dengan dukungan mbuffer dan rencana penyimpanan). Dalam hal ini Anda kemungkinan besar tidak akan menemukan solusi besar, "perusahaan" (dalam arti negatif), tetapi alat yang hanya melakukan tugas tunggal dan dapat dikombinasikan dengan alat lain untuk memenuhi pengaturan spesifik Anda.

Secara umum, saya hanya akan mempercayai alat yang kode sumbernya tersedia, dan saya akan membuatnya sesederhana mungkin. Jika menggunakan send/recv, Anda tidak perlu banyak mengelola, Anda hanya perlu menghapus snapshot n-1 di sisi lokal ketika transmisi dan pembuatan snapshot n di sisi remote berhasil.

Anda dapat membagi transportasi Anda dengan cara apa pun yang Anda suka, bahkan bisa async (snapshot tidak harus diterima segera), jika Anda hanya menjaga aturan besi bahwa Anda hanya dapat mengirim perbedaan antara snapshot lokal saat ini / baru dan lokal sebelumnya , dan bahwa snapshot lokal sebelumnya adalah yang terbaru di sisi jarak jauh (sampai cadangan selesai dan semuanya diatur ulang).

Sekarang saya memikirkannya, Anda mungkin bisa menyandikannya dalam mesin negara dan kemudian memastikan bahwa tidak ada kasing tak terduga yang bisa lolos.

pengguna121391
sumber
Saya tidak melihat bagaimana rsyncsolusi berbasis-skala akan terus-menerus mereplikasi filesystem skala perusahaan besar. Perubahan bisa terjadi lebih cepat daripada yang rsyncbisa menemukannya.
Andrew Henle
2
@AndrewHenle Saya tidak akan mengadvokasi untuk itu juga, saya hanya ingin menyajikannya, karena pertanyaannya tidak menentukan ruang lingkup / ukuran data atau jangka waktu. Jadi dalam kasus tindakan yang jarang terjadi, kemungkinan ada kemungkinan jika itu adalah filesystem-agnostik. Tentu saja, Anda akan kehilangan delta tingkat blok yang bagus ...
user121391
@ user121391 Sepenuhnya setuju dengan Anda tentang opensource adalah cara untuk pergi. Terima kasih atas tanggapan terinci Anda.
Greg
@Have seperti yang saya ketik ...
ewwhite
1
sangat merekomendasikan znapzend
Trent Lloyd