Zfs havuzunda artımlı / sürekli yedeklemeler nasıl yapılır?


25

Zfs havuzları tesis dışında nasıl / sürekli yedeklenir?

Ben tanımak send/receiveüzerinde ssh elle anlık yönetmek zorunda içerir ancak bir yöntemdir.

Bulduğum bazı araçlar var, ancak çoğu artık desteklenmiyor.

Umut verici görünen tek araç https://github.com/jimsalterjrs/sanoid'dir, ancak yaygın olarak bilinmeyen bir aracın veriyi bozabileceğinden / silebileceğinden daha fazla zarar verebileceğinden endişeleniyorum.

Sürekli / artan zfs yedeklemeleri nasıl yapılır?


2
Biraz sonra cevap vereceğim, ancak birincil ZFS sunucusundan ikinciye her 15 saniyede bir bu tür bir çoğaltma gerçekleştiren bir çözümüm var.
ewwhite

Yanıtlar:


33

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

4
Gönderdiğiniz için teşekkür ederiz, cevabınız olağanüstü ve tam olarak aradığım şeydi (gecikmeden işlem izlemeye kadar). Ayrıca github.com/ewwhite/zfs-ha/wiki adresini okudum ve iyice etkilendim. Bir kez daha teşekkür ederim :)
Greg

6

Bunu yapabilmeniz için iki farklı yönteminiz var:

  1. Son on yılda kullanılan / kullanılan geleneksel, dosya sistemi agnostik yolu, rsyncveya gibi araçlarla Bacula. Orada, büyük dağıtımlar için özelleştirilebilen ve ZFS'den uzak dursanız bile kullanabileceğiniz, test edilmiş ve (umarım) kararlı, büyük yazılımları kullandınız.
  2. ZFS kullanan araçlardan biri send/recv. Bu, kendi çözümünüz, Github ve arkadaşlarının çeşitli bölümlerinden bir komut dosyası veya genişletilmiş bir komut dosyası veya Sanoid veya ZnapZend (mbuffer desteği ve saklama planları ile gönderme / gönderme) gibi zengin özellikli araçlar olabilir . Bu durumda, büyük, "enterprisey" (olumsuz anlamda) çözümler bulamazsınız, ancak yalnızca tek bir görevi yerine getiren ve kendi kurulumunuza uyması için diğer araçlarla birleştirilebilecek olan araçları bulacaksınız.

Genelde, sadece kaynak kodu olan bir araca güvenirdim ve mümkün olduğu kadar basit tutardım. Kullanılıyorsa send/recv, az önce silme anlık görüntüye sahip, çok yönetmek gerekmez n-1 iletim ve anlık kurulması sırasında yerel tarafta n uzak tarafında başarılı oldu.

Aktarımınızı istediğiniz şekilde bölebilirsiniz, hatta zaman zaman eşzamansız da olabilir (anlık fotoğrafların hemen alınması gerekmez), demir kuralını yalnızca yerel geçerli / yeni ve yerel önceki anlık görüntüler arasında bir fark gönderebildiğiniz durumda tutarsanız ve önceki yerel anlık görüntünün uzak taraftaki en son sürüm olduğunu (yedekleme tamamlanana ve her şey sıfırlanana kadar).

Şimdi düşünüyorum da, bunu muhtemelen bir devlet makinesinde kodlayabilir ve öngörülemeyen davaların kaymayacağından emin olabilirsiniz.


rsyncTemelli bir çözümün, büyük ölçekli kurumsal bir dosya sistemini sürekli çoğaltmak için nasıl ölçekleneceğini anlamıyorum . Değişiklikler rsynconları keşfetmekten daha hızlı olabilirdi.
Andrew Henle

2
@AndrewHenle Ben de onun için savunuculuk yapmazdım, sadece bunu sunmak istedim, çünkü soru verilerin kapsamını / boyutunu veya zaman dilimini belirlemedi. Bu nedenle nadir eylem durumunda, dosya sistemi-agnostik olması gerekebilir. Tabii ki, blok seviyesindeki güzel deltaları kaybedersiniz ...
user121391

@ user121391 Tamamen açık kaynak kodlu olmanın yolunda size katılıyorum. Detaylı cevabınız için teşekkür ederiz.
Greg,

@Dave sadece yazarken ...
ewwhite

1
şiddetle tavsiye znapzend
Trent Lloyd
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.