sábado, 2 de agosto de 2008

Cómo montar un cluster con Linux

En este POST voy a explicar varias cosas. Explicaré que es un cluster para que sirve un cluster, como configurarlo y montar un cluster bajo un sistema Linux.

¿Que es un cluster?

Un cluster es un conjunto de ordenadores (nodos) que estan conectados entre si por medio de una red, comparten recursos con el objetivo de realizar tareas y funciones como si fuesen un único ordenador, (memoria distribuida).

¿Para que sirve un cluster?

Para cuando queramos realizar tareas que necesiten grandes requerimientos de memoria y CPU y para ahorrarnos horas de trabajos en tareas y operaciones.

¿Que necesitamos para montar un cluster?

Se necesita mínimo 2 nodos (ordenadores) y un medio de comunicación entre ellos para que puedan compartir los recursos y las tareas, (red).

....::Proceso de Instalación ::....

Vamos a necesitar: 2 PC con Linux, Red, Puerto serie, el paquete HeardBeat y un sistema de ficheros con Journaling.

¿Que es el paquete de HeartBeat?

Es un paquete de software que funciona de manera similar al System V o init, pero en vez de un solo ordenador, pasaría a ejecutar los servicios en los nodos, basándoses en que no le llegan respuestas, éstas se hacen por medio de ping y por pulsaciones del cable serie.

¿Que es STONITH?

Es una técnica usada por HeartBeat, que se asegura que un servidor supuestamente muerto no interfiera en el funcionamiento del cluster. Concretamente significa que el servidor secundario nota que el primario no funciona y este le haría un DDOS al primario para asegurarse que ha sido un falso positivo y el nodo secundario tomaría el control.

¿Que son los Balanceadores de Carga?

Permite optimizar la utilización de los recursos de un cluster mediante la asignación de tareas a los nodos con menor carga de trabajo, o con mayor cantidad de recursos libres.
El balanceo de carga se realiza mediante la calendarización de trabajos o a través de la migración de procesos.

Preparar el Hardware.

Instalamos los discos, pero sin crear todavía ningún sistema de ficheros.
Instalaremos las NICs y las configuraremos con IPs privadas de la misma subred en los rangos 192.168.0.0/16 o el rango 10.0.0/8.
Comunicaremos los PCs entre sí con un cable serial.
Conectamos cada ordenadora su UPS.

Instalar el Software.

Necesitaremos varios paquetes de software:
heartbeat-1.0.3
heartbeat-pils-1.03
heartbeat-stonith-1.0.3

Cada uno de ellos se encuentran en los repositorios de cada distribucion, o se incluye como paquete en los CDs de instalación. Podemos usar por ejemplo el apt-get para la instalación.

Por último nos queda instalar el servicio que queramos dar, por ejemplo, samba, apache...

Configurando DRBD.

DRBD se configura en el fichero /etc/erbd.conf

El código:

resource drbd0 {
protocol=C
fsckcmd=/bin/true
disk {
disk-size=80418208
do-panic
}
net {
sync-rate=8M # bytes/sec
timeout=60
connect-int=10
ping-int=10
}
on Zeus { # Zeus es el nombre del servidor principal
device=/dev/nb0
disk=/dev/hda1
address=192.168.1.1
port=7789
}
on SolarUX { #SolarUX es el nombre del servidor secundario
device=/dev/nb0
disk=/dev/hda1
address=192.168.1.2
port=7789
}
}

Crear el sistema de ficheros.

Vamos a crear el sistema de ficheros para Zeus(servidor primario) es importante usar un sistema de fichero con journaling como ext3, reiserfs...

Crearemos 2 particiones del mismo tamaño en el dispositivo /dev/nb0, los 2 servidores con reiserfs ya que se considera más seguro.

Instrucciones a ejecutar en Zeus.

Root@Zeus:~# /etc/init.d/drbd start


Le respondemos "yes" para que nos ponga a Zeus como primario. Ahora crearemos el sistema de archivos y lo montamos:

Root@Zeus:~# mkfs -t reiserfs /dev/nb0 datadisk /dev/nb0 start


Por último si usamos una conexión Ethernet de 1 GB para la sincronización, cambiaremos los parámetros de este para que nos funcione en modo fullduplex.

Configurando Heartbeat.

Tiene 3 ficheros de configuración:
1. ha.cf Configura información básica del cluster.
2. haresources.cf Configura los grupos de recursos tipo init.
3. authkeys Configura la autentificación de red.

ha.cf le aporta a heartbeat la información de configuración básica. Configura los nodos, pulsaciones serials, la manera de registrar los logs intervalo de tiempo muerto y pulsaciones.

Ejemplo de nuestro ha.cf:

logfacility local7 # servicio de syslog
keepalive 1 #Intervalo pulsación
warntime 2 #Pulsación Tardía
deadtime 10 # Tiempo control Fallos
nice_failback on
node Zeus SolarUX
ping 10.10.10.254 # Dirección del Router
bcast eth0 eth1 #Broadcast Interfaces Heartbeat
serial /dev/ttyS0 #Enlace Serial Heartbeat
respawn /usr/lib/Heartbeat/ipfail
stonith_host Zeus apcsmart SolarUX /dev/ttyS1
stonith_host SolarUX apcsmart Zeus /dev/ttyS1


Fichero /etc/ha.d/haresources.

Este fichero crea un grupo de recursos que en teoría pertenecen a Zeus asociados a una IP virtual 10.10.10.20 y los recursos a servir.

1- NFS (Network File System)
2- SAMBA (compartir archivos windows)
3- DHCP (asignación dinámica de IPs)
4- POSTFIX (servidor de correo electrónico)

Código:

Zeus 10.10.10.20 datadisk::drbd0 nfslock nfsserver smb dhcpd postfix


