Así como surgen las cosas en la vida… tuve la necesidad de hacer un respaldo completo de las máquinas virtuales de mi servidor con VMWare ESXI 5.X. Una tarea que deberé repetir cada semana.
Primero pensé en Veeam, la aplicación de los que todos los «VMWare guys» habla. Si si, es gratis… pero mi ESXI también y eso dificultó las cosas. ESXI free no permite que aplicaciones de tercero usen las apis nativas; así que me tuve que arremangar y encontrar otra solución a mi problema.
Así encontré esta aplicación que tiene todas las funciones pero no todas me dejaban contento. XSIBackup hace todo por vos, backupea en caliente y lo manda dónde quieras pero no siempre funciona, envía emails configurando los parámetros de tu smtp en la línea de comandos y hasta te cocina unas salchichas mientras esperas los backups(bueno… eso último no lo hace :-(). Como seguí infeliz con esta app… cree mi propio script para automatizar esta tarea.
- Primero a instalar la app: http://33hops.com/xsibackup-vmware-esxi-backup.html y hacerla funcionar!.
- Definiremos como 192.168.1.1 el VMWare ESXI de producción y 192.168.1.2 el ESXI de backup (dónde las virtuales deberán estar listas para arrancar con un click!)
- Resolví que usaré xsibackup sólo para realizar el backup en caliente y nada más.
- La parte de envío al equipo remoto la haré con scp a través de ssh y así empecé a jugar.
XSIbackup, instalación:
[pastacode lang=»bash» message=»Instalación de XSIBACKUP» highlight=»» provider=»manual»]
#Creamos un directorio temporal para nuestra app
mkdir /temp/
cd /temp/
#Descargamos la app con el comando recomendado en la web
wget http://33hops.com/downloads/xsibackup.zip -O xsibackup.zip && unzip -o xsibackup.zip && chmod 0700 xsibackup*
#Hacemos el comando accesible desde todos lados.
cp xsibackup* /usr/bin/
chmod +x /usr/bin/xsibackup*
[/pastacode]
El backup se hará en un equipo remoto en el momento más propicio, es necesario que jamás nos pida una password, para eso copiaremos nuestro certificado de seguridad en el equipo remoto para entrar a este sin autenticación.
[pastacode lang=»bash» message=»Ganando acceso al equipo remoto» highlight=»» provider=»manual»]
#Hacemos accesibles los comandos que necesitamos
cd /usr/bin/
ln -s /usr/lib/vmware/openssh/bin/ssh-keygen
#Acceso remoto
#Generamos Certificado de Seguridad (Archivo de Identidad del equipo)
ssh-keygen -t dsa
#Nos pedira una Passphrase que tranquilamente podemos ignorar con [enter][enter]
#Copiamos el certificado al equipo que almacenará los backups de ESXI
scp //.ssh/id_dsa.pub root@192.168.1.2:/etc/ssh/keys-root/authorized_keys
[/pastacode]
Preparando el terreno para nuestro script
[pastacode lang=»bash» message=»Generamos nuestro script» highlight=»» provider=»manual»]
#Creamos el directorio para nuestro script
mkdir /backup/
#Creamos el script
vi /backup/backup.sh
[/pastacode]
Nuestro Script!
[pastacode lang=»bash» message=»backup.sh» highlight=»» provider=»manual»]
#!/bin/bash
#Separemos los logs para que humanos puedan leerlo
echo "-----------------------------" >>backup.log
#Cuándo empezo el laburo?.
echo "Inicio Backup" >>backup.log
date >>backup.log
#Comienzo el backup de las máquinas virtuales
xsibackup --backup-point=/vmfs/volumes/datastore1/backup --backup-type=custom --backup-vms="oracle,DHCP-Server"
#Desregistro las máquinas virtuales del host remoto... por si las moscas!
ssh root@192.168.1.2 'vim-cmd vmsvc/unregister /vmfs/volumes/datastore1/oracle/oracle.vmx'
ssh root@192.168.1.2 'vim-cmd vmsvc/unregister /vmfs/volumes/datastore1/DHCP-Server/DHCP_Server.vmx'
#Envio las copias de mis virtuales al ESXI de backup
scp -r /vmfs/volumes/datastore1/backup/* root@192.168.1.2:/vmfs/volumes/datastore1/
#Registro las máquinas virtuales en el host remoto preparándome para lo peor
ssh root@192.168.1.2 'vim-cmd solo/register /vmfs/volumes/datastore1/oracle/oracle.vmx'
ssh root@192.168.1.2 'vim-cmd solo/register /vmfs/volumes/datastore1/DHCP-Server/DHCP-Server.vmx'
#Elimino mis copias locales, ya están a salvo ;-)
rm -R /vmfs/volumes/datastore1/backup/
#Genero nuevamente el directorio de backups para repetirme mañana
mkdir /vmfs/volumes/datastore1/backup/
#Cuándo termino el backup?
echo "Backup Completo" >>backup.log
date >>backup.log
#Finnish!!
[/pastacode]
Y ahora…. Tenemos que asegurarnos que todos los domingos a las 00hs corra el script.
[pastacode lang=»bash» message=»Programando el cron en ESXI» highlight=»» provider=»manual»]
#Matamos el cron para programarlo como queramos.
cat /var/run/crond.pid
#Nos dirá un id de proceso que yo reemplazo por xxxxxx
pid: xxxxxx
Kill xxxxxx
vi /var/spool/cron/crontabs/root
#contenido del crontab
1 1 * * * /sbin/tmpwatch.py
1 * * * * /sbin/auto-backup.sh
0 * * * * /usr/lib/vmware/vmksummary/log-heartbeat.py
*/5 * * * * /sbin/hostd-probe ++group=host/vim/vmvisor/hostd-probe
#Agregamos esta línea con el Cron backup a las 00hs todos los domingos.
* 0 * 6 sh /backup/backup.sh
[/pastacode]
Ahora ejecutamos el script por primera vez (#sh /backup/backup.sh), abrimos una sesión de VSphere en el servidor de backups de VMWare y miramos como las máquinas virtuales van apareciendo registradas en el árbol del servidor, listas para funcionar en cuantito todo falle!. 😉