ZFS: Usando ZnapZendZetup  para Configurar o ZnapZend – Parte 16

No artigo anterior instalamos(compilamos) o ZnapZend no debian. Hoje iremos configurá-lo usando o ZnapZendZetup.

 

Planejamentos de Tempo para Criação e Retenção de Backups

ZnapZendZetup configura os agendamentos(tarefas/planos) para backup dos datasets e usa, em background, as ferramentas do zfs. Por exemplo, podemos criar um plano onde a cada  2 horas será criado um backup e esse backup será guardado/retido por 1 mês. Esse plano pode ser expressado da seguinte forma: 1month=>1hour.

Segue rótulos aceitos:

  • month = mês
  • minute =  minuto
  • hour =  hora
  • day = dia
  • week = semana
  • year =  ano
  • second = segundos

ainda podemos abreviar da seguinte forma

second ou sec ou s
minute ou min
hour ou h
day ou d
week ou w
month ou mon ou m
year ou y

Outros exemplos,

Gerar backups a cada 30 minutos e guardá-los(reter) por uma semana: 1week=>30min

Gerar um backup a cada 2 dias e guardá-los(reter) por 10 anos10year=>2day

Opções de znapzentzetup

znapzendzetup tem as seguintes opções: create, delete, edit, enable, disable, enable-dist, disable-dist, list, import, help e man.

Bom, essas opções são praticamente autoexplicativas, por exemplo:

  • create =  cria um plano de backup
  • delete =  deleta um plano de backup
  • edit = edita planos….

…..

Sempre que houver uma modificação ou alteração nas configurações um sinal HUP deverá ser enviado para o programa znapzend para que ele releia suas configurações. Então o comando “pkill -HUP znapzend” terá que ser usado após alterações.

Esse é o Ambiente em que Vou Trabalhar com os Testes

Executei os comandos abaixo para criar o pool “meuPool” e seus datasets: “meuPool/documentos, meuPool/imagens, meuPool/videos….”

meuPool é composto por 2 discos(sdb e sdc) espelhados(mirror)

elder@server01:~$ sudo zpool create meuPool mirror sdb sdc
elder@server01:~$ sudo zfs create meuPool/documentos
elder@server01:~$ sudo zfs create meuPool/imagens
elder@server01:~$ sudo zfs create meuPool/videos
elder@server01:~$ sudo zfs create meuPool/documentos/contratos
elder@server01:~$ sudo zfs create meuPool/documentos/notas
elder@server01:~$ sudo zfs create meuPool/documentos/planilhas

Obs.: Na conclusão da parte 09 dessa série de artigos falamos da importância em usar o id dos dispositivos ao invés desses rótulos sdb, sdc… Aqui continuamos a usar o rótulo por questão de aprendizagem apenas.

Além dos dispositivos sdb e sdc também  tenho o sdd que usarei para guardar os backups. Executei os seguintes comandos para criar o pool meuPoolBKP

elder@server01:~$ sudo zpool create meuPoolBKP sdd

Tenho 2 Pools: meuPool e meuPoolBKP

elder@server01:~$ sudo zpool list
NAME         SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
meuPool       80M   268K  79,7M        -         -     3%     0%  1.00x    ONLINE  -
meuPoolBKP    80M   106K  79,9M        -         -     3%     0%  1.00x    ONLINE  -

 

Inicie o znapzend

Obs.: Ao criar planos com znapzendzetup podemos executar “znapzsend –runonce –recursive” para executar os planos e ao  fazer com que znapzend seja iniciado e encerrado em seguida.  runonce vem de run(rodar) once(uma vez).

Antes de tudo vamos iniciar o znapzend com o seguinte comando: “sudo znapzend –daemonize”

elder@server01:~$ sudo znapzend  --daemonize
znapzend (5504) is running in the background now.

Usamos o “–daemonize” para que o programa znapzend não fique dependente do terminal, sendo executado em plano de fundo.

 

Criando um Plano de backup com znapzendzetup

Vamos criar(create)  um backup do meuPool.

znapzendzetup precisa inicialmente de 2 elementos:

  • create: o comando para criar o planejamento do backup;
  • SRC: o source ou origem. É o pool que iremos fazer backup

 

1) Criando um plano simples de backup com “znapzendzetup create SRC ‘1d=>1h’ meuPool“. O comando abaixo faz com que snapshots sejam criados a cada 1 hora e retidos por 1 dia.

elder@server01:~$ sudo znapzendzetup create SRC '1d=>1h'  meuPool 
*** backup plan: meuPool ***
         enabled = on
         mbuffer = off
    mbuffer_size = 1G
   post_znap_cmd = off
    pre_znap_cmd = off
       recursive = off
             src = meuPool/documentos
        src_plan = 1day=>1hour
        tsformat = %Y-%m-%d-%H%M%S
      zend_delay = 0

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.

