lunes, 19 de noviembre de 2012

Generando un cluster de alta disponibilidad


Esta vez estuve trabajando con clusters, me vi forzado a investigar como desarrollar un cluster de alta disponibilidad con heartbeat, ultimamente ya no trabajo con OpenSuse, creo haberlo mencionado en uno de los posts anteriores y decidi trabajar con Debian por su alto desempeño y estabilidad de la cual e quedado maravillado.

Un cluster en resumidas cuentas no es nada mas que un conjunto de ordenadores en red que funcionan como uno solo ya sea para evitar problemas de fallos o para hacer que todos los ordenadores trabajen como uno solo sumarizando sus recursos y realizar calculos enormes que un solo ordenador no podria realizar.

Empezaremos el desarrollo con heartbeat, este es HA (High Availability). Antes de continuar cabe mencionar que debian ya tiene este paquete en su repositorio solo basta con instalar y listo no hay que hacer mucho pero como siempre me gusta hacer las cosas desde cero y para los que les gusta hacerlo así, este post les gustará

Hay varias razones del por que usar un paquete de debian y otras muchas razones del por que hacerlo desde cero, esto va en dependencia de la necesidad de cada quien, ultimamente me agrada mas trabajar con la paqueteria de debian que compilar paquetes, sin embargo siempre es interesante hacerlo por ambas formas siempre hay algo nuevo que aprender:

Empezaremos instalando todos los paquetes necesarios para la compilacion, hago mencion que esto fue realizado con un servidor usando debian squeeze, hago mencionar que es 64 bits y es la arquitectura de mi preferencia x86 ya la considero obsoleta o al menos ya no veo en mi campo ese tipo de hardware.

Los siguientes pasos son complementarios para realizar la instalación de heartbeat, antes de realizar estos pasos favor leer:
http://www.linux-ha.org/doc/users-guide/users-guide.html

Los pasos de la instalación se muestran en el siguiente link:
http://www.linux-ha.org/doc/users-guide/_building_and_installing_from_source.html

Antes de proceder recomiendo que lean muy bien el users guide, pero como se que muchos no lo harán no haré un paso a pass ya que no pretendo copiar y pegar algo que ya esta hecho por que el objetivo no es duplicar lo que ya está, sino solo anexar o complementar, por lo tanto aquí me salto los pasos que se suponen descargas los paquetes, recomiendo que lean bien la guía y anexar lo que muestro aquí.

1) Instalamos la paquetería:
apt-get install hgsvn uuid-dev build-essential flex bison libsnmp-dev openipmi python autoconf libtool xsltproc libextutils-pkgconfig-perl libglib2.0-dev libxml2-dev libbz2-dev

2) Primero empezamos instalando algo que se llama Cluster Glue, entonces primero descargamos el tar, ya sea el ultimo release (Desarrollo) o el mas estable, yo obte por el estable. (Ver y leer el link de la guia de usuario)

3) Descargamos el paquete cluster-glue
http://www.linux-ha.org/doc/users-guide/_building_and_installing_from_source.html#_downloading_cluster_glue_sources

4) Antes de proceder a compilar descargar el patch para el cluster-glue, ya que sin este patch dará un error que no permitirá compilarlo completamente por un error de tipos de variables:

cat > /gatomic.h.patch << "EOF"
--- /usr/include/glib-2.0/glib/gatomic.h.orig   2010-04-14 18:16:59.853768126 +0000
+++ /usr/include/glib-2.0/glib/gatomic.h        2010-04-14 18:17:39.409810040 +0000
@@ -64,16 +64,16 @@
 #else
 # define g_atomic_int_get(atomic) \
  ((void) sizeof (gchar [sizeof (*(atomic)) == sizeof (gint) ? 1 : -1]), \
-  (g_atomic_int_get) ((volatile gint G_GNUC_MAY_ALIAS *) (void *) (atomic)))
+  (g_atomic_int_get) ((volatile gint G_GNUC_MAY_ALIAS *) (volatile void *) (atomic)))
 # define g_atomic_int_set(atomic, newval) \
  ((void) sizeof (gchar [sizeof (*(atomic)) == sizeof (gint) ? 1 : -1]), \
-  (g_atomic_int_set) ((volatile gint G_GNUC_MAY_ALIAS *) (void *) (atomic), (newval)))
+  (g_atomic_int_set) ((volatile gint G_GNUC_MAY_ALIAS *) (volatile void *) (atomic), (newval)))
 # define g_atomic_pointer_get(atomic) \
  ((void) sizeof (gchar [sizeof (*(atomic)) == sizeof (gpointer) ? 1 : -1]), \
-  (g_atomic_pointer_get) ((volatile gpointer G_GNUC_MAY_ALIAS *) (void *) (atomic)))
+  (g_atomic_pointer_get) ((volatile gpointer G_GNUC_MAY_ALIAS *) (volatile void *) (atomic)))
 # define g_atomic_pointer_set(atomic, newval) \
  ((void) sizeof (gchar [sizeof (*(atomic)) == sizeof (gpointer) ? 1 : -1]), \
-  (g_atomic_pointer_set) ((volatile gpointer G_GNUC_MAY_ALIAS *) (void *) (atomic), (newval)))
+  (g_atomic_pointer_set) ((volatile gpointer G_GNUC_MAY_ALIAS *) (volatile void *) (atomic), (newval)))
 #endif /* G_ATOMIC_OP_MEMORY_BARRIER_NEEDED */

#define g_atomic_int_inc(atomic) (g_atomic_int_add ((atomic), 1))
EOF

3) No olvidemos agregar el grupo haclient y el usuario hacluster:
groupadd haclient
useradd -g haclient hacluster

4) Compilamos e instalamos
http://www.linux-ha.org/doc/users-guide/_building_and_installing_from_source.html#_building_cluster_glue

5) Descargamos el heartbeat
http://www.linux-ha.org/doc/users-guide/_building_and_installing_heartbeat_from_source.html#_downloading_heartbeat_sources

6) Compilamos e instalamos el paquete
http://www.linux-ha.org/doc/users-guide/_building_and_installing_heartbeat_from_source.html#_building_heartbeat

Listo ya tenemos instalado heartbeat desde cero sin embargo ahora veamos como sería instalarlo a la manera de debian:

# aptitude install heartbeat cluster-glue cluster-agents pacemaker

Como vemos depende de la necesidad de cada quien, ambos métodos de instalación funcionan pero quizás mas de algún usuario vea útil ver que opciones de compilación permite cada paquete.

No hay comentarios: