Backup de Máquinas Virtuais Xen

Em relação às máquinas virtuais, continuo adepto da estratégia: instalação um cliente  do “Bacula” em cada uma das máquinas virtuais – ou seja: trate elas como se fossem máquinas dedicadas (físicas).

A questão aqui, novamente, reside no “backup” dos arquivos que correspondem às máquinas virtuais em si (para fins de disaster recovery), que aparentemente não podem ser diretamente “backupeados” com a máquina virtual em execução.

Assim, pesquisamos alguns métodos utilizados:

1. Pausar a Máquina Virtual Xen para a cópia dos arquivos:

A desvantagem desse processo é óbvia: a indisponibilidade temporária da máquina virtual. Se isso não é um problema, estes seriam os procedimentos:

1. Pausar o “domU” utilizando o comando “xm pause” (script RunBeforeJob do “Bacula”)
2. Sincronize o “domU” utilizando o comando “xm sysrq” (num segundo script “RunBeforeJob”)
3. Faça o “backup” das configurações do Xen e do arquivo correspondentes à máquina virtual.
4. Despause o “domU” através do comando “xm unpause”

Este “backup completo” da máquina virtual pode ser executado numa peridiocidade menor (Ex.: semanalmente ou mensalmente).

Fonte: [http://lists.xensource.com/archives/html/xen-users/2006-10/msg00476.html]

2. Clone da Máquina Virtual (recomendado)

Elabore um script para copiar cada uma das máquinas para um determinado ponto de montagem ou disco com espaço suficiente:

xe vm-export vm="Heitor Server" filename=/var/backup/heitor.xva

O Bacula deverá estar configurado para realizar backup da pasta /var/backup
Uma maneira mais avançada e que não requer espaço intermediário em disco seria a utilização de FIFO, explicada no final deste capítulo.

Para restaurar, localize o repositório na qual você deseja restaurar:

run xe sr-list

… E localize o UUID storage onde deseja restaurar e execute o vm-import:

xe vm-import filename=/mnt/backup/thisserver_09_25_2010.xva sr-uuid=28f25ea1-4c49-5346-4a86-d37560bd07b7

3. Criar um Snapshot LVM:

Parece se tratar do método mais popular entre os administradores de Xen. O LVM é utilizado como uma camada intermediária entre a máquina virtual e o disco rígido, permitindo a cópia integral da VM com a mesma em produção.

Para isso, vários scripts estão na Internet (que devem ser chamados pelo “Bacula” com um RunBeforeJob). Gostei bastante desse aqui:

#!/bin/bash
# Backup das VM's do Xen
# Tiago Cruz - tiagocruz@everlinux.com
# Mar/2008
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

VMS=`xm list | awk '{print $1}' | egrep -v '(Name|Domain-0)'`
BACK="_snap"
LOG=/var/log/backup
# Particao root, geralmente a segunda eh swap
ROOT="1"

[ ! -d "/mnt/back" ] &&  mkdir -p /mnt/back
[ ! -d "/dados/backup" ] &&  mkdir -p /dados/backup

for i in $VMS; do
echo "=================================================================" >> $LOG
echo "Backup $i iniciado em `date` com load de `cat /proc/loadavg`" >> $LOG
DEVICE=`grep disk /etc/xen/$i | awk -F "Vol_LVM" '{print $2}' | cut -d / -f 2 | cut -d , -f 1`
echo "Maquina Virtual $i usa $DEVICE como storage device" >> $LOG

lvcreate --snapshot -L 15G -n $i$BACK /dev/Vol_LVM/$DEVICE >> $LOG
[ $? -ne 0 ] && echo "Erro $i: criando LVM $i$BACK" >> $LOG

kpartx -a /dev/mapper/Vol_LVM-$i$BACK >> $LOG
mount /dev/mapper/Vol_LVM-$i$BACK$ROOT /mnt/back/ >> $LOG
[ $? -ne 0 ] && echo "Erro $i: montando $i$BACK$ROOT" >> $LOG

SIZE1=`df -hP /mnt/back/ | awk '{print $3}' | grep -v Used`
SIZE2=`df -hP /mnt/back/ | awk '{print $2}' | grep -v Size`
echo "Backup de /dev/mapper/Vol_LVM-$i$BACK$ROOT - $SIZE1 de $SIZE2 usados" >> $LOG
tar zcf /dados/backup/$i-xen.tar.gz /mnt/back >> $LOG
[ $? -ne 0 ] && echo "Erro $i: criando /dados/backup/$i.tar.gz" >> $LOG

SIZE3=`ls -lh /dados/backup/$i-xen.tar.gz  | awk '{print $5}'`
echo "Criado /dados/backup/$i-xen.tar.gz com $SIZE3" >> $LOG

umount /mnt/back/ >> $LOG
[ $? -ne 0 ] && echo "Erro $i: desmontando $i$BACK" >> $LOG
kpartx -d /dev/mapper/Vol_LVM-$i$BACK >> $LOG
[ $? -ne 0 ] && echo "Erro $i: desmapeando $i$BACK" >> $LOG

echo "Removendo snapshot ja backupeado $i$BACK" >> $LOG
lvremove /dev/Vol_LVM/$i$BACK -f >> $LOG
done



echo "Backup finalizado em `date` com load de `cat /proc/loadavg`" >> $LOG
echo "=================================================================" >> $LOG
echo "=================================================================" >> $LOG

Fonte: [http://everlinux.com/blog/2008/04/03/fazendo-backup-das-suas-vms-do-xen]

Mais uma coisa: você deverá incluir a pasta [/dados/backup/] no “FileSet” do “Bacula”, para fazer a cópia dos arquivos gerados (que são os snapshots da LVM comprimidos em .tar.gz).

Outra coisa: inclua também, no “FileSet” correspondente, os arquivos de configuração do “Xen”.

Última coisa: opcionalmente, crie um “RunAfterJob” para limpar o [/dados/backup], dessa forma desocupando o espaço utilizado pelas LVM.

Fonte: [http://wiki.sepsoftware.com/wiki/index.php/Online_backup_of_virtual_XEN_machines]

Abracetas,

Heitor Faria

Disponível em: pt-brPortuguês

Deixe uma resposta