O ZnapZend é uma ferramenta de backup focada no ZFS, projetada para criar snapshots e enviá-los para locais de backup. Ela utiliza as ferramentas do ZFS, como snapshot
, send
e receive
, para realizar seu trabalho. A ferramenta permite gerenciar tanto backups locais quanto remotos e pode purgar dados antigos com base na configuração.
Veja um exemplo complexo retirado da documentação do znapzend:
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 \
"/usr/bin/mbuffer" "128M" \
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" \
"/opt/bin64/mbuffer" "4G"
#1 – Configuração do ZnapZend no ZFS
A configuração do ZnapZend é armazenada como propriedades diretamente no sistema de arquivos ZFS, garantindo que cada dataset seja configurado corretamente. Essas propriedades podem ser configuradas de forma recursiva, e é possível excluir subárvores de datasets, mas essa funcionalidade ainda está em fase experimental.
Comando para configurar o ZnapZend:
znapzendzetup create --recursive --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' root@bserv:backup/home
#2 – Backup Local e Remoto
Você pode configurar o ZnapZend para realizar backups localmente ou remotamente. No caso de backups remotos, o ZnapZend utiliza o ssh
para transferir os snapshots de forma segura para o servidor de destino. A configuração para backups remotos exige que você tenha login sem senha configurado no servidor de destino.
Comando para enviar snapshots para o host remoto:
znapzendzetup create --recursive --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' root@bserv:backup/home
#3 – Instalação do ZnapZend
Se a distribuição que você usa não fornecer o ZnapZend empacotado, você pode compilar a ferramenta a partir do código-fonte. Para compilar, é necessário garantir que o Perl esteja instalado.
Para instalar as dependências no Ubuntu ou Debian, use o seguinte comando:
apt-get install perl unzip
Já no Red Hat ou CentOS, use:
yum install perl-core
Caso precise do autoconf
para a compilação, instale com:
apt-get install autoconf
Ou no Red Hat:
yum install autoconf
Execute o código abaixo:
ZNAPVER=0.23.2
wget https://github.com/oetiker/znapzend/releases/download/v${ZNAPVER}/znapzend-${ZNAPVER}.tar.gz
tar zxvf znapzend-${ZNAPVER}.tar.gz
cd znapzend-${ZNAPVER}
### ./bootstrap.sh
./configure --prefix=/opt/znapzend-${ZNAPVER}
Fique atendo em “ZNAPVER=0.23.2” para alterar para a devida versão a ser instalada.
Execute agora:
/usr/bin/gmake install
Os executáveis ficam agora dentro de:
/opt/znapzend-0.23.2/bin
Tabela com exemplos resumidos
Comando | Descrição | Exemplo de Aplicação |
---|---|---|
znapzendzetup createznapzendzetup create --recursive --pre-snap-command="..." --post-snap-command="..." SRC '7d=>1h,30d=>4h,90d=>1d' DST:'7d=>1h,30d=>4h,90d=>1d' | Cria uma configuração de backup, incluindo comandos de pré e pós-snapshot e destinos de backup. | Usado para configurar backups automáticos de um diretório importante. Exemplo: Backup diário de arquivos de usuários, com retenção de 7 dias de backups a cada 1 hora. |
znapzend –noactionznapzend --noaction | Executa o ZnapZend sem realizar ações, apenas simula os comandos. | Antes de configurar um novo backup, usa-se o comando --noaction para simular o que o backup faria sem realmente executar, garantindo que os parâmetros estão corretos. |
znapzend –debugznapzend --debug | Executa o ZnapZend com informações de debug, útil para solucionar problemas. | Ao encontrar erros em backups, utilizar o --debug para entender se o problema está na configuração ou em algum outro ponto do processo de backup. |
znapzend –daemonizeznapzend --daemonize | Inicia o ZnapZend em segundo plano, para execução contínua dos backups. | Quando você quer que o backup seja executado periodicamente, sem precisar de intervenção manual, execute o ZnapZend em segundo plano. |
znapzend –runonceznapzend --runonce | Executa uma única vez o processo de backup de um dataset, sem aguardar o agendamento. | Após uma alteração importante nos dados ou no sistema, executa-se --runonce para garantir que o backup seja feito imediatamente. |
znapzend –listznapzend --list | Lista as configurações atuais de backup do ZnapZend. | Usado para verificar se todas as configurações de backup estão corretamente definidas e ativas. Exemplo: Verificar se o backup do diretório /home está configurado. |
znapzendzetup editznapzendzetup edit | Permite editar a configuração de backup existente. | Caso seja necessário alterar o agendamento de backups ou modificar destinos, usa-se esse comando para editar configurações de backup previamente definidas. |
znapzend –checkznapzend --check | Verifica a integridade da configuração do ZnapZend e das operações de backup. | Para verificar se todos os backups configurados estão em bom estado de funcionamento, sem erros ou configurações incorretas. |
znapzend –statusznapzend --status | Exibe o status atual do ZnapZend, incluindo informações sobre o andamento dos backups e suas configurações. | Quando o backup está em andamento, esse comando pode ser usado para monitorar o status do processo. Exemplo: Verificar se o backup programado de /var está em execução. |
znapzendzetup listznapzendzetup list | Lista todas as configurações de backup definidas no ZnapZend, mostrando os datasets de origem e destino. | Usado para revisar rapidamente todos os backups configurados, verificando as fontes e destinos de cada um. |
znapzend –clearznapzend --clear | Limpa configurações e snapshots antigos, pode ser útil para liberar espaço ou reiniciar o processo de backup. | Após concluir um ciclo de backup e desejar remover backups antigos para liberar espaço, utiliza-se o --clear . |
znapzend –stopznapzend --stop | Interrompe o daemon do ZnapZend, interrompendo os backups programados e agendados. | Usado quando é necessário parar todos os backups programados temporariamente, como durante uma manutenção ou atualização do sistema. |
znapzend –removeznapzend --remove <dataset> | Remove uma configuração de backup de um dataset específico, apagando snapshots e a configuração associada. | Caso decida parar de fazer backup de um diretório ou dataset, pode-se usar esse comando para remover a configuração de backup de forma segura. |
znapzend –pruneznapzend --prune <dataset> | Realiza a poda de snapshots antigos conforme a política de retenção configurada. | Após um período de retenção, usa-se o --prune para limpar snapshots antigos, mantendo somente aqueles que atendem à política de retenção configurada. |
- Configurando backup com retenção definida:
- Comando:
znapzendzetup create --recursive SRC '7d=>1h,30d=>4h,90d=>1d' DST:'7d=>1h,30d=>4h,90d=>1d'
- Exemplo de aplicação:
Esse comando é usado para configurar um backup diário de todos os dados críticos em um servidor, com retenção de 7 dias de backups a cada 1 hora, 30 dias a cada 4 horas e 90 dias a cada 1 dia. Isso permite ter múltiplas versões dos dados com diferentes períodos de retenção.
- Comando:
- Verificando o status dos backups:
- Comando:
znapzend --status
- Exemplo de aplicação:
Após configurar o backup automático, esse comando é usado para verificar se o processo de backup está funcionando corretamente e se há falhas nos agendamentos de snapshots.
- Comando:
- Executando um backup manualmente:
- Comando:
znapzend --runonce
- Exemplo de aplicação:
Após uma atualização de sistema crítica, você pode querer realizar um backup imediato dos dados antes de reiniciar ou fazer qualquer outra alteração. O--runonce
executa o backup na hora.
- Comando:
- Excluindo configurações e snapshots antigos:
- Comando:
znapzend --clear
- Exemplo de aplicação:
Após uma série de backups bem-sucedidos, você pode querer limpar os snapshots mais antigos para liberar espaço no servidor. O comando--clear
ajuda a remover esses dados antigos de forma automatizada.
- Comando:
- Editando configurações de backup:
- Comando:
znapzendzetup edit
- Exemplo de aplicação:
Se for necessário ajustar a frequência de backups, como aumentar a retenção ou alterar o destino, você pode editar as configurações previamente definidas utilizando o--edit
.
- Comando:
Mais Exemplos de Uso
Exemplo Simples: Backup Local de Diretório com ZnapZend
Vamos criar um backup simples, onde você faz um snapshot de um dataset e o envia para outro local dentro do mesmo sistema (backup local).
Cenário:
Você tem um dataset chamado tank/home
e deseja fazer backups diários para um diretório de backup chamado tank/backup
.
Comando para configurar o backup simples:
znapzendzetup create --recursive --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 '7d=>1h,30d=>4h,90d=>1d'
Explicação:
--recursive
: Faz com que a configuração seja aplicada recursivamente a todos os datasets filhos detank/home
.SRC
: O dataset de origem, que é o local dos dados que serão copiados. Neste caso, étank/home
.DST
: O local de destino, onde o backup será armazenado. Neste exemplo, ele será armazenado no diretóriotank/backup
.'7d=>1h,30d=>4h,90d=>1d'
: Definições de retenção para o backup. Fazendo o backup de:- 7 dias: Um snapshot a cada 1 hora.
- 30 dias: Um snapshot a cada 4 horas.
- 90 dias: Um snapshot a cada 1 dia.
Este comando cria backups automáticos, mantendo um snapshot por hora nos últimos 7 dias, por 4 horas nos últimos 30 dias, e por 1 dia nos últimos 90 dias.
Outros Exemplos Remoto com Retenção Customizada
Agora, vamos configurar um backup mais avançado. Neste caso, vamos criar um backup remoto, enviando snapshots para um servidor remoto via SSH, e configurando regras de retenção mais complexas, que incluem retenção de snapshots de diferentes períodos de tempo.
Cenário:
- O dataset de origem é
tank/home
. - O backup será enviado para o servidor remoto
root@bserv:backup/home
. - As regras de retenção são mais complexas e incluem snapshots a cada 1 hora, 4 horas, 1 dia, 1 semana, 1 mês e 1 ano.
Comando para configurar o backup remoto com retenção customizada:
znapzendzetup create --recursive --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,1y=>1w,10y=>1month' tank/home DST:a '7d=>1h,30d=>4h,90d=>1d,1y=>1w,10y=>1month' root@bserv:backup/home
Explicação:
--recursive
: Aplica a configuração recursivamente a todos os datasets dentro detank/home
.SRC
: O dataset de origem (tank/home
).DST:a
: O destino remoto (root@bserv:backup/home
), ondea
indica que você está usando o ZnapZend para transferir os snapshots via SSH.- Retenção no
SRC
eDST
:- 7 dias: Um snapshot a cada 1 hora.
- 30 dias: Um snapshot a cada 4 horas.
- 90 dias: Um snapshot a cada 1 dia.
- 1 ano: Um snapshot a cada semana.
- 10 anos: Um snapshot por mês.
Este comando configura backups automáticos, transferindo snapshots para o servidor remoto. A retenção é mantida de maneira detalhada para garantir backups frequentes nos primeiros dias, enquanto mantém backups mais espaçados para períodos mais longos.
Exemplo Avançado: Backup com Execução de Comandos Customizados
Agora, vamos adicionar comandos customizados para bloqueio e desbloqueio do banco de dados antes e depois da criação do snapshot, além de configurar um backup remoto com parâmetros mais específicos.
Cenário:
- O dataset de origem é
tank/web
. - O destino do backup é remoto, em
root@backupserver:/mnt/backup/web
. - Antes do snapshot, um script é executado para bloquear o banco de dados (
lock_flush_db.sh
), e depois o banco é desbloqueado (unlock_db.sh
). - A retenção será configurada para backups frequentes nos primeiros dias e mais espaçados após 30 dias.
Comando para configurar backup avançado com execução de scripts:
znapzendzetup create --recursive --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,1y=>1w,10y=>1month' tank/web DST '7d=>1h,30d=>4h,90d=>1d,1y=>1w,10y=>1month' root@backupserver:/mnt/backup/web
Explicação:
--pre-snap-command="/bin/sh /usr/local/bin/lock_flush_db.sh"
: Este comando será executado antes da criação do snapshot para bloquear o banco de dados ou realizar qualquer operação necessária.--post-snap-command="/bin/sh /usr/local/bin/unlock_db.sh"
: Após o snapshot ser criado, este comando será executado para desbloquear o banco de dados ou finalizar o processo de backup.SRC
eDST
: Definem a origem e o destino, assim como as políticas de retenção de snapshots.- Retenção:
- 7 dias: Um snapshot a cada 1 hora.
- 30 dias: Um snapshot a cada 4 horas.
- 90 dias: Um snapshot a cada 1 dia.
- 1 ano: Um snapshot a cada semana.
- 10 anos: Um snapshot por mês.
Este exemplo inclui a execução de scripts antes e depois dos snapshots para garantir que as operações no banco de dados sejam realizadas com segurança durante o backup. Além disso, o backup é enviado para o servidor remoto backupserver
, no diretório /mnt/backup/web
.