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
abril 3, 2008 a las 10:00 am |
Tremendo el manual, está perfecto, muchas gracias por este tipo de publicaciones.
abril 3, 2008 a las 5:52 pm |
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
May 1, 2008 a las 7:56 am |
muy completo el manual, aunque con herramientas nuevas para mi que soy un novato en el tema, gracias por este tipo de publicaciones.
May 5, 2008 a las 7:11 am |
Muchas gracias Alcides, espero que te hagas rápido al sistema.
un saludo y gracias por la visita
May 9, 2008 a las 12:37 pm |
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!
May 12, 2008 a las 6:24 pm |
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
May 21, 2008 a las 4:44 am |
Que distribucion es ma srecomendable para Cluster Debian o Centos????
May 21, 2008 a las 6:43 am |
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
junio 30, 2008 a las 7:00 pm |
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
julio 1, 2008 a las 6:11 am |
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
noviembre 10, 2008 a las 12:30 pm |
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
noviembre 10, 2008 a las 1:59 pm |
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
May 11, 2009 a las 9:31 pm |
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.
junio 22, 2009 a las 8:55 am |
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!
junio 22, 2009 a las 8:58 am |
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¿?
marzo 17, 2010 a las 5:42 pm |
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
marzo 26, 2010 a las 1:00 pm |
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?
febrero 23, 2011 a las 12:12 pm |
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?
febrero 9, 2013 a las 4:15 pm |
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!