data -->

Backups en Openstack

Posted by José Manuel Hernández on

Quería aprovechar este post para hablaros en esta ocasión de backups en Openstack.
Antes de entrar en materia quería daros algunos consejos a la hora de trabajar con almacenamiento en plataformas Cloud:

1º. Cambia la mentalidad
Si estamos trabajando en una plataforma cloud no podremos usar los métodos tradicionales y a veces caros de backup, lo importante es el dato, no la máquina. Una aplicación cloud ideal usa almacenamiento efímero, recursos de cómputo y genera unos resultados (datos, logs, etc.) en almacenamiento persistente.

De momento la mayoría de las aplicaciones empresariales no están pensadas para funcionar en cloud y esto hace que tengamos que tener algunas consideraciones especiales para estos escenarios “legacy”.



2º. Crea servidores sin estado (stateless)
Usa servidores que no almacenen datos importantes en el disco raíz, por ejemplo, un servidor de aplicación debería de ser stateless, a diferencia de un servidor de base de datos que sería statefull, este tendría un disco de sistema y un volumen para almacenar datos. En servidores stateless puedes usar un servidor de syslog para guardar tus logs de manera persistente.

Usar servidores stateless te permitirá crecer elásticamente en tu front-end.

3º. Automatiza el despliegue del servidor Puedes usar varias herramientas para crear “recetas” de la configuración base de tu servidor, o algo mas sencillo, en Openstack puedes crear snapshots de tu instancia los cuales generarán una imagen en Glance preparada para lanzar, esto te permitiría crear “stacks” con todas tus aplicaciones pre-configuradas. También puedes integrar tus herramientas de desarrollo, CI, orquestación, etc. para automatizar el despliegue.



4º. Usa herramientas nativas para hacer backup
Lo más seguro a veces es usar las herramientas nativas de cada aplicación para hacer backups, por ejemplo, si usas MySQL puedes programar tus backups con mysqldump, RMAN si usas Oracle, etc.
Lo ideal sería copiar los datos a un dispositivo de almacenamiento que se encuentre en una zona de disponibilidad o región diferente, en local puedes utilizar almacenamiento de objetos como Swift o un almacén de datos NFS.


Parte práctica

Ahora vamos a hacer un backup de una instancia típica compuesta por un disco de sistema (root) y un volumen. En este caso parto de que estamos usando [Cinder] como backend de almacenamiento.

Normalmente una instancia se compone de un disco local y un volumen tal como muestra la siguiente imagen.

![alt](/content/images/2016/02/Captura88.PNG)

Backup de Instancias
Hacer un backup del disco raíz de una instancia es un proceso sencillo ya que podemos usar [Glance] para ello:

1º Creamos un snapshot de la instancia, (disco root) esto copiará el disco de nuestra máquina como imagen en [Glance]
nova image-create INSTANCE_ID [nombre-del-snapshot]

2º Descargamos el snapshot (si es necesario):
– Descubrimos el ID de la imagen creada:
glance image-list

– La descargamos:
glance image-download --file [nombre-del-archivo].qcow2 [ID de la imagen]
p. ej.:
glance image-download --file instancia-backup.qcow2 bb756e25-50f6-4d67-bf30-6ac9ed635ac3

Con esto ya tendremos una imagen exacta del disco root de nuestra instancia el cual podremos copiar a otro entorno o usarlo como backup para restaurar.

Backup de Volúmenes
Una cosa importante a tener en cuenta, no podemos hacer backups de los volúmenes en uso (attached), por lo que tendríamos dos opciones:

– Desconectar el volumen, cosa poco probable si estamos en producción.
– Usar los snapshot de volumen.

Usando la segunda opción necesitaremos dar los siguientes pasos:

1º Crear un snapshot temporal:
cinder snapshot-create --force True --display-name [nombre_snaphot] [volume_id]

2º Crear un volumen temporal desde el snapshot previo:
cinder create --snapshot-id [ID-snapshot-previo] --display-name [nombre-del-nuevo-volumen] [tamaño]

3º Hacer backup del volumen temporal:
cinder backup-create --container [nombre-contenedor-backup] --display-name [nombre-del-backup] [nombre-volumen-a-copiar] [tamaño (GB)]

4º Listamos los backups
cinder backup-list

5º Si necesitamos restaurar:
cinder backup-restore --volume-id [nombre-volumen] [ID-backup]

Cinder-backup

En los últimos pasos hemos usado cinder-backup, con esta herramienta podemos hacer copias de nuestros volúmenes a otro almacenamiento distinto o incluso a otra zona de disponibilidad. Para ello es importante que el almacenamiento que usemos esté soportado por [cinder-backup]

Actualmente tenemos los siguientes drivers:
  • Ceph backup driver
  • IBM Tivoli Storage Manager backup driver
  • Swift backup driver
  • FS backup driver

Para hacer un backup de un volumen:
cinder backup-create --container volume-backup --display-name instance-vol01-2016-02-14 instance-vol01-backup

Una vez realizado puedes listar tus backups con el siguiente comando:
cinder backup-list

Para recuperar un volumen:
cinder backup-restore --volume-id instance-vol01 e8ec12ee-a9cb-4135-b8a9-21373bd965db

Lo conectamos a la instancia que corresponda:
nova volume-attach instance c0e9e951-e33f-488e-a605-95d0ecc728e1

Y con esto tendremos nuestro volumen de nuevo operativo.

Con estos comandos que hemos visto y algo de ingenio podremos programar backups periódicos a nivel de instancia y volumen, espero que te sea de utilidad.

José Manuel Hernández