Heartbeat administra perfectamente la mayoría de los servicios que vienen en los V System init llamados también scripts de arranque, sin embargo, es que una de las condiciones que tiene heartbeat para que administre los scripts, es que debe de tener el mismo nombre en todos los nodos.

Fichero /etc/ha.d/authkeys.

Contiene el método de autenticación basado en (sha1) con la clave que se usará para firmar los paquetes. Este fichero tiene que ser idéntico en todos los servidores, y ningún usuario debe de tener acceso a la lectura excepto el root:

auth 1
1 sha1 RandomPasswordfc970c94efb


Configuración de los servicios.

Tenemos que deshabilitar los servicios para que no sean controlados por init sino por heartbeat. Esto lo conseguiremos con el siguiente comando:

Root@Zeus:~# chkconfig -del nfslock nfsserver smb dhcpd postfix


Configurando el /etc/fstab.

Tenemos que tener muchísimo cuidado con la partición /home, eliminamos dicho fichero y creamos esta:

/dev/nb0 /home reiserfs noauto 0 0


Nota: si home ya está montado lo desmontamos con umount /home

Configuración del fichero /etc/hosts.

Si no tenemos un servidor DNS corriendo en nuestra red, tendremos que usar nuestro archivo /etc/hosts quedando de esta manera:

10.10.10.20 Cluster # IP virtual cluster
192.168.1.1 Zeus #Servidor Primario
192.168.1.2 SolarUX # Servidor Segundario (Nodo)


Montando todo el sistema.

Ahora vamos a configurar el servidor secundario para que monte /home desde NFS añadiendo lo siguiente en /etc/fstab.

Cluster:/home /home nfs  defaults 0 0


Una vez esté la partición NFS montada creamos el directorio /home/HA.config y creamos la siguiente estructura de directorios:

/etc
postfix/
samba/
exports
dhcpd.conf
/var
lib/
dhcpd
samba
nfs
spool/
postfix/
mail/


Después de montar la estructura de directorios tendríamos que crear enlaces simbólicos por ejemplo:

ln -s /home/HA.config/etc/samba/smb.cf /etc/samba/smb.cf


Ahora desmontamos /home de la siguiente manera:

Root@Zeus:~# datadisk /dev/nb0 stop
Root@Zeus:~# /etc/init.d/drbd stop


También podemos configurar SAMBA para que escuche en la interface del cluster, modificando dentro de la directiva {global} de /etc/samba/smb.cf

Código:

Interfaces = 127.0.0.1/8 10.10.10.20/24 Comprobando si todo funciona DRBD. Arrancamos drbd tanto en Zeus como en SolarUX con:

Root@Zeus:~# /etc/init.d/drbd start


Una vez iniciado comprobaremos en Zeus si ha arrancado con:

Root@Zeus:~# cat /proc/drbd


Veríamos algo así 0: cs:SyncingAll st:Primary/Secondary. Esto significa que todo ha sido arrancado perfectamente y que una sincronización completa está en marcha. Esta sincronización tarda un poco y se puede ver el progreso en /proc/drbd heartbeat:

Root@Zeus:~# /etc/init.d/Heartbeat start
Root@Zeus:~# ifconfig |grep 10.10.10.20
Root@Zeus:~# /etc/init.d/nfslock status
Root@Zeus:~# /etc/init.d/smb status
Root@Zeus:~# /etc/init.d/dhcpd status
Root@Zeus:~# /etc/init.d/postfix status


/home tiene que estar montado en cluster y todos los servicios tendrían que estar corriendo Delegando Funciones. Ahora heartbeat tiene que ser capaz de retransmitir todos los trabajos a SolarUX, lo haremos con:

Root@Zeus:~# /usr/sbin/Heartbeat/hb_standby


Ahora hacemos los pasos de arriba de heartbeat en SolarUX y comprobamos si todo funciona correctamente, si es así, delegamos funciones a Zeus.

Root@SolarUx:~# /usr/sbin/Heartbeat/hb_standby


Comprobaremos en Zeus y si es así ya casi hemos terminado.

Desconectamos el cable de red a Zeus y en unos segundos SolarUX tendría que responder a la IP virtual 10.10.10.20 y darnos servicios.

Información sacada de www.yolinux.com
Para más información:

1. Configuración cluster Linux
2. Cluster wikipedia
3. Montar un cluster 1º parte , 2º parte y 3º parte

3 comentarios:

The root of all evil's dijo...

Mi idea es montar un cluster en mi empresa para hacer de servidor WEB y a medida que se pueda añadir nodos al cluster para tener mas capacidad de proceso y balanceo dinámico de carga.

He entendido lo que explicas pero me gustaría saber mas concretamente lo del cable serie ¿que tengo que unir nodos con el? ¿no es un despliegue de cables un poco brutal o es que no lo he entendido del todo? entiendo que todo esto lo ideal seria ordenadores con formato rack... a ver si por una vez convenzo a mi jefe de que esta opción es mejor que un pc con windows.

Neztgul dijo...

Claro, tu quieres montar un cluster de manera dinámica, es decir, empezar primeramente con 3 nodos y luego ir añadiendo nodos según te sea útil o conveniente.

1ºSi, tienes que unir todos los nodos con el cable serial, aunque como bien dices, es un poco peñazo por los cables.

2º El formato rack para ordenadores está genial para este tipo de cosas,son torres muy simple, pero también son mucho más caro los ordenadores con este formato...si tu jefe te deja...

Pero vamos si tu jefe es un gran orco se puede montar de manera sencilla un cluster con Windows.

Saludos

ruty dijo...

gracias por la buena explicacion.... muy buena dime podras poner pantallazon qiuero saber la como uno los cables... y si lo fuera en windows mucho mejor!! gracias