Como é possível fazer backup externo / incremental de pools do zfs externamente?
Eu reconheço que o send/receive
over ssh é um método, no entanto, que envolve a necessidade de gerenciar snapshots manualmente.
Existem algumas ferramentas que encontrei, no entanto, a maioria não é mais suportada.
A única ferramenta que parece promissora é https://github.com/jimsalterjrs/sanoid, no entanto, estou preocupado que uma ferramenta não conhecida possa causar mais mal do que bem, pois pode danificar / excluir dados.
Como são realizados os backups contínuos / incrementais do zfs?
Respostas:
O ZFS é um sistema de arquivos incrível e resolve muitas das minhas necessidades de armazenamento de dados locais e compartilhados.
Embora eu goste da ideia de ZFS em cluster sempre que possível, às vezes não é prático ou preciso de uma separação geográfica dos nós de armazenamento.
Um dos casos de uso que tenho é para armazenamento replicado de alto desempenho em servidores de aplicativos Linux. Por exemplo, eu apoio um produto de software legado que se beneficia das unidades SSD NVMe de baixa latência para seus dados. O aplicativo possui uma opção de espelhamento no nível do aplicativo que pode ser replicada em um servidor secundário, mas geralmente é imprecisa e é um RPO de 10 minutos .
Resolvi esse problema com um servidor secundário (também executando o ZFS em hardware semelhante ou diferente) que pode ser local, remoto ou ambos. Ao combinar os três utilitários detalhados abaixo, criei uma solução de replicação que me oferece replicação contínua, retenção profunda de instantâneos e opções flexíveis de failover.
zfs-auto-snapshot - https://github.com/zfsonlinux/zfs-auto-snapshot
Apenas uma ferramenta útil para habilitar instantâneos periódicos no nível do sistema de arquivos ZFS. Normalmente, eu executo o seguinte cronograma nos volumes de produção:
Syncoid (Sanoid) - https://github.com/jimsalterjrs/sanoid
Este programa pode executar snap / replicação ad-hoc de um sistema de arquivos ZFS para um destino secundário. Eu uso apenas a parte syncoid do produto.
Supondo server1 e server2 , um comando simples é executado no server2 para extrair dados do server1 :
Monit - https://mmonit.com/monit/
O Monit é um agendador de tarefas e um gerenciador de execução extremamente flexíveis. Por padrão, ele funciona em um intervalo de 30 segundos, mas modifico a configuração para usar um ciclo de tempo base de 15 segundos.
Um exemplo de configuração que executa o script de replicação acima a cada 15 segundos (1 ciclo)
Isso é simples de automatizar e adicionar via gerenciamento de configuração. Ao envolver a execução do instantâneo / replicação no Monit, você obtém status centralizado, controle de tarefas e alertas (email, SNMP, script personalizado).
O resultado é que tenho servidores com vários meses de instantâneos mensais e muitos pontos de reversão e retenção em: https://pastebin.com/zuNzgi0G - Além disso, uma réplica atômica contínua de 15 segundos:
# monit status
fonte
Você tem duas maneiras diferentes de fazer isso:
rsync
ouBacula
. Lá você testou e (esperançosamente) software grande e estável, que pode ser personalizado para grandes implantações e pode ser usado mesmo que você se afaste do ZFSsend/recv
. Essa pode ser sua própria solução, um script ou um script estendido de vários no Github et al., Ou mais ferramentas ricas em recursos como Sanoid ou ZnapZend (envie / recupere com suporte a mbuffer e planos de retenção). Nesse caso, é provável que você não encontre grandes soluções "corporativas" (no sentido negativo), mas ferramentas que executam apenas a tarefa única e podem ser combinadas com outras ferramentas para atender à sua configuração específica.Em geral, eu confiava apenas em uma ferramenta cujo código-fonte está disponível e a mantinha o mais simples possível. Se estiver usando
send/recv
, você não precisa gerenciar muito, basta excluir o instantâneo n-1 no lado local quando a transmissão e o estabelecimento do instantâneo n no lado remoto foram bem-sucedidos.Você pode dividir seu transporte da maneira que desejar, podendo até ser assíncrono (os instantâneos não precisam ser recebidos imediatamente), se você apenas mantiver a regra de ferro de que você só pode enviar uma diferença entre o instantâneo atual atual / novo e o local anterior , e que o instantâneo anterior local seja o mais recente no lado remoto (até que o backup termine e tudo seja redefinido).
Agora que penso nisso, você provavelmente pode codificar isso em uma máquina de estado e, em seguida, ter certeza de que nenhum caso imprevisto possa passar despercebido.
fonte
rsync
solução baseada em escala seria dimensionada para replicar continuamente um grande sistema de arquivos em escala corporativa. As mudanças podem acontecer mais rapidamente do quersync
poderiam descobri-las.