Nas duas últimas linhas temos um aviso que “se modificarmos nossa configuração devemos enviar um sinal HUP usando o comando  pkill -HUP znapzend para que znapzend reconheça a alteração“.

 

2)  No início do post iniciamos o programa znapzend, mas para não esperarmos o tempo agendado(1day=>1hour) do plano vamos usar “znapzend  –runonce”

elder@server01:~$ sudo znapzend  --runonce

liste os snaposts com znapzendztatz

elder@server01:~$ sudo znapzendztatz 
USED    LAST SNAPSHOT       DATASET
   0B   2021-02-22-140301   meuPool

 

Destruindo o Plano com  “znapzendzetup delete”

 

Vamos destruir a configuração

elder@server01:~$ sudo znapzendzetup delete meuPool

Recarregue as configurações

elder@server01:~$ sudo pkill -HUP znapzend

 

Criando Plano com um Destino(DST)

Acima criamos um plano(1d=>1h) onde era criado snaphost dentro de um source(SRC), ou seja, dentro de meuPool. Com SRC criamos snapshot do meuPool e salvamos esses snapshots dentro de meuPool. Podemos usar DST para enviar snapshots para outro pool em outro disco, por exemplo, dentro de meuPoolBKP.

1) Iremos criar um plano incluindo um destino(DST).

Os snapshosts serão salvos dentro da origem(SRC) e também enviados para o destino(DST) meuPoolBKP.

elder@server01:~$ sudo znapzendzetup create SRC '3d=>30min' meuPool/documentos  DST:a '7d=>2h'  meuPoolBKP
*** backup plan: meuPool/documentos ***
           dst_a = meuPoolBKP
      dst_a_plan = 7days=>2hours
         enabled = on
         mbuffer = off
    mbuffer_size = 1G
   post_znap_cmd = off
    pre_znap_cmd = off
       recursive = off
             src = meuPool/documentos
        src_plan = 3days=>30minutes
        tsformat = %Y-%m-%d-%H%M%S
      zend_delay = 0

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.

Acima temos:

  • dst_a = meuPoolBKP: será criado enviado backups dos snapshots para o pool meuPoolBKP
  • dst_a_plan = 7days=>2hours:  será enviado backup para meuPoolBKP a cada 2 horas e serão guardados durante 7 dias.
  • src = meuPool/documentos: Será criado snapshot dentro de  meuPool/documentos
  • src_plan = 3days=>30minutes: Os snapshots dentro de meuPool/documentos serão criados a cada 30 minutos e guardados durante 3 dias.
  • %Y-%m-%d-%H%M%S: Os snapshots  criados terão o nome no formato: ano-mês-dia-hora-minutos-segundos

 

O “a:” em “DST:a” serve como uma chave. Com isso podemos criar um plano com vários destinos: DST:a, DST:b, DST:c….

 

2) Vamos executar com “znapzend –runonce”

elder@server01:~$ sudo znapzend --runonce

Vamos listar os snapshosts

elder@server01:~$ sudo znapzendztatz 
USED    LAST SNAPSHOT       DATASET
   0B   2021-02-22-150305   meuPool/documentos
   0B   2021-02-22-150305   meuPoolBKP

Executei mais algumas vezes o comando “znapzend –runonce”. Veja todos os snapshots com “zfs list -t snapshot”

elder@server01:~$ sudo zfs list -t snapshot
NAME                                   USED  AVAIL     REFER  MOUNTPOINT
meuPool@2021-02-22-140035                0B      -       24K  -
meuPool@2021-02-22-144048                0B      -       24K  -
meuPool/documentos@2021-02-22-150305     0B      -       24K  -
meuPool/documentos@2021-02-22-164204     0B      -       24K  -
meuPoolBKP@2021-02-22-150305             0B      -       24K  -
meuPoolBKP@2021-02-22-164204             0B      -       24K  -

Acima, podemos ver em laranja os snapshots que foram enviados para o meuPoolBKP, em outro HD

Desativando e Ativando o Plano com “znapzendzetup disable/enable”

Se tivermos diversos planos criados podemos desativar um deles. Isso bom como algo temporário, já que excluir nos faria ter que recriar no futuro caso precissássemos  do plano novamente.

Vamos desativar o plano

elder@server01:~$ sudo znapzendzetup disable meuPool/documentos

Recarregue as configurações

elder@server01:~$ sudo pkill -HUP znapzend

Veja o status com “znapzendzetup list

elder@server01:~$ sudo znapzendzetup list
*** backup plan: meuPool/documentos ***
           dst_a = meuPoolBKP
      dst_a_plan = 7days=>2hours
         enabled = off
         mbuffer = off
    mbuffer_size = 1G
   post_znap_cmd = off
    pre_znap_cmd = off
       recursive = off
             src = meuPool/documentos
        src_plan = 3days=>30minutes
        tsformat = %Y-%m-%d-%H%M%S
      zend_delay = 0

