Via Cà Matta 2 - Peschiera Borromeo (MI)
+39 02 00704272
info@synaptica.info

Backup di Virtual Web Server

Backup di Virtual Web Server

Di questi tempi si parla tanto di virtualizzazione, in particolar modo applicata ai server, così che anche io ho deciso di utilizzare tale tecnologia per l’installazione di un web server.
La configurazione scelta è la seguente:

* Installazione di UBUNTU Server 9.10 minimale come HOST con installazione di VMWARE Server
* Installazione di una macchina virtuale UBUNTU Server 9.10 che chiameremo (IN) in quanto non esposta sul WEB la cui funzione è quella di ospitare i vari database che rimangono per così dire protetti
* Installazione di una macchina virtuale UBUNTU Server 9.10 che chiameremo (OUT) in quanto esposta sul WEB e che ospiterà  i vari servizi WEB

Di seguito cercherò descrivere la procedura da me scelta, per effettuare un backup completo del server; sicuramente esistono metodologie
molto più complesse, efficaci e costose, il merito della procedura da me scelta è il bassissimo costo.

Le operazioni principale sono:

1) Shutdown delle VM
2) Tar delle VM
3) Copia dei TAR su HD esterno con rotazione delle copie di una settimana
4) Allineamento delle VM su di un secondo Web Server
5) Restart delle VM

Provo a descrivere nel dettaglio ogni punto:

Tutte le operazioni sono eseguite da un paio di shell script schedulati per essere eseguiti ogni notte.
Cominciamo con il punto 1, di seguito riporto le istruzioni per lo shutdown delle VM:

vmrun -T server -h https://localhost:8333/sdk -u root -p “password” stop “[standard] serverwebin/Ubuntu.vmx”
vmrun -T server -h https://localhost:8333/sdk -u root -p “password” stop “[standard] serverwebout/Ubuntu.vmx”

Nel punto 2 vengono creati i TAR compressi delle VM impostando la data nel nome del file:

tar czvf /root/backup/vmbackup_date +%d%m%Y.tgz /var/lib/vmware/Virtual\ Machines/

Nel punto 3 viene effettuata la copia del TAR su HD esterno, in particolare le istruzioni che seguono descrivono:

1) inizializzazione dell’hd esterno da parte del sistema operativo
2) copia del TAR compresso sul disco esterno
3) cancellazione del TAR copiato dal disco locale
4) cancellazione dal disco esterno del TAR compresso più vecchio di una settimana
5) disattivazione del disco esterno da parte del sistema operativo

mount /dev/sdc1 /media/hdext
cp /root/backup/vmbackup_date +%d%m%Y.tgz /media/hdext
rm -f /root/backup/vmbackup_date +%d%m%Y.tgz
rm /media/hdext/vmbackup_date -d '7 day ago' +%d%m%Y.tgz
umount /media/hdext

A questo punto la copia delle macchine virtuali è completata occorre quindi riattivarle. L’operazione potrebbe essere eseguita dallo stesso script descritto
precedentemente, tuttavia per il fatto che la mia procedura prevede che le macchine virtuali vengano copiate anche su un secondo server di backup, lo startup dovrà  essere effettuato in un secondo momento.

Nella quarta fase della procedura un secondo server di backup effettua una copia delle macchine virtuali prelevandole dal server principale tramire RSYNC.
Di seguito riporto le istruzioni per la copia RSYNC:

DEST=”/var/lib/vmware/”
rsync -avz –exclude-from=/root/scripts/rsync-exclude –delete xxx.xxx.xxx.xxx::var/var/lib/vmware/Virtual\ Machines $DEST

Al termine della sincronizzazione delle macchine virtuali tramite RSYNC il server secondario effettua lo startup delle stesse sul server principale. Di seguito riporto le istruzioni necessarie:

vmrun -T server -h https://xxx.xxx.xxx.xxx:8333/sdk -u root -p “password” start “[standard] serverwebin/Ubuntu.vmx”
vmrun -T server -h https://xxx.xxx.xxx.xxx:8333/sdk -u root -p “password” start “[standard] serverwebout/Ubuntu.vmx”

L’indirizzo IP è ovviamente quello del server principale.

E’ possibile che il server secondario abbia un qualsiasi problema durante la sincronizzazione delle VM, questo potrebbe impedire lo startup delle stesse sul server principale, per evitare
di avere il server web inattivo, ho deciso di replicare e schedulare lo startup delle VM anche sul server principale in un orario in cui sicuramente la sincronizzazione è già  terminata, se le macchine
sono già  attive, l’istruzione, semplicemente non viene eseguita.

Rimane solo da schedulare i vari scripts tramite crontab.

Alla prossima

Tags: , , , ,

Una risposta.

  1. Riccardo ha detto:

    Molto bello e utile questo articolo!!!

    Un unica osservazione, per il delete dei file vecchi io preferisco una roba del tipo
    find . -mtime -7 -exec rm {}
    che cancella tutti i file più vecchi di 7 giorni (metti che per caso la procedura si interrompe a metà …)

I commenti sono chiusi.