Cluster de alta disponibilidad: Heartbeat2 Xen Cluster con drbd8 y OCFS2

Este artículo indica como realizar el setup en Ubuntu 7.10 (= para debian) de como preparar un cluster de alta disponibilidad con dos nodos de información redundante. Necesitaremos dos servidores idénticos (en nuestro caso, hemos echo el test con dos servidores virtuales), los cuales serán instalados con Xen hipervisor, y con la misma configuración de los nodos Cluster.

La configuración y archivos de imagenes virtuales Xen se almacenan en el dispositivo drbd. Drbd8 y OCFS2 permite el montaje simultaneo de ambos nodos, que es necesario para realizar la migración de las máquinas virtuales Xen.

Instalación.

1. – OS

Primero deberemos instalar dos máquinas con Ubuntu Server 7.10 Standard.

2. – Particionamiento

En ambos servidores, debemos organizar el disco en tres particiones, usados de la siguiente manera:

/dev/sda1 como /root
/dev/sda2 como swap
/dev/sda3 como drbd8

3. – Configuración de red

Para ello configuraremos nuestra máquina como indicamos a continuación:

Nodo Hostname Dirección IP
Nodo1 Nodo1 192.168.0.128
Nodo2 Nodo2 192.168.0.129

4. – Xen System

Para información adicional vistiad: http://es.wikipedia.org/wiki/Xen

Comenzaremos con la instalación de Xen Hypervisor y arrancaremos con Xen-Kernel. Para realizar la instalación, escribiremos en el terminal lo siguiente:

$ sudo apt-get install ubuntu-xen-server

Responderemos «Yes» a la pregunta de instalar software adicional necesario y una vez terminado reiniciaremos el sistema y arrancaremos con Xen.

5. – OCFS2

Para información adicional: http://oss.oracle.com/projects/ocfs2/

OCFS2 es un Sistema de ficheros en Cluster que permite el acceso simultáneo de multiples nodos. Deberemos definir nuestro dispositivo drbd para acceder a los nodos de la red simultaneamente. Primero configuraremos OCFS2 para proporcionarle información sobre los nodos para disponer de acceso al sistema de ficheros posteriormente. Cada nodo OCFS2 dispone de un sistema de ficheros montado, regularmente escribe un fichero meta-data permitiendo a los otros nodos saber que se encuentra disponible.

Para proceder a su instalación, en la consola, escribiremos las siguientes lineas:

$ sudo apt-get install ocfs2-tools ocfs2console

Una vez terminado procederemos a su configuración.

6. – Configuración

Editaremos el fichero /etc/ocfs2/cluster.conf como indicamos a continuación

$ sudo vim /etc/ocfs2/cluster.conf

Este debe tener el siguiente aspecto:

#/etc/ocfs2/cluster.conf
 node:
 ip_port = 7777
 ip_address = 192.168.0.128
 number = 0
 name = node1
 cluster = ocfs2
 node:
 ip_port = 7777
 ip_address = 192.168.0.129
 number = 1
 name = node2
 cluster = ocfs2
 cluster:
 node_count = 2
 name = ocfs2

Para reconfigurarlo de nuevo realizaremos lo siguiente:

sudo dpkg-reconfigure o2cb
sudo /etc/init.d/o2cb restart
sudo /etc/init.d/ocfs2 restart

7. – drbd8

Para mas información consultar: http://en.wikipedia.org/wiki/Drbd

Drbd8 permite a los recursos drbd ser «maestros» en ambos nodos, lo que permite montarse en lectura-escritura. Vamos a construir un módulo drbd8 y cargarlo en el núcleo. Para ello necesitamos instalar ciertos paquetes, por lo que teclearemos lo siguiente en la consola:

$ sudo apt-get install drbd8-utils drbd8-module-source drbd8-source build-essential linux-headers-xen
$ sudo sudo m-a a-i drbd8-module-source
$ sudo update-modules
$ sudo modprobe drbd

Ello cargará el módulo drbd. Tambien sera creado el archivo de configuración por defecto situado en /etc/drbd.onf

