Conselho de backup do ZFS com outro servidor

1

Atualmente, tenho dois servidores com o mesmo hardware, discos, etc.

Um servidor (server1) será o servidor "principal". É basicamente um servidor com raidz2 que possui compartilhamentos SMB nos quais as pessoas se conectam.

O outro servidor (server2) é configurado da mesma forma que server1 (raidz2), mas deve ser apenas para fazer backup do server1. É para ser um backup externo no caso de perdermos server1 de falha de disco, fogo, danos causados pela água, etc.

Estou tentando descobrir a melhor maneira de fazer os backups para o server2.

No começo, eu estava pensando em algo como rsync. Isso é trivial para configurar em um cron, e eu posso fazer isso uma vez por semana.

Alternativamente, eu estava pensando em algo com zfs send / recv. Meu entendimento é que o ZFS pode fazer "snapshots", então achei que seria ótimo se eu pudesse criar snapshots / backups incrementais sem perder muito espaço. Eu sinto que isso pode ser mais difícil de implementar / propenso a erros.

Existem outras alternativas?

Como eu disse antes, ambos os servidores são configurados da mesma forma em termos de hardware e layout raidz2. O que todos vocês recomendariam para minha situação atual? Agradecemos antecipadamente.

    
por Robert Goulet 23.12.2014 / 22:26

1 resposta

3

Eu usaria envio / recebimento incremental do ZFS. Ele deve ser mais eficiente do que rsync , pois o ZFS sabe o que foi alterado desde o instantâneo anterior sem precisar explorar todo o sistema de arquivos.

Supondo que você deseja fazer backup completo de um nome de sistema de arquivos datapool/fs .

Primeiro, você cria um pool para armazenar seu backup no servidor de destino e um instantâneo recursivo no pool de origem:

dest # zpool create datapool ...
source # zfs snapshot -r datapool/fs@snap1

você envia os dados completos como um backup inicial:

source # zfs send -R datapool/fs@snap1 | ssh dest zfs receive datapool/fs

Na próxima semana (ou em qualquer período que você desejar), crie um segundo instantâneo no pool de origem e envie-o incrementalmente no destino. Naquela época, o ZFS é inteligente o suficiente para enviar apenas o que foi alterado durante a semana (arquivos excluídos, criados e modificados). Quando um arquivo é modificado, ele não é enviado como um todo, mas somente os blocos modificados são transmitidos e atualizados.

source # zfs snapshot -r datapool/fs@snap2
source # zfs send -ri snap1 datapool/fs@snap2 | 
            ssh dest zfs receive -F datapool/fs

Repita a operação incrementando os números dos instantâneos sempre que fizer backup.

Remova os instantâneos antigos não utilizados nos servidores quando você não precisar mais deles.

Se você tiver restrições de largura de banda, poderá compactar / descompactar dados rapidamente, por exemplo, inserindo comandos gzip / zip no pipeline ou ativando a compactação ssh.

source # zfs send -ri snap1 datapool/fs@snap2 | gzip | 
            ssh dest "gunzip | zfs receive -F datapool/fs"

Você também pode aproveitar mbuffer para obter um uso de largura de banda mais estável, conforme descrito neste página :

dest # mbuffer -s 128k -m 1G -I 9090 | zfs receive datapool/fs

source # zfs send -i snap2 datapool/fs@snap3 | 
            mbuffer -s 128k -m 1G -O w.x.y.z:9090

Observação: o sinalizador zfs -r não está disponível para implementações não ZFS do Solaris, consulte link . Nesse caso, não use o sinalizador -F no destino, mas em vez disso, reverta explicitamente os conjuntos de dados. Se novos conjuntos de dados tiverem sido criados na origem, envie-os primeiro de forma independente antes de fazer o snapshot + envio / recebimento incremental.

É claro que, se você tiver apenas um sistema de arquivos para backup sem uma hierarquia de conjunto de dados subjacente ou se desejar executar backups independentes, o backup incremental será mais simples de implementar e deverá funcionar de forma idêntica em qualquer implementação do ZFS:

T0:

zfs snapshot datapool/fs@snap1
zfs send datapool/fs@snap1 | ssh dest zfs receive datapool/fs

T1:

zfs snapshot datapool/fs@snap2
zfs send -i snap1 datapool/fs@snap2 | 
            ssh dest zfs receive -F datapool/fs
    
por 23.12.2014 / 22:59