5 de diciembre de 2011

Cluster Web Alta Disponibilidad: Instalación y configuración DRBD

En esta entrada describiré el proceso de creación de un sistema RAID1 utilizando el software DRBD con el que replicar fácilmente nuestros dispositivos de bloques. Añadimos un disco en cada máquina virtual y crearemos el sistema de ficheros de los dispositivos que utilizaremos para la sincronización de los datos.

En primer lugar pasamos a instalarlo con el comando aptitude install drbd-utils


Cargamos el módulo de DRBD y lo añadimos al archivo /etc/modules para que sea cargado en el arranque del sistema. Utilizamos el comando modprobe drbd para cargar dicho módulo.


Creamos un archivo .res en la ruta /etc/drbd.d donde configuramos el recurso con el siguiente contenido:


Creamos el recurso www-data y utilizaremos el protocolo C. Cifraremos la conexión con sha1 y una contraseña compartida. En cada nodo configuramos los discos y dispositivos que utilizan, su dirección IP junto al puerto donde escucha el recurso y la manera en la que se almacenan la metainformación.

Creamos y activamos el recurso con drbdadm create-md www-data y drbdadm up www-data respectivamente. En caso que el segundo nodo de problemas, probad con la opción --force al crear el recurso.


El archivo /proc/drbd es un archivo virtual con información a tiempo real sobre el estado de los recursos configurados. Podemos ver que no tenemos ningún nodo principal y el estado de los datos es Inconsistent.


En el nodo principal ejecutamos el comando drbdadm -- --overwrite-data-of-peer primary www-data para sincronizar los datos desde el principal al secundario. Este proceso va a tardar bastante tiempo por lo que echarle paciencia y no utiliceis volumenes muy grandes; como ejemplo: con unidades de 2G he tardado hora y media aproximadamente.


Una vez finaliza la replicación de los datos


Formateamos la unidad virtual con el comando mkfs.ext3 /dev/drbd0


Aprovechando que tengo el directorio /mnt vacio, creo dos directorios para guardar los datos de la página y la base de datos.


Creamos un archivo Web con el que realizar las pruebas y reconfiguramos los archivos de configuración de los servidores para que apunten a la nueva ruta.


Arrancamos crm y pasamos al modo configure. Creamos un nuevo recurso para el recurso DRBD y un multi-estado (ms) para el recurso anterior.

primitive WebData ocf:linbit:drbd params drbd_resource=www-data op monitor interval=60s
ms WebDataClone WebData meta master-max=1 meta-node-max=1 clone-max=2 clone-node-max=1 notify=true


Y confirmamos con commit, podemos comprobar los cambios a través de crm_mon


Luego creamos otro recurso para el sistema de ficheros con el comando

primitive WebFS ocf:heartbeat:Filesystem params device=/dev/drbd/by-res/www-data directory=/mnt/projwww fstype=ext3


Como en su momento colocamos el recurso del servidor web junto a la dirección IP, primero editamos el archivo y lo eliminamos.


Creamos un grupo con los recursos ClusterIP, WebSite y WebFS con el comando:

group WebCluster ClusterIP WebSite WebFS


Podemos ver en crm_mon al aplicar la creación del grupo que nos cambia la distribución y nos agrupa los recursos.


Con order vamos a arrancar el grupo WebCluster creado antes una vez esté promocionado el recurso multi-estado del sistema de ficheros DRBD.

order FS_after_Cluster inf: WebDataClone:promote WebCluster:start


Podemos observar toda la configuración antes de confirmar definitivamente.


Probando el sistema de ficheros

Si arrancamos el navegador y apuntamos a la dirección IP del cluster, nos responde correctamente el servidor principal con los cambios en el archivo Web que realizamos anteriormente.


Si deshabilitamos el nodo principal


Y comprobamos que el servicio se transfiere correctamente al secundario


Podemos recargar la página y comprobar que modifica el nombre de host.


A la hora de arrancar nuevamente el nodo me salto un error, intenté todo tipo de comandos con los que eliminarlo pero no hay manera.


Aunque el servicio se ha transferido correctamente al servidor principal el error continua, pero como el recurso está levantado y es un error desconocido no le doy más importancia jeje.


En próximas entradas configuraremos MySQL para almacenar la base de datos y que sea replicada entre los nodos para asegurar su disponibilidad.

Un saludo, Brixton Cat.

3 comentarios:

  1. Primero me gustaria darte las gracias por el tutorial.
    Queria saber si finalmente pusiste el tutorial para Cluster Web Alta Disponibilidad con:
    - Configuración MySQL
    - Instalación CMS

    Puedes hacer el tutorial por favor o algun dato para poder hacerlo, estoy busando informacion en internet y no doi como montarlo.
    Espero tu respuesta amigo.
    Saludoss

    ResponderEliminar
  2. @Anonimo Gracias por comentar : )

    A decir verdad este tutorial lo tengo en el cajón de tareas pendientes... Hace poco tuve que montar un par de cluster para producción, una VPN y un RADIUS, y si tienes claros los conceptos el tutorial te puede servir de ayuda. La verdad es que quiero retomarlo aunque variando ciertas cosas...

    Para el MySQL te recomiendo que utilices replicación Master-Master utilizando el siguiente tutorial

    https://www.digitalocean.com/community/articles/how-to-set-up-mysql-master-master-replication

    Asi el servicio está corriendo en ambos servidores y te quitas esa parte en el CRM. Si la configuración de DRBD la has completado, la instalación del CMS no tiene que darte problemas siempre que copies los ficheros en el punto de montaje definido en ambos servidores.

    De todas maneras en el siguiente correo puedes detallar con más exactitud la configuración que buscas para hacerme una idea más detallada del escenario con el que tienes que trabajar y en caso de ser posible echarte una mano. E-mail: el.gato.brixton@gmail.com

    Saludos!

    ResponderEliminar
  3. Amigo te mando un correo, mil gracias por contestar tan rapido.
    Saludoss

    ResponderEliminar

Bienvenid= si quieres dejar un comentario