Come eseguire backup incrementali / continui del pool zfs?


25

In che modo è possibile eseguire il backup continuo / incrementale dei pool zfs fuori sede?

Riconosco che send/receiveover ssh è un metodo che comporta la necessità di gestire manualmente le istantanee.

Ci sono alcuni strumenti che ho trovato, tuttavia la maggior parte non è più supportata.

L'unico strumento che sembra promettente è https://github.com/jimsalterjrs/sanoid, tuttavia sono preoccupato che uno strumento non molto conosciuto possa fare più male che bene in quanto può corrompere / cancellare i dati.

Come vengono eseguiti i backup zfs continui / incrementali?


2
Risponderò un po 'più tardi, ma ho una soluzione che esegue questo tipo di replica ogni 15 secondi dal server ZFS primario a quello secondario.
ewwhite,

Risposte:


33

ZFS è un file system incredibile e risolve molte delle mie esigenze di archiviazione dei dati locali e condivisi.

Tuttavia, mi piace l'idea di ZFS in cluster, ove possibile, a volte non è pratico o ho bisogno di una separazione geografica dei nodi di archiviazione.

Uno dei casi d'uso che ho è per l'archiviazione replicata ad alte prestazioni su server di applicazioni Linux. Ad esempio, supporto un prodotto software legacy che beneficia di unità SSD NVMe a bassa latenza per i suoi dati. L'applicazione ha un'opzione di mirroring a livello di applicazione che può replicarsi su un server secondario, ma spesso è inaccurata e ha un RPO di 10 minuti .

Ho risolto questo problema disponendo di un server secondario (che esegue anche ZFS su hardware simile o diverso) che può essere locale, remoto o entrambi. Combinando le tre utility descritte di seguito, ho creato una soluzione di replica che mi offre una replica continua, una conservazione approfondita delle istantanee e opzioni di failover flessibili.

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

È solo uno strumento utile per abilitare le istantanee periodiche a livello di filesystem ZFS. In genere corro con il seguente programma sui volumi di produzione:

# /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

Questo programma può eseguire snap / replica ad hoc di un filesystem ZFS su una destinazione secondaria. Uso solo la parte syncoid del prodotto.

Supponendo server1 e server2 , semplice comando eseguito da server2 per estrarre i dati da server1 :

#!/bin/bash

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

exit $?

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

Monit è un programmatore di lavori estremamente flessibile e responsabile dell'esecuzione. Per impostazione predefinita, funziona su un intervallo di 30 secondi, ma modifico la configurazione per utilizzare un ciclo temporale di base di 15 secondi.

Una configurazione di esempio che esegue lo script di replica sopra ogni 15 secondi (1 ciclo)

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

Questo è semplice da automatizzare e aggiungere tramite la gestione della configurazione. Concludendo l'esecuzione dell'istantanea / replica in Monit, si ottiene uno stato centralizzato, controllo del lavoro e avvisi (e-mail, SNMP, script personalizzati).


Il risultato è che ho server con più mesi di snapshot mensili e molti punti di rollback e conservazione all'interno di: https://pastebin.com/zuNzgi0G - Plus, una replica atomica a rotazione continua di 15 secondi:

# 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
Grazie per la pubblicazione, la tua risposta è fenomenale ed è esattamente quello che stavo cercando (dalla latenza al monitoraggio del processo). Anche leggendo github.com/ewwhite/zfs-ha/wiki e sono profondamente impressionato. Grazie ancora :)
Greg

6

Hai due modi diversi per farlo:

  1. Il modo tradizionale e indipendente dal filesystem che è / è stato usato negli ultimi decenni, con strumenti come rsynco Bacula. Lì hai testato e (si spera) software di grandi dimensioni, che può essere personalizzato per distribuzioni enormi e può essere utilizzato anche se passi da ZFS
  2. Uno degli strumenti che sfruttano ZFS send/recv. Questa può essere la tua soluzione, uno script o uno script esteso tra i vari su Github et al. O strumenti più ricchi di funzionalità come Sanoid o ZnapZend (invio / recv con supporto mbuffer e piani di conservazione). In questo caso molto probabilmente non troverai soluzioni grandi, "enterprise" (in senso negativo), ma strumenti che svolgono solo la singola attività e possono essere combinati con altri strumenti per soddisfare la tua specifica configurazione.

In generale, mi fiderei solo di uno strumento il cui codice sorgente è disponibile e lo terrei il più semplice possibile. Se si utilizza send/recv, non è necessario gestire molto, è sufficiente eliminare l'istantanea n-1 sul lato locale quando la trasmissione e la creazione dell'istantanea n sul lato remoto hanno avuto esito positivo.

Puoi dividere il tuo trasporto come preferisci, può anche essere asincrono (le istantanee non devono essere ricevute immediatamente), se mantieni la regola del ferro che puoi solo inviare un diff tra l'istantanea corrente corrente / nuova e locale precedente e che l'istantanea precedente locale è la più recente sul lato remoto (fino al termine del backup e al ripristino di tutto).

Ora che ci penso, potresti probabilmente codificarlo in una macchina a stati e quindi essere sicuro che nessun caso imprevisto possa passare.


Non vedo come una rsyncsoluzione basata su base si ridimensionerebbe alla replica continua di un grande filesystem su scala aziendale. I cambiamenti potrebbero avvenire più velocemente di quanto rsyncpotrebbero scoprirli.
Andrew Henle,

2
@AndrewHenle Non lo vorrei neanche io, volevo solo presentarlo, perché la domanda non specificava l'ambito / dimensione dei dati o il periodo di tempo. Quindi, in caso di azione non frequente, potrebbe essere una possibilità se dovrebbe essere indipendente dal filesystem. Certo, perderesti i bei delta a livello di blocco ...
user121391

@ user121391 Completamente d'accordo con te per quanto riguarda opensource come la strada da percorrere. Grazie per la tua risposta dettagliata.
Greg,

@Dave proprio mentre sto scrivendo ...
ewwhite

1
consiglio vivamente znapzend
Trent Lloyd il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.