ZFS inanılmaz bir dosya sistemidir ve yerel ve paylaşılan veri depolama ihtiyaçlarımın çoğunu çözer.
Ancak mümkün olduğunda kümelenmiş ZFS fikrini seviyorum , bazen pratik değil veya depolama düğümlerinin coğrafi olarak ayrılması gerekiyor.
Sahip olduğum kullanım durumlarından biri, Linux uygulama sunucularında yüksek performanslı çoğaltılmış depolama içindir. Örneğin, verileri için düşük gecikmeli NVMe SSD sürücülerinden yararlanan eski bir yazılım ürününü destekliyorum. Uygulama, ikincil bir sunucuya kopyalayabilen uygulama düzeyinde bir yansıtma seçeneğine sahiptir, ancak genellikle yanlış ve 10 dakikalık bir RPO'dur .
Bu sorunu yerel, uzak veya her ikisi de olabilen ikincil bir sunucuya (benzer veya farklı donanımlarda ZFS çalıştıran) sahip olarak çözdüm. Aşağıda ayrıntılı olarak verilen üç yardımcı programı birleştirerek, bana sürekli çoğaltma, derin anlık görüntü tutma ve esnek yerine çalışma seçenekleri sunan bir çoğaltma çözümü hazırladım.
zfs-otomatik anlık görüntü - https://github.com/zfsonlinux/zfs-auto-snapshot
Periyodik ZFS dosya sistemi düzeyinde anlık görüntüleri etkinleştirmek için sadece kullanışlı bir araçtır. Genellikle üretim hacimlerinde aşağıdaki çizelgeyle çalışırım:
# /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
Bu program, bir ZFS dosya sisteminin geçici bir şekilde eklenmesi / çoğaltılmasını ikincil bir hedefe çalıştırabilir. Sadece ürünün syncoid kısmını kullanıyorum .
Varsayarsak sunucu1 ve Server2 gelen, basit bir komut çalıştırmak Sunucu2 için çekin verileri sunucusu1 :
#!/bin/bash
/usr/local/bin/syncoid root@server1:vol1/data vol2/data
exit $?
Monit - https://mmonit.com/monit/
Monit, son derece esnek bir iş zamanlayıcısı ve yürütme yöneticisidir. Varsayılan olarak, 30 saniyelik bir aralıkta çalışır, ancak 15 saniyelik bir temel zaman döngüsü kullanmak için yapılandırmayı değiştiririm.
Her 15 saniyede bir yukarıdaki çoğaltma komut dosyasını çalıştıran örnek bir yapılandırma (1 döngü)
check program storagesync with path /usr/local/bin/run_storagesync.sh
every 1 cycles
if status != 0 then alert
Bu yapılandırma yönetimi ile otomatikleştirmek ve eklemek kolaydır. Monit'te anlık görüntü / çoğaltmanın yürütülmesini kapatarak, merkezi durum, iş kontrolü ve uyarı (e-posta, SNMP, özel komut dosyası) alırsınız.
Sonuçta, ayda birkaç ay anlık görüntü ve birçok geri alma ve tutma noktası olan sunucular var : https://pastebin.com/zuNzgi0G - Artı, sürekli yuvarlanan 15 saniyelik bir atomik kopya:
# 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