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