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 anos: 10year=>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