ateapick

Backup incrementali su Amazon Simple Storage Service (Amazon S3)

In Informatica il backup dei dati è una buona abitudine da adottare in ambito domestico ed una pratica che diventa assolutamente doverosa quando si passa alla sfera professionale.

Per le nostre applicazioni web abbiamo scelto una soluzione che prevede il backup giornaliero sui Server di Amazon attraverso il servizio denominato Amazon Simple Storage Service o, più semplicemente, Amazon S3.

L’iscrizione al servizio è gratuita e prevede un costo a consumo molto basso a fronte di un’elevata affidabilità.

La scelta di effettuare i backup su server remoti presenta indubbi vantaggi in termini di sicurezza ma ha un’inevitabile controindicazione legata alla lentezza con cui avvengono i processi di copia, soprattutto per grandi quantità di dati. Per ottimizzare le prestazioni (e i costi) effettuiamo backup incrementali, attraverso la sincronizzazione dei dati tra lo storage locale e lo storage remoto.

La scelta del protocollo di sincronizzazione è ricaduta sull’ottimo rsync che, affiancato a s3fs, permette in pochi minuti di configurare il proprio server linux e dormire sonni tranquilli :)

Configurazione del backup

Supponiamo di voler configurare il backup del database e dei dati dell’applicazione myapp secondo il seguente scenario:

  • i dati risiedono nella directory /var/apps/myapp
  • il database (mysql) si chiama myapp_db
  • avete creato una directory per il backup locale in /var/backups/myapp
  • il vostro userid Amazon è s3uid
  • la vostra password Amazon è s3pwd
  • avete creato il bucket myapp_bucket su Amazon
  • avete creato la directory /mnt/s3 dove verrà montato il bucket

L’idea è quella di sincronizzare i dati ed effettuare il dump del database nella diretory di backup locale, montare il bucket tramite s3fs ed effettuare la sincronizzazione tra /var/backup/myapp e /mnt/s3 tramite rsync.

Il passaggio di sincronizzazione intermedio è utile per minimizzare il tempo di inattività di myapp che dovrà essere opportunamente sospesa durante la prima fase di backup (locale) onde evitare incongruenze sul database.

Creazione dello script

Sulla base dello scenario che abbiamo preso come esempio, lo script di sincronizzazione sarà del tipo seguente:

#!/bin/bash
sospendi myapp
rsync -avzO —delete /var/apps/myapp /var/backups/myapp
mysqldump —user=xxx —password=xxx myapp_db > /var/backups/myapp/dump.sql
riattiva myapp
s3fs myapp_bucket -o accessKeyId=s3uid -o secretAccessKey=s3pwd /mnt/s3
rsync -avzO —delete /var/backups/myapp /mnt/s3
umount /mnt/s3

A questo punto basta automatizzare lo script mettendolo in crontab e il gioco è fatto. Ricordatevi di controllare la correttezza dei permessi su tutti i file e le directory.

I commenti per questo articolo sono stati chiusi.