in Openstack Backup cinder Cloud ~ read.

Backups en Openstack

alt


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".

alt

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.

alt

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.

alt

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.

alt


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



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  

alt

  • 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]

alt 2º Crear un volumen temporal desde el snapshot previo:

cinder create --snapshot-id [ID-snapshot-previo] --display-name [nombre-del-nuevo-volumen] [tamaño]

alt

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)]

alt

4º Listamos los backups

cinder backup-list

alt

5º Si necesitamos restaurar:

cinder backup-restore --volume-id [nombre-volumen] [ID-backup]

alt

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
  • NFS backup driver

alt

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

comments powered by Disqus