Backup de bajo coste para PYMEs
La mayoría de nosotros estamos más o menos acostumbrados a oír hablar de soluciones de backup para entornos virtuales, del tipo Veeam Backup & Replicator para VMware o Altaro para Hyper-V, comentada en un post anterior no hace mucho por mi compañero Miguel Ángel Alonso.
Estas soluciones son espectaculares y funcionan de maravilla en general, pero suelen tener un “pequeño” problema asociado, su coste. Como consultor experto en virtualización me tengo que enfrentar a proyectos tanto para grandes empresas como para pequeñas, y en este último caso, cuando llega la parte del backup se suele plantear un problema con el tema de los costes.
En esta ocasión no voy a hacer ningún análisis de ninguna herramienta comercial, sino que he decidido compartir con vosotros un pequeño proyecto personal que estoy llevando a cabo, una solución de backups gratiuta basada en scripts.
Este pequeño grupo de scripts permite realizar backups en caliente de una lista de máquinas virtuales, comprimirlos, almacenar una copia en el datastore local, enviar el backup a un repositorio remoto FTP y enviar una alerta mediante correo electrónico del proceso del backup.
El script está escrito para PowerShell y depende de tener activado el “RemoteTechSupport (SSH)” en nuestro ESXi y por supuesto de un servidor FTP donde almacenar las copias.
La configuración del script se realiza ajustando algunos parámetros dentro del propio script y creando un par de ficheros previos. A continuación, os pongo los pasos necesarios para poder hacer uso del script en vuestra infraestructura:
1. Editar el fichero Crear-VMBackup.ps1 y modificar las siguientes variables:
$PLINK = «C:\bin\PLINK.EXE» #Ubicación del programa Plink.exe usado para la inyección de comandos en el servidor ESXi
$DataStore = «» #Datastore que será usado para almacenar el backup local
$tmpDir = «C:\tmp» #Directorio temporal usado para general los scripts temporales que será inyectados en los comandos plink y ftp
$emailFromDir = «» #Direccion email del remitente
$emailToDir = «» #Dirección email del destinatario
$smtpServer = «» #Servidor SMTP que va a ser usado para enviar el informe final
$smtpUser = «» #Usuario de conexión al servidor de SMTP en caso de que requiera autenticación
$stmpPassword = «» #contraseña para la autenticación con el servidor SMTP, en caso necesario
2. El script trata en todo momento de trabajar de la forma más segura con las credenciales de acceso a los servidores, tanto ESXi como FTP. Para ello hace uso de unos cmdlets creados por Hal Rottemberg que permiten almacenar credenciales encriptadas y en formato xml. Para poder crear estos ficheros tendremos que hacer lo siguiente:
- Importar la librería de autenticación de Hal: PS1> . .\Crear-VMBackup.ps1 El propio script ya hace la importación de la librería de Hal PS1>Export-PSCredential –Path creds.xml Después de esto nos aparecerá una venta pidiendo usuario y contraseña. Estos datos se almacenarán en el fichero creds.xml que hemos especificado y que posteriormente usaremos para ejecutar el script de backup. Este paso hay que hacerlo solo una vez por cada credencial que vayamos a usar y es necesario indicar ficheros diferentes para credenciales distintas.
3. Crear un fichero de texto plano con el listado de máquinas virtuales a las que queremos hacerles el backup. Un nombre de máquina virtual por línea, tal y como aparece en el vSphere Client.
4. Ejecutar el script de backup:
PS1>Crear-VMBackup -VIServer 192.168.1.100 -ServerCred (Import-PSCredential -Path .\esx.enc.xml) -vmlist .\vmlist.txt) -BackupPath «192.168.2.30/backups» -BackupCred (Import-PSCredential -Path .\backup.enc.xml))
En este caso particular los parametros significa:
- VIServer: Servidor ESXi. En nuestro caso 192.168.1.100 (también podemos indicar el nombre dns del servidor)
- ServerCred: Credenciales de acceso al servidor ESXi. En este caso las credenciales se obtienen del fichero esx.enc.xml ubicado en el mismo directorio donde se ejecuta este script.
- BackupPath: Indica tanto el servidor FTP donde se va a almacenar el backup, (192.168.2.30 en nuestro caso) como la ruta dentro del servidor (“backups” en nuestro caso)
- BackupCred: Credenciales de acceso al servidor FTP donde se va almacenar el backup. En este caso se obtienen del fichero backup.enc.xml
Existen otras soluciones de backup gratuitas como pueda ser ghettoVCB, en la que me he inspirado para crear este script. Sin embargo, estas soluciones tienen una pega importante, y es que dependen de una licencia ESXi no free para poder sacar los backups fuera del servidor ESXi.
Este script no necesita de una licencia no free para funcionar, ya que hace uso de comandos internos de ESXi para enviar por ftp el backup y de plink para inyectar aquellos comandos que por limitaciones de licencia no pueden usarse de forma remota.
El script está en constante desarrollo, por lo que está aún tiene fallos y faltan funcionalidades que quisiera ir implementando poco a poco, por lo que cualquier sugerencia o comentario será siempre bienvenido.
Update: Puedes descargar el script en este enlace.