Qual é a maneira mais rápida de fazer backups diários de 500k + arquivos?

4

Temos um aplicativo que gerou até agora mais de 540 mil imagens. As imagens são mantidas em uma estrutura de árvore que está usando 5 milhões de Inodes até o momento.

Gostaríamos de fazer backup dos dados diariamente em um servidor externo remoto. Pensamos em usar o rsync, mas não temos certeza se será o caminho mais rápido.

Vocês têm alguma recomendação para uma estratégia de backup eficiente?

    
por raullarion 01.02.2018 / 07:51

1 resposta

2

Cara, demora muito tempo para escanear 5.000.000 inodes todos os dias para encontrar arquivos que mudaram!

E se houvesse uma maneira de fazer backup somente das alterações desde o último backup?

Bem, você pode… com instantâneos !

O maior obstáculo para os instantâneos é mudar para um sistema de arquivos que os suporte.

No Linux, dois sistemas de arquivos de snapshot conhecidos são:

  • Btrfs - Projetado para Linux, menos testado em batalha
  • ZFS - Portado para o Linux, há mais tempo
Ambos são sistemas de arquivos copy-on-write. O que isso praticamente significa para você é que eles acompanham as alterações desde o último instantâneo, de modo que, quando você envia o instantâneo mais recente para o servidor de backup, apenas as alterações são enviadas, mas ainda assim você tem uma cópia completa de todos os backups diários que você decidir manter.

Isso significa que, como bônus, você tem o potencial de manter mais de um dia de backups por não muito espaço extra (apenas o espaço em disco usado pelas alterações todos os dias) e pode excluir os backups de maneira flexível, mantendo semanalmente backups, mensais ou anuais, como você deseja.

Backups Incrementais do Btrfs

Este é um exemplo de comandos que você pode executar para fazer backups incrementais e enviá-los para o servidor de backup:

# Make a snapshot
btrfs subvolume snapshot -r /app/data /backup/app-data-$(date "+%Y%m%dT%H%M%S%Z")

# Ensure the snapshot is saved
sync

# Find your latest snapshot, referred to as '/backup/app-data-THIS_BACKUP_TIMESTAMP' below
ls -lhtr /backup/

# Send the snapshot since the previous snapshot to the backup server
btrfs send -p /backup/app-data-LAST_BACKUP_TIMESTAMP /backup/app-data-THIS_BACKUP_TIMESTAMP | ssh BACKUP_USER@BACKUP_SERVER "btrfs receive /backup/app-data"

Nota: Exclua -p /backup/app-data-LAST_BACKUP_TIMESTAMP do último comando se este for o primeiro backup.

Backups Incrementais do ZFS

Este é um exemplo de comandos que você pode executar para fazer backups incrementais e enviá-los para o servidor de backup:

# Create a snapshot of the "data" dataset in your "app-pool" zpool
zfs snapshot app-pool/data@$(date "+%Y%m%dT%H%M%S%Z")

# Find your latest snapshot, referred to as 'app-pool/data@THIS_BACKUP_TIMESTAMP' below
zfs list -rt snapshot app-pool/data

# Send the snapshot since the previous snapshot to the backup server
zfs send -i app-pool/data@LAST_BACKUP_TIMESTAMP app-pool/data@THIS_BACKUP_TIMESTAMP | ssh BACKUP_USER@BACKUP_SERVER "zfs receive backup-pool/app-data"

Nota: Exclua -i app-pool/data@LAST_BACKUP_TIMESTAMP do último comando se este for o primeiro backup.

    
por 01.02.2018 / 09:54