8. – Configuración

Para ello realizaremos la edición del fichero de configuración

$ sudo vim /etc/drbd.conf

Y deberá tener un aspecto como se indica a continuación:

#/etc/drbd.conf
 global {
 usage-count yes;
 }
 common {
 syncer { rate 10M; }
 }
 resource r0 {
 protocol C;
 handlers {
 pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
 pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
 local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
 outdate-peer "/usr/sbin/drbd-peer-outdater";
 }
 startup {
 }
 disk {
 on-io-error   detach;
 }
 net {
 allow-two-primaries;
 after-sb-0pri disconnect;
 after-sb-1pri disconnect;
 after-sb-2pri disconnect;
 rr-conflict disconnect;
 }
 syncer {
 rate 10M;
 al-extents 257;
 }
 on node1 {
 device     /dev/drbd0;
 disk       /dev/sda3;
 address    192.168.0.128:7788;
 flexible-meta-disk  internal;
 }
 on node2 {
 device    /dev/drbd0;
 disk      /dev/sda3;
 address   192.168.0.129:7788;
 meta-disk internal;
 } }

La opción «Allow-two-primaries» en drbd.conf es la que nos permite montar ambos nodos como maestro. Deberemos copiar el fichero /etc/drbd.conf al nodo2 y reiniciar drbd en ambos nodos. Para el reinicio realizaremos lo siguiente en ambas máquinas:

$ sudo /etc/init.d/drbd restart

Podemos chekear el estado de drbd con el siguiente comando:

$ sudo /etc/init.d/drbd status

Podemos cambiar el recurso a «maestro» mediante el siguiente comando (realizandose en ambos nodos).

$ sudo drbdadm primary r0

y tras ello podriamos chequear de nuevo el estado.Aquí veriamos los recursos en «Maestro», esto hace que el dispositivo este ahora accesible en /dev/drbd0

9. – El sistema de ficheros.

Ahora es el momento de crear un sistema de ficheros en /dev/drbd0, para ello realizaremos lo siguiente:

$ sudo mkfs.ocfs2 /dev/drbd0

Este puede ser montado en ambos nodos simultaneamente con:

$ sudo mkdir /drbd0
$ sudo mount.ocfs2 /dev/drbd0 /drbd0

Ahora disponemos de un almacenamiento común que se sincroniza con drbd en ambos nodos.

10. – Init script

Debemos asegurarnos que al iniciar el sistema, ambos nodos deben montar el recurso maestro sobre /drbd0 antes de que se arranque Heartbeat y las máquinas Xen.

Para ello editaremos el fichero mountdrbd.sh

$ sudo vim /etc/init.d/mountdrbd.sh

el cual deberá contener las siguientes lineas:

# / Etc / init.d / mountdrbd.sh
 Drbdadm primaria R0
 Mount.ocfs2 / dev/drbd0 / mnt

ahora deberemos darle permisos de ejecución y añadiremos un enlace simbólico. Para ello:

$ sudo chmode +x /etc/init.d/mountdrbd.sh
$ sudo ln -s /etc/init.d/mountdrbd.sh /etc/rc3.d/S99mountdrbd.sh

Nota: este paso puede ser integrado también en Heartbeat añadiendo los recursos adecuados a la configuración.

11. – HeartBeat2

Para mas info, visitar: http://www.linux-ha.org/Heartbeat

Para su instalación teclearemos lo siguiente:

$ sudo apt-get install heartbeat-2 heartbeat-2-gui

Ahora editaremos el fichero de configuración

$ sudo vi /etc/ha.d/ha.cf

Dónde debemos dejarlo así:

#/etc/ha.d/ha.cf
 crm on
 bcast eth0
 node node1 node2

y reiniciaremos el servicio de la siguiente manera:

$ sudo /etc/init.d/heartbeat restart

12. – Configuración HB

La configuración e información de estado de los recursos se almacenan en formato XML dentro del fichero /usr/lib/heartbeat/crm/cib.xml. La sintaxis para su configuración esta muy bien explicada en la web por Alan Robertson disponible en: http://linux-ha.org/HeartbeatTutorials

