Uno de los grandes “problemas” que tiene EC2 de Amazon, es que sus unidades de almacenamiento no son persistentes. Esto quiere decir que en cuanto apaguemos nuestra(s) instancia(s), todos los datos almacenados se volatilizarán.
La primera solución que se nos puede venir a la cabeza, podría ser apoyarnos en el servicio S3 para ir haciendo backup de nuestros datos continuamente y así, al apagar nuestra instancia, podríamos recuperar todos nuestros datos. Por supesto, esta solución es poco fiable si nuestros datos varían continuamente (como una Base de Datos), ya que si apagamos nuestra instancia o esta falla en el lapso de tiempo entra backup y backup, seguiríamos perdiendo los últimos cambios.

Afortunadamente, Amazon lanzó EBS (Elastic Block Store), un servicio de almacenamiento persistente que nos permite montar un volumen de datos como unidad de almacenamiento sobre EC2.

Vamos a ver cómo aprovechar EBS para configurar una máquina en EC2 como servidor MySQL con almacenamiento persistente.

1. Reservar un volumen EBS

Lo primero de todo, es solicitar un nuevo volumen EBS para poder montarlo en nuestra instancia EC2.
Para ello, abrimos Elasticfox (que vimos en una entrada anterior) y accedemos a la sección “Volumes and Snapshots”. La primera sección corresponde a los volúmenes (EBS) que tenemos reservados, y la segunda a los backups de esos volúmenes. Cada snapshot (backup) nos servirá para lanzar un nuevo volumen que incluya nuestros datos previamente salvados.
El procedimiento es de lo más sencillo. Simplemente hacemos click en el botón verde (+) de la sección “Volumes” y nos aparecerá un pequeño formulario para configurar nuestro nuevo volumen.

ebs2

Definir el tamaño en GB del volumen: Esa será la cantidad máxima de datos que podrá almacenar nuestro nuevo volumen, por lo que es recomendable tener una idea de para qué vamos a utilizarlo antes de crearlo y así poder estimar el espacio que necesitaremos.
Elegir el snapshot a partir del cual queremos iniciar nuestro nuevo volumen: Para un nuevo volumen, simplemente dejamos este campo por defecto en "<none>"
Zona de disponibilidad: Este es uno de los puntos más importantes a la hora de crear nuestro volumen, ya que un volumen sólo puede ser accesible desde una instancia EC2 en la misma zona de disponibilidad. En caso de equivocarnos, o querer adjuntarlo a una nueva instancia en otra zona, podremos crear un snapshot, y a partir de él lanzar un nuevo volumen en otra zona.
Tag: Este campo es totalmente opcional y sirve para etiquetar nuestro nuevo volumen. Es bastante útil a la hora de manejar muchos volúmenes distintos y automatizar su gestión.

2. Adjuntar el volumen a una intancia

Ningún misterio. Simplemente hacemos click en el botón verde en forma de “tick” (o click derecho sobre el volumen y elegimos “Attach this volume”), y accederemos a un nuevo formulario en el que podremos elegir una de nuestras instancias disponibles en nuestra zona, y un campo donde definiremos el dispositivo desde el que queremos hacer disponible nuestro volumen. Como véis, Elasticfox nos avisa de que, para una máquina Linux, tenemos disponible cualquier dispositivo desde /dev/sda hasta /dev/sdp. Para este tutorial yo he elegido /dev/sdh. Por supuesto, podéis usar el que queráis (pero tenedlo en cuenta en los comandos y scripts que veamos).

ebs1

3. Formatear y montar nuestra unidad

Una vez adjuntado el volumen a nuestra instancia a través del dispositivo /dev/sdh, lo formatearemos en ext3 para tener acceso a él como unidad de almacenamiento (vosotros lo formateáis con el sistema de archivos que más os guste ). Para ello ejecutamos

CODE:

  1. mkfs.ext3 /dev/sdh

Creamos un nuevo directorio

CODE:

  1. mkdir /mnt/ebs

Y montamos la unidad en él

CODE:

  1. mount -t ext3 /dev/sdh /mnt/ebs

4. Llevar MySQL a nuestro EBS

No voy a explicar cómo instalar MySQL en vuestra máquina, porque presuponemos que ese paso ya está superado. Aún así, si no sabes cómo, seguro que fácilmente encontrarás algún tutorial de cómo instalar MySQL en vuestra distro preferida (como éste para Ubuntu).
El procedimiento para mover MySQL a EBS es sencillo. Simplemente moveremos el directorio mysql a nuestra nueva unidad, y crearemos un enlace simbólico desde su directorio original. De ésta manera, los datos estarán físicamente en EBS y virtualmente en el directorio original de mysql.

Primero movemos los datos ejecutando (Es importante haber apagado el servicio de mysql antes de proceder)

CODE:

  1. mv /var/lib/mysql /mnt/ebs/mysql

Y creamos el enlace

CODE:

  1. ln -s /mnt/ebs/mysql /var/lib

(si vuestro mysql no está instalado en /var/lib/mysql, usais vuestro directorio)

Ya sólo nos queda volver a arrancar el servicio de mysql y volver a generar nuestro AMI para no perder los cambios.

5. Automatizar el montaje de nuestra unidad EBS

Como os imaginaréis, si lanzamos una nueva instancia de nuestra AMI, aunque tendrá creado el enlace simbólico en /var/lib, nuestro volumen EBS no estará montado en /mnt/ebs.
Para facilitaros un poco el trabajo, he creado un pequeño script de bash que “escucha” hasta que está disponible el dispositivo /dev/sdh , para crear el directorio /mnt/ebs y montar en él el dispositivo. Como es evidente, este script nos “obliga” a adjuntar siempre el volumen en /dev/sdh.

Para que el script se ejecute nada más encender nuestra instancia, podemos editar nuestro archivo /etc/rc.local y añadir el siguiente comando

CODE:

  1. ./root/ebsmount.sh &

Esto ejecutará el script en background en el momento de arrancar la máquina.

Después de esto, ya simplemente tendremos que levantar una nueva instancia y adjuntarle el volumen EBS que hemos creado, y tendremos nuestra máquina EC2 con servicio MySQL con almacenamiento de datos persistente.

Por supuesto, se podría automatizar el proceso de adjuntar el volumen a la nueva instancia, de manera que sólo tuviéramos que levantar una nueva instancia y listo. Pero para ello habría que trabajar con la API de EBS y eso es otra guerra. Quizás en un futuro hable de ello.

Espero que, aún así, lo visto en esta entrada os sea útil.

Un saludo !!


Via http://feedproxy.google.com/~r/fillito/~3/F8j735dekEk/servidor-mysql-persistente-sobre-ec2-y-ebs-07-2009/a>

Related Posts with Thumbnails
Tagged with:  

Comments are closed.

Free WordPress Theme