Utilizzo di znapzend per snapshot automtici locali e remoti di filesystemz ZFS

From RVM Wiki
Jump to navigation Jump to search

Introduzione

  • ZnapZend è un applicativo perl che gestisce la pianificazione ed esecuzione di snapshot periodici di filesystem ZFS. Consente di mantenere uno storico sia in locale, che di inviare gli snapshot locali su altri pool locali o su server remoti raggiingibili via ssh.

Installazione

Dai pacchetti

  • Per debian jessie c'è il package già fatto:
https://github.com/Gregy/znapzend-debian/releases
  • Caricarlo nei propri repository e poi installarlo:
sudo apt-get install znapzend
  • Oppure installarlo localmente
sudo dpkg -i znapzend_0.17.0-1_amd64.deb

Dai Sorgenti

sudo apt-get install ca-certificates mbuffer
cd /tmp
wget https://github.com/oetiker/znapzend/releases/download/v0.15.3/znapzend-0.15.3.tar.gz
 tar zxvf znapzend-0.15.3.tar.gz
cd znapzend-0.15.3
./configure --prefix=/opt/znapzend-0.15.3
make
sudo make install
 for x in /opt/znapzend-0.15.3/bin/*; do sudo ln -s $x /usr/local/bin; done
 sudo mkdir -p /usr/local/share/man/man1; for x in /opt/znapzend-0.15.3/share/man/man1/*; do sudo ln -s $x /usr/local/share/man/man1; done


Configurazione

Impostazione dei soli snapshot locali

  • Impostare
sudo znapzendzetup create  --recursive --tsformat='%Y-%m-%d-%H%M%S'   SRC '1d=>5min,7d=>15min,30d=>1h,90d=>1d' DATA/data01
  • Testare. NON ESEGUIRE SENZA --NOACTION, altrimenti il primo trasferimento srà uno snapshot non valido:
sudo znapzend --debug --noaction --runonce=DATA/data01
  • Avviare i daemon:
sudo systemctl enable znapzend.service
sudo systemctl start znapzend.service

Impostazione con server remoto

Predisposizione server remoto di backup

  • Sul server remoto installare i pacchetti necessari al collegamento:
sudo apt-get install mbuffer
  • Sul server remoto, preparare il pool o dataset che accoglierà gli snapshot:
sudo zpool create BACKUP /dev/whatever
sudo zfs set dedup=on BACKUP
sudo zfs set compression=on BACKUP
sudo zfs create BACKUP/kinsi-home
  • Impostare l'accesso ssh come root dal client al server
  • Sul client, connettersi la prima volta come root al server remoto
  • Verificare che la connessione ssh support arcfrour:
sudo /usr/bin/ssh -Q cipher quantum.diesis.priv | paste -d , -s | grep arcfour
  • Sul client installare mbuffer
sudo apt-get install mbuffer
  • Sul client modificare il backup plan per la SRC data/home appena utilizzata (è possibile cambiare anche i parametri della SRC):
sudo znapzendzetup \
  edit  \
    --mbuffer=$(which mbuffer):33332 \
    --recursive \
    --tsformat='%Y-%m-%d-%H%M%S'  \
    SRC \
    DATA/home  \
    DST:isep \
      '1day=>15minutes,7days=>30minutes,30days=>2hours,90days=>1day,1year=>1week,10years=>1month' \
      root@isep.rvmgroup.local:DATA/znapzend-emip-home
*** backup plan: data/home ***
dst_isep        = root@quantum.diesis.priv:BACKUP/kinsi-home
dst_isep_plan   = 1day=>15minutes,7days=>30minutes,30days=>2hours,90days=>1day,1year=>1week,10years=>1month

enabled         = on
mbuffer         = /usr/bin/mbuffer:33333
mbuffer_size    = 1G
post_znap_cmd   = off
pre_znap_cmd    = off
recursive       = on
src             = data/home
src_plan        = 2days=>15minutes,7days=>4hours,30days=>1day
tsformat        = %Y-%m-%d-%H%M%S

Do you want to save this backup set [y/N]? y
NOTE: if you have modified your configuration, send a HUP signal
(pkill -HUP znapzend) to your znapzend daemon for it to notice the change.
  • Testare:
sudo znapzend --noaction --debug --runonce=data/home
[Sat Mar  5 17:39:12 2016] [info] znapzend (PID=6599) starting up ...
[Sat Mar  5 17:39:12 2016] [info] refreshing backup plans...
[Sat Mar  5 17:39:14 2016] [info] found a valid backup plan for pool0/diska...
[Sat Mar  5 17:39:14 2016] [info] znapzend (PID=6599) initialized -- resuming normal operations.
[Sat Mar  5 17:39:14 2016] [debug] snapshot worker for pool0/diska spawned (6603)
[Sat Mar  5 17:39:14 2016] [info] creating recursive snapshot on pool0/diska # zfs snapshot -r pool0/diska@2016-03-05-173914
[Sat Mar  5 17:39:14 2016] [debug] snapshot worker for pool0/diska done (6603)
[Sat Mar  5 17:39:14 2016] [debug] send/receive worker for pool0/diska spawned (6604)
[Sat Mar  5 17:39:14 2016] [info] starting work on backupSet pool0/diska # zfs list -H -r -o name -t filesystem,volume pool0/diska
[Sat Mar  5 17:39:14 2016] [debug] sending snapshots from pool0/diska to root@rvmstor01.rvmgroup.local:backup/diska # zfs list -H -o name -t snapshot -s creation -d 1 pool0/diska
# ssh -o Compression=yes -o CompressionLevel=1 -o Cipher=arcfour -o batchMode=yes -o ConnectTimeout=30 root@rvmstor01.rvmgroup.local zfs list -H -o name -t snapshot -s creation -d 1 backup/diska
# ssh -o Compression=yes -o CompressionLevel=1 -o Cipher=arcfour -o batchMode=yes -o ConnectTimeout=30 root@rvmstor01.rvmgroup.local zfs list -H -o name -t snapshot -s creation -d 1 backup/diska
[Sat Mar  5 17:39:21 2016] [debug] cleaning up snapshots on root@rvmstor01.rvmgroup.local:backup/diska
# zfs list -H -o name -t snapshot -s creation -d 1 pool0/diska
[Sat Mar  5 17:39:21 2016] [debug] cleaning up snapshots on pool0/diska
[Sat Mar  5 17:39:21 2016] [info] done with backupset pool0/diska in 7 seconds
[Sat Mar  5 17:39:21 2016] [debug] send/receive worker for pool0/diska done (6604)


  • Attendere
  • Verificare il transfer rate: dovrebbe saturare gigabit.
  • Se non si usa mbuffer, il transfer è il peggiore. Se lo si usa migliora è più costante. Se lo si usa con la porta (:33333) allora ssh è usato solo per lanciare l'mbuffer ricevente, e satura gigabit. Inoltre, non carica SSH. Naturalmente mbuffer diretto NON comprime, cosa che invec fa SSH.
  • Se si hanno problemi di crash o stallo con mbuffer, disattivarlo, con
sudo znapzendzetup edit  --mbuffer=none DST:quantum 
  • Rieseguire la sincronizzazione: dovrebbe copiare SOLO i delta, perchè zfs send usa il flag -I

Attivazione daemon

  • Copiare il file per attivarlo con systemd:
sudo cp init/znapzend.service /etc/systemd/system/
  • Attivare ed avviare il daemon:
sudo systemctl enable znapzend.service
sudo systemctl start znapzend.service
  • Monitorarne l'esecuzione:
sudo tail -f /var/log/syslog | grep znap

Esempi di configurazione

  • Conservare 24 snapshot orari al giorno in locale, e storicizzarli sulla destinazione in un altro pool locale:
znapzendzetup create  --recursive --tsformat='%Y-%m-%d-%H%M%S'  SRC '1d=>1h' DISKA/diska  
*** backup plan: DISKA/diska ***
enabled         = on
mbuffer         = off
mbuffer_size    = 1G
post_znap_cmd   = off
pre_znap_cmd    = off
recursive       = on
src             = DISKA/diska
src_plan        = 1day=>1hour
tsformat        = %Y-%m-%d-%H%M%S
znapzendzetup edit  SRC DISKA/diska  DST:diskb '7d=>1h,30d=>4h,90d=>1d,1y=>1w,10y=>1month' DISKB/snapshots/quantum/diska
*** backup plan: DISKA/diska ***
dst_diskb       = DISKB/snapshots/quantum/diska
dst_diskb_plan  = 7days=>1hour,30days=>4hours,90days=>1day,1year=>1week,10years=>1month
enabled         = on
mbuffer         = off
mbuffer_size    = 1G
post_znap_cmd   = off
pre_znap_cmd    = off
recursive       = on
src             = DISKA/diska
src_plan        = 1day=>1hour

Modifica plan degli snapshot locali

znapzendzetup edit SRC "7days=>15minutes,30days=>1hour,90days=>1day"  DATA/users

Eliminazione di una destinazione remota

znapzenzetup delete --dst=isep DATA/users

Installazione GUI web per il browsing

  • Installazione:
wget https://github.com/j-keck/zfs-snap-diff/releases/download/0.0.8/zfs-snap-diff-0.0.8-linux-amd64.zip
unzip zfs-snap-diff-0.0.8-linux-amd64.zip 
  • Eseguire:
sudo ./zfs-snap-diff -a POOLNAME/DATASETNAME
  • Consultare via:
http://ip.address:12345

Riferimenti