Este puede editarse directamente o puede manipularse por modulos utilizando la herramienta «cibadmin». Nosotros utilizaremos esta herramienta, pues facilita considerablemente el trabajo. Los componentes necesarios serán guardados en ficheros XML dentro de /root/cluster.

13. – Inicialización

Editaremos el fichero bootstrap.xml

$ sudo vi /root/cluster/bootstrap.xml

#/root/cluster/bootstrap.xml
[cluster_property_set id="bootstrap"]
 [attributes]
 [nvpair id="bootstrap01" name="transition-idle-timeout" value="60"/]
 [nvpair id="bootstrap02" name="default-resource-stickiness" value="INFINITY"/]
 [nvpair id="bootstrap03" name="default-resource-failure-stickiness" value="-500"/]
 [nvpair id="bootstrap04" name="stonith-enabled" value="true"/]
 [nvpair id="bootstrap05" name="stonith-action" value="reboot"/]
 [nvpair id="bootstrap06" name="symmetric-cluster" value="true"/]
 [nvpair id="bootstrap07" name="no-quorum-policy" value="stop"/]
 [nvpair id="bootstrap08" name="stop-orphan-resources" value="true"/]
 [nvpair id="bootstrap09" name="stop-orphan-actions" value="true"/]
 [nvpair id="bootstrap10" name="is-managed-default" value="true"/]
 [/attributes]
 [/cluster_property_set]

Cargamos este fichero ejecutando el siguiente comando:

$ sudo cibadmin -C crm_config -x /root/cluster/bootstrap.xml

Esto inicializa el cluster con los valores fijados en el fichero xml.

14 – Configuración del dispositivo STONITH

STONITH impide el «Split-brain-situation», es decir, que corran recursos en ambos nodos de una manera inusual, al mismo tiempo. Stonith comprueba si un nodo esta muerto, que lo este, y en caso de no estarlo, lo mata.

Para mas detalles sobre STONITH visitar: http://www.linux-ha.org/STONITH

Nosotros utilizaremos stonith sobre ssh para reiniciar la máquina con defectos. Para instalar STONITH teclearemos:

$ sudo apt-get install stonith

Ahora seguiremos las indicaciones de este link para generar nuestra llave pública para la autenticación.
http://sial.org/howto/openssh/publickey-auth/

Tras ello probaremos si podemos acceder del nodo1 al nodo2 via ssh sin uso de contraseña y viceversa.

$ sudo ssh -q -x -n -l root «node2» «ls -la»

Esto debería mostrarnos por pantalla la lista de ficheros del nodo2. Ahora configuraremos el dispositivo STONITH como recurso Cluster. Será un recurso cluster especial, «clon», que se desarollará simultaneamente en todos los nodos.

$ sudo vim /root/cluster/stonith.xml