NOTE: if you have modified your configuration, send a HUP signal
(pkill -HUP znapzend) to your znapzend daemon for it to notice the change.

Ative o plano

elder@server01:~$ sudo znapzendzetup enable meuPool/documentos

Ativando mbufer

Não sabe o que é buffer? Clique aqui.

Temos um artigo falando sobre o mbuffer. Clique aqui.

Para darmos mais velocidade às execuções dos planos do znapzend podemos usar o mbuffer para termos um buffer.

Use “which mbuffer” para encontrar a sua localização

elder@server02:~$ which mbuffer 
/usr/bin/mbuffer

Vamos as seguintes opções para mbuffer no znapzend:

  • –mbuffer: diretorio onde está instalado o mbuffer. Exemplo, –mbuffer=/usr/bin/mbuffer.
  • –mbuffersize:  tamanho do mbuffer. Por exemplo –mbuffersize=1G.

 

Crie um  plano usando mbuffer

elder@server01:~$ sudo znapzendzetup create --recursive  --mbuffer=/usr/bin/mbuffe --mbuffersize=200M  SRC '2d=>30min' meuPool 
*** backup plan: meuPool ***
         enabled = on
         mbuffer = /usr/bin/mbuffe
    mbuffer_size = 200M
   post_znap_cmd = off
    pre_znap_cmd = off
       recursive = on
             src = meuPool
        src_plan = 2days=>30minutes
        tsformat = %Y-%m-%d-%H%M%S
      zend_delay = 0

Acima também ativei a recursividade(–recursive) para que gerado snapshot de todos os datasets filhos. Por exemplo, criamos um plano para meuPool porém será abrangido meuPool/documentos e meuPool/contrados…

 

Recursividade

Como dito acima podemos ativar a opção –recursive e assim termos recursividade na geração de snapshots.

Se acima, momento da criação do plano, não tivéssemos ativado –recursive poderíamos ativar mais tarde usando

elder@server01:~$ sudo znapzendzetup enable recursive=on  meuPool

Vamos continuar com o plano criado acima. Nesse plano criamos definimos meuPool como dataset de onde criaremos os snapshots. Vamos executar o plano

elder@server01:~$ sudo znapzend --runonce

Liste os snapshosts criados

elder@server01:~$ sudo zfs list -t snapshot
NAME                                   USED  AVAIL     REFER  MOUNTPOINT
meuPool@2021-02-23-141557                0B      -       24K  -
meuPool/contratos@2021-02-23-141557      0B      -       24K  -
meuPool/documentos@2021-02-23-141557     0B      -       24K  -

 

Perceba por causa da recursividade além do snapshot meuPool@2021-02-23-141557 foram criados automaticamente snapshots para os datasets filhos de meuPool:

meuPool/contratos@2021-02-23-141557

e

meuPool/documentos@2021-02-23-141557

 

Exemplo mais Complexo

No manual do comando znapzendzetup há o exemplo mais complexo abaixo:

znapzendzetup create --recursive --mbuffer=/opt/omni/bin/mbuffer \
       --mbuffersize=1G --tsformat='%Y-%m-%d-%H%M%S' \
       --pre-snap-command="/bin/sh /usr/local/bin/lock_flush_db.sh" \
       --post-snap-command="/bin/sh /usr/local/bin/unlock_db.sh" \
       SRC '7d=>1h,30d=>4h,90d=>1d' tank/home \
       DST:a '7d=>1h,30d=>4h,90d=>1d,1y=>1w,10y=>1month' backup/home \
       DST:b '7d=>1h,30d=>4h,90d=>1d,1y=>1w,10y=>1month' \
          root@bserv:backup/home \
          "/root/znapzend.sh dst_b pool on" \
          "/root/znapzend.sh dst_b pool off"

Temos:

  • –pre-snap-command = Um comando a ser executado antes
  • –post-snap-command = comando a ser executado após a execução do plano
  • DST:a  e  DST:b = dois destinos. O destino DST:b é enviado para outro servidor via ssh: root@bserv:backup/home
  • mbuffer = temos o mbuffer.

 

 

 

Conclusão

O znapzend é uma mão na roda e facilita muito a vida de um admin. Além da recursividade que é algo muito bom também é oferecido buffer e a possibilidade de enviar backups de snapshots para outros discos e até mesmo outros servidores. Para enviar backups para um servidor á a necessidade de criar um acesso ssh sem “senha”  entre os dois servidores envolvidos: o que envia e o que recebe.

Há outros programas além do znapzend. Podemos citar o zfs-auto-snapshot 

 

Fontes: manual znapzendzetup

 

Leitor voraz e um dos administradores do GNU/Linux Brasil no Whatsapp, facebook, youtube e nesse dito site: www.gnulinuxbrasil.com.br

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *