domingo, 23 de enero de 2011

Como montar un Cluster de Alta disponibilidad en GNU/Linux

En este articulo aprenderemos a implementar un Cluster de Alta disponibilidad (AD).

Material necesario:

  • 2 maquinas con Linux
  • El paquete Heardbeat
  • un Sistema de ficheros con Journaling
  • Una Red
  • Puerto serie

¿Qué es un Cluster y para que me sirve?

Un cluster , consiste en un grupo de nodos conectados entre si que interactuan como una sola maquina (“En caso que un nodo dejase de funcionar tomaría el control el segundo nodo”) , reduciendo así considerablemente la tolerancia a fallos y caídas de servicio.

Un cluster podría servir perfectamente en el caso de un problema de Hardware nuestros clientes
tendrían igualmente servicio ya que uno de los nodos tomaría el control como maquina primaria.

¿Qué es Heartbeat?

Heartbeat es un paquete de software creado por LINUX-HA, funciona de forma similar al System V o init pero en vez de una sola máquina pasaría a ejecutar los servicios en los nodos, basándose en que no le llegan respuestas estas se hacen por medio de ping y por pulsaciones del cable serie.

¿Que es STONITH?

STONITH son la Siglas de “Shoot The Other Node In The Head” (“ Pégale un Tiro en la Cabeza al otro Nodo”). Es una técnica usada por Heartbeat que se asegura de que un servidor supuestamente muerto no interfiera con el funcionamiento del cluster, en caso de no implementarse bien esta técnica, podría dar lugar a que el cluster no funcione.

A grosso modo STONITH consiste en que el servidor secundario nota que el primario no funciona, y
este le haría un DDOS al primario para asegurarse de que ha sido un falso positivo y tomaría el nodo
secundario el control.

Preparando el Hardware

Existen 3 cosas especificas del cluster que hay que conectar, los discos, las NICs de interconexión,
el cable serial de interconexión y los cables de control de los UPS

  • Primero instalaremos los discos, pero no crearemos aun 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
  • A continuación nos haremos con un cable Serial para la comunicación PC a PC . Nos
    aseguraremos de que el cable incluya modems null y que incluya cables CTS Y RTS
  • Conectamos cada ordenador a su UPS

Instalación del Software

Para nuestro cluster necesitaremos varios paquetes de software.
Heartbeat-1.0.3, Heartbeat-pils-1.0.3, Heartbeat-stonith-1.0.3
cada uno de ellos se encuentra en los repositorios de las distribuciones o se incluye como paquete en
los CDs de instalación de esta (“ Cuando instale SUSE 9.3 me pareció verlos en la instalación) si no los encontráis podéis mirar en http://linux-ha.org los paquetes los instalaremos usando nuestro administrador de paquetes favoritos ya sea apt-get, yast,urpmi, emerge, etc.

Por ultimo nos queda instalar el servicio que queramos dar ya sea samba,apache postfix, etc.

Configurando DRBD.

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

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
}
}

Nota: Para calcular el tamaño del disco usaremos blockdev-getsize y dividiremos el resultado por dos si ambas partes dan resultado diferente elegiremos el mas grande

Creando el Sistema de Ficheros

A continuación crearemos el sistema de ficheros para Zeus ( Servidor Primario) es importante usar un sistema de ficheros con Journaling como Reiserfs, ext3, jfs, xfs.

Crearemos dos particiones del mismo tamaño en el dispositivo /dev/nb0 los dos servidores y con
Reiserfs ya que se considera mas seguro.

Instrucciones a ejecutar en Zeus

Código:

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

Le respondemos “yes” para que nos ponga a Zeus como primario.

ahora creamos el sistema de ficheros y lo montamos

Código:

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

por último si usamos una conexión Ethernet de 1Gb para la sincronización, cambiaremos los
parámetros los parámetros de esta para que nos funcione en modo fullduplex ver Activando
Fullduplex en tarjetas ethernet en este mismo foro

Configurando Heartbeat

Heartbeat tiene tres 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 Autenticación de red

