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
Una risposta.
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.