[clone id=”stonithclone” globally_unique=”false”]
 [instance_attributes id=”stonithclone”]
 [attributes]
 [nvpair id=”stonithclone01” name=”clone_node_max” value=”1"/]
 [/attributes]
 [/instance_attributes]
 [primitive id=”stonithclone” class=”stonith” type=”external/ssh” provider=”heartbeat”]
 [operations]
 [op name=”monitor” interval=”5s” timeout=”20s” prereq=”nothing” id=”stonithclone-op01"/]
 [op name=”start” timeout=”20s” prereq=”nothing” id=”stonithclone-op02"/]
 [/operations]
 [instance_attributes id=”stonithclone”]
 [attributes]
 [nvpair id=”stonithclone01” name=”hostlist” value=”node1,node2"/]
 [/attributes]
 [/instance_attributes]
 [/primitive]
 [/clone]

Cargaremos el fichero de la siguiente manera:

$ sudo cibadmin -C -o resources -x /root/cluster/stonith.xml

15 – Xen como recurso Custer.

Ahora es el momento de añadir un máquina virtual Xen como cluster. Disponemos de una máquina Xen para la visualización llamada vm01. La configuración y los ficheros imagen de vm01 pueden ser encontrados bajo el directorio /drbd0/xen/vm01 como vm01.cfg y vm01-disk0.img respectivamente.

Para editar el fichero XML de configuración, realizaremos lo siguiente:

$ sudo vi /root/cluster/vm01.xml

Y lo dejaremos tal y como se indica a continuación:

[resources]
 [primitive id=”vm01” class=”ocf” type=”Xen” provider=”heartbeat”]
 [operations]
 [op id=”vm01-op01” name=”monitor” interval=”10s” timeout=”60s” prereq=”nothing”/]
 [op id=”vm01-op02” name=”start” timeout=”60s” start_delay=”0”/]
 [op id=”vm01-op03” name=”stop” timeout=”300s”/]
 [/operations]
 [instance_attributes id=”vm01”]
 [attributes]
 [nvpair id=”vm01-attr01” name=”xmfile” value=”/drbd0/xen/vm01/vm01.cfg”/]
 [nvpair id=”vm01-attr02” name=”target_role” value=”started”/]
 [/attributes]
 [/instance_attributes]
 [meta_attributes id=”vm01-meta01”]
 [attributes]
 [nvpair id=”vm01-meta-attr01” name=”allow_migrate” value=”true”/]
 [/attributes]
 [/meta_attributes]
 [/primitive]
 [/resources]

Para cargar este fichero realizaremos:

$ sudo cibadmin -C -o resources -x /root/cluster/vm01.xml

16 – Monitorizando

Para ello utilizaremos la herramienta «crm_mon», con la cual podemos monitorizar los cluster, incluyendo los nodos y los recursos.

$ sudo crm_mon Refresh in 14s

Disponemos tambien de una aplicación gráfica para ello, pero debemos especificar antes un pass para «hacluster». Para ello:

$ sudo passwd hacluster
$ sudo hb_gui &

Traducción post de AtulAthavale de UbuntuGeek

19 respuestas to “Cluster de alta disponibilidad: Heartbeat2 Xen Cluster con drbd8 y OCFS2”

  1. mfernandez Says:

    Tremendo el manual, está perfecto, muchas gracias por este tipo de publicaciones.

  2. cristiansan Says:

    muchas gracias a ti, espero poder buscar mas huecos para escribir mas manuales como este,y si os sirven, mucho mejor.

    un saludo y gracias por el comentario

  3. Alcides Says:

    muy completo el manual, aunque con herramientas nuevas para mi que soy un novato en el tema, gracias por este tipo de publicaciones.

  4. cristiansan Says:

    Muchas gracias Alcides, espero que te hagas rápido al sistema.

    un saludo y gracias por la visita

  5. irraz Says:

    Hola, tengo una duda existencial o de concepto…
    Si yo tengo una cabina iSCSI y monto desde servidores linux por iscsi esa cabina con OCFS2, sigo necesitando DRDB? Al ser dos nodos atancando el mismo recurso, no se supone que no hace falta sincronizar nada? estoy hablando de que los dos servidores montarian al mismo tiempo el mismo target, que creo que es la gracia de OCFS2 no¿?¿? DRDB sería más conveniente si tienes un storage compartido con LVM o algo así?? me puedes resolver esa duda? GRACIAS!

  6. cristiansan Says:

    Hola irraz,

    Siento no poder ayudarte en el tema, pues no he tocado nada mas al respecto de clusters. Quizás en la página de los proyectos puedan ayudarte al respecto. un saludo

  7. koki Says:

    Que distribucion es ma srecomendable para Cluster Debian o Centos????

  8. cristiansan Says:

    Hola koki,

    En entorno para PYME yo te recomendaria CentOS, pues es una distribución muy estable, con soporte LTS. De todos modos, hay algo de gusto en ello, así que prueba ambas y escoge la que mas comodidad te dé, aunque a mi parecer centOS será mejor opción si estas pensando en ponerlo en tu empresa.

    saludos
    cristiansan

  9. died74 Says:

    Siguiendo los pasos tanto en Ubuntu Server 8.04 y Debian Estable llegue al mismo punto ciego.

    En el paso 6 Cuando Into configurar el fichero /etc/ocfs2/cluster.conf
    este no existe.

    Lo creo al archivo para probar y sigo… y luego…

    root@wbcl00:/etc# dpkg-reconfigure o2cb
    El paquete `o2cb’ no está instalado y no hay ninguna información disponible.
    Utilice dpkg –info (= dpkg-deb –info) para examinar archivos,
    y dpkg –contents (= dpkg-deb –contents) para listar su contenido.
    /usr/sbin/dpkg-reconfigure: o2cb no está instalado
    root@wbcl00:/etc#

    root@wbcl03:/etc# apt-get install o2cb
    Leyendo lista de paquetes… Hecho
    Creando árbol de dependencias
    Leyendo la información de estado… Hecho
    E: No se pudo encontrar el paquete o2cb
    root@wbcl03:/etc#

    Si les paso y lo solucionaron.. o alguna sugerencia.. soy todo ojos xd

  10. cristiansan Says:

    Died74,

    No tienes los repositorios para o2cb, pasate por la página del proyecto y descarga el paquete e instalalo antes de continuar:

    http://oss.oracle.com/projects/ocfs2/files/

    saludos

  11. Joserra Says:

    Hola, mi duda es la siguiente: Es necesario tener instalado OCFS2 para que DRBD funcione de manera ACTIVO/ACTIVO (primary/primary) junto con Heartbeat?

    Gracias

  12. cristiansan Says:

    Hola Joserra,

    Si no me equivoco, que es posible, creo que sí es necesario. OCFS2, permite el acceso simultaneo a ambos nodos, mientras que DRBD permite que ambos nodos sean montados como primarios. Sin OCFS2 no tendrás acceso simultaneo a ambos nodos, por lo que DRBD no te funcionará de manera ACTIVO/ACTIVO.

    De todos modos, no puedo asegurarte dicha info sin confirmarlo anteriormente, será cuestión de probar, aunque últimamente no tengo mucho tiempo (por ello tengo algo dejado el blog), en caso que lo probarás esperamos tus comentarios 😉

    saludos,
    cristiansan

  13. Alejandro Malaver Says:

    Hola Cristian.
    Tu manual es excelente, pero por otro lado quisiera saber si puedes ayudarme con informacion o tal vez un manual sobre cluster de procesamiento. Estoy trabajando bajo linux, exactamente Centos 5.2, esta me ofrece un herramienta llamada «cluster management» pero no se como usarla. Ademas el uso de dicha herramienta es solo para probar el funcionamiento del cluster pues en ultimas debe ser montado en modo texto sobre maquinas virtuales.
    Te agradesco toda la informacion q puedas ofrecerme.

  14. javier Says:

    Tengo un problema nada mas empezar. Estoy usando ubuntu server 9.04 y al instalar el xen-server y reiniciar, me casca el kernel, ¿Como puedo solucionarlo?
    Gracias de antemano!

  15. javier Says:

    También se me olvidó preguntar otra cosa, yo tengo tres particiones por nodo, una para sistema, otra para usar como activa, y otra para usar como espejo… como indico cual es la activa y cual es la espejo en cada servidor¿?

  16. Alejandro Says:

    Hola tengo una dudo en el momento den donde se edita el cluster.com existe alguna forma de hacrlo sin nodos ya que debo hacer la sincronizacion de 2 raid desde consola y solo puedo hacerla con un cluster

  17. Manuel Says:

    Me llamaréis lerdo, pero lo que encuentro en la página web del proyecto ocfs2 no es ningun paquete .deb para debian/ubuntu. Lo cual me lleva a pensar que hay que compilar las src del paquete. ¿Esto es asi?

  18. emilio Says:

    Tengo una duda, si los discos se están sincronizando con drdb para que se usa ocfs? con un sistema de ficheros ext3 valdría no?

  19. Zoe Says:

    you’re actually a good webmaster. The web site loading speed is amazing. It kind of feels that you are doing any unique trick. In addition, The contents are masterwork. you’ve done a wonderful task on this subject!

Replica a cristiansan Cancelar la respuesta