Se pueden encontrar ejemplos de estos ficheros en /usr/share/doc/pakages/Heartbeat y se documentan en el fichero “Getting Started” de Heartbeat

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

ejemplo de nuestro ha.cf

Código:

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

las pulsaciones se envían por eth0, eth1 y serial /dev/ttyS0 este fichero es idéntico para todos los nodos

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:


● NFS (Network File System)
● Samba (compartir archivos Windows)
● Dhcp (asignación dinámica de IPs)
● Postfix (Servidor de Correo electrónico)

Código:

Zeus 10.10.10.20 datadisk::drbd0 nfslock nfsserver smb dhcpd postfix

Para clarificar donde están colocados los scripts diré que Ipaddr y datadisk están en
/etc/ha.d/resource.d y el resto de servicios típicos en /etc/init.d/

Heartbeat se las apaña de maravilla administrando la mayoría de servicios que vienen en los V
System init comúnmente llamados los scripts de arranque, sin embargo una de las condiciones para
que Heartbeat administre correctamente los Scripts es que tienen de tener el mismo nombre en todos
los Nodos, por lo tanto recomiendo usar una distribución idéntica en las dos maquinas así
simplificaremos la configuración y el mantenimiento.

Fichero /etc/ha.d/authkeys

authkeys es el fichero de configuración mas sencillo de todos. Contiene el método de autenticación basado en (sha1) con la clave que se usara para firmar los paquetes . este fichero tiene que ser idéntico en todos los servidores y no debe tener ningún usuario acceso de lectura a excepción de root:

Código:

auth 1
1 sha1 RandomPasswordfc970c94efb

Configuración de los Servicios

Tenemos de deshabilitar los servicios para que no sean controlados por init si no por Heartbeat
esto lo conseguiremos con el siguiente comando:

Código:

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

Nótese que deberíamos cambiar los servicios marcados en azul por los que tenemos configurados en
/etc/ha.d/haresources para servir.

Configurando /etc/fstab

Tenemos de tener especial cuidado en que la partición /home no se monte automáticamente desde /etc/fstab si existe ya una entrada para /home en dicho fichero la eliminamos y creamos esta:

Código:

/dev/nb0 /home reiserfs noauto 0 0

Nota: si home ya esta montado lo desmontamos con umount /home

Configuración del Fichero /etc/hosts

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

Código:

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 Cotarro

Ahora es el momento de configurar el servidor segundario para que monte /home desde NFS
añadiendo lo siguiente en /etc/fstab

Código:

Cluster:/home /home nfs  defaults 0 0

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

Código:

/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

Código:

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

Ahora desmontamos /home de la siguiente forma:

Código:

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.10.20/24 Comprobando si todo Funciona DRBD Arrancamos drbd tanto en Zeus como en SolarUX con:

Código:

Root@Zeus:~# /etc/init.d/drbd start
una vez iniciado comprobaremos en Zeus si ha arrancado con:

Código:

Root@Zeus:~# cat /proc/drbd
veríamos algo así 0: cs:SyncingAll st:Primary/Secondary Esto nos indica que ha sido todo arrancado correctamente 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

Código:

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 de estar corriendo Delegando Funciones Ahora Heartbeat tiene de ser capaz de retransmitir todos los trabajos a SolarUX lo haremos con:

Código:

Root@Zeus:~# /usr/sbin/Heartbeat/hb_standby
Ahora hacemos los pasos de arriba Heartbeat en SolarUX y comprobamos si todo funciona correctamente si es así delegamos funciones a Zeus

Código:

Root@SolarUx:~# /usr/sbin/Heartbeat/hb_standby
Comprobamos en Zeus y si es así ya casi está.

Administrador Contento

Desconectamos el cable de red a Zeus y en estos momentos aproximadamente unos 10 Sec SolarUX tendría de responder a la ip Virtual 10.10.10.20 y darnos Servicio

Fuente: trucolinux.com

2 comentarios:

  1. Interesante post, y que nos dices del de alto rendimiento?

    ResponderEliminar
    Respuestas
    1. saludos.

      perdona que te conteste despues de un año bueno el alto rendimiento es bueno en los cluster bajo linux y muy estable....

      Eliminar