Mostrar feed RSS

JoJo_ReloadeD

[PC] Como montar un cluster

Calificación: 4 votos, 4.75 promedio.
Andaba esta mañana mirando unas cosas en mi blog, y me he encontrado con un articulo que hice hace ya algun tiempo, y que a alguien le puede parecer interesante.

En el describo paso a paso como construir un cluster con hardware sacado literalmente de la basura.

En fin, ahi va, espero que os guste

---

Hace no mucho, mi hermano y un amigo me dieron respectivamente estas dos placas base y micro:
# Placa Asus con un K6-III a 400mhz
# Placa Msi con un P3 a 800mhz

Y bueno, me dije yo, ¿para que voy a usarlos si ya tengo firewall, servidor web y 2 pc's de escritorio? Obviamente el dejarlos cogiendo polvo no era una opcion xD

Asi que en un principio pense en usar el P3 en algun proyecto de modding perro, meterlo dentro de la caja de un video vhs o algo asi, pero luego pense que por que no los ponia a trabajar juntos, y asi de paso veia como funcionaba eso de los clusters.


Un pequeño cluster embebido en una caja sobremesa de un antiguo 8088

¿Que es un cluster?

Un cluster no es ni mas ni menos que un conjunto de maquinas, conectadas entre si en red y funcionando en paralelo y compartiendo recursos para conseguir mayor eficacia que un solo equipo, aunque este sea de gran rendimiento.

¿Como se consigue esto en el ambito profesional?

Haciendo un cluster de servidores.
Sin ir mas lejos el mayor superordenador de europa, el Mare Nostrum esta formado por 10240 procesadores (Amd Opteron, si no me equivoco) divididos en infinidad de equipos (en servidores es mas que comun que cada equipo tenga 2 o 4 procesadores) conectados entre si.

Otros ejemplos de supercomputacion conseguida mediante el 'clustering' son las granjas de renderizado de los grandes estudios de cine, como el de Industrial Light & Magic, que en 2002 construyeron una de estas granjas para la produccion de El ataque de los clones, formado por 2000 equipos comunes (Pentium 4, si no recuerdo mal), como podemos leer aqui.

¿Y en un plan mas casero como seria?

#

Pues como nosotros quisieramos. La configuracion es exactamente igual para 2 nodos (maquinas) que para 200.000

En este caso, y con un cluster montado con un P3 a 800 (1600 bogomips) y un K6-III a 400 (800 bogomips) pues como que no se consigue un gran rendimiento (mi P4 a 3000 rinde unos 6000 bogomips) xD, pero como minimo aprendemos, no?

Nota para aquellos que esteis a la que salta: Ya, ya se que los bogomips no son una medida fiable del rendimiento de una maquina, es solo el tiempo que se tarda en recorrer un bucle del inicio del kernel, pero sirve para darnos una idea general de la diferencia de rendimiento entre varias maquinas

Bueno, al tema, he aqui un pequeño tutorial para construir un cluster, en el cual voy a obviar temas que de entrada deben de estar resueltos tales como:
# Necesitamos n (con n>1) equipos funcionando.
# Dichos equipos tienen que tener un sistema Linux base instalado.
# Dichos equipos tienen que estar conectados en red.
# Haran falta conocimientos acerca de como recompilar el kernel.

Tampoco voy a entrar en discusiones acerca del hardware a usar. Cuanto mas rapido sea, pues mejor. Es obvio, no ?

Sobre la red a emplear para comunicar las redes, como minimo una ethernet a 10MBits, siendo recomendable una de 100Mbits. Una gigabit no ofrece una gran diferencia respecto a la de 100, aun siendo bastante mas cara. En este sentido es mas importante la latencia que el ancho de banda de la red. Asi que un switch que incorpore un buen algoritmo de balanceo de carga seria de agradecer.

Bien, teniendo todo esto veamos los fundamentos del clustering:

Necesitamos que un sistema basado por varios equipos se comporten como uno solo y estos se repartan los trabajos entre ellos de forma trasparente, de forma que el usuario ni se de cuenta de ello.

En este caso vamos a emplear la solucion que nos da OpenMosiX, que es justamente lo que necesitamos: Balanceo de carga trasparente y hecha al nivel del kernel. Wapo.

En la practica esto se consigue parcheando un kernel vainilla (uno sin parches) con el openmosix, y ya el mismo se encargara de todo

Bien, pues vamos alla, bajamos de la web de openmosix el parche del kernel. La ultima version estable del proyecto es la 2.4.26, asi que necesitaremos tambien el kernel vainilla 2.4.26, el de kernel.org.

Una vez todo listo y descomprimido en /usr/src, ejecutamos:

Código:
mv /root/openMosix-2.4.26-1.gz /usr/src/linux-2.4.26
cd /usr/src/linux-2.4.26
zcat openMosix-2.4.26-1.gz | patch -Np1
Con lo que el kernel limpio ha sido parcheado con openmosix

A continuacion hay que configurar dicho kernel para nuestra maquina, a divertirse solo hay que tener en cuenta un nuevo menu, el de openmosix, en el que configuraremos lo siguente, tal y como viene en el .config :

Código:
...
CONFIG_MOSIX=y
# CONFIG_MOSIX_TOPOLOGY is not set
CONFIG_MOSIX_UDB=y
# CONFIG_MOSIX_DEBUG is not set
# CONFIG_MOSIX_CHEAT_MIGSELF is not set
CONFIG_MOSIX_WEEEEEEEEE=y
CONFIG_MOSIX_DIAG=y
CONFIG_MOSIX_SECUREPORTS=y
CONFIG_MOSIX_DISCLOSURE=3
CONFIG_QKERNEL_EXT=y
CONFIG_MOSIX_DFSA=y
CONFIG_MOSIX_FS=y
CONFIG_MOSIX_PIPE_EXCEPTIONS=y
CONFIG_QOS_JID=y
...
En realidad es como viene por defecto, solo hay que cambiar el CONFIG_MOSIX_DISCLOSURE a 3, que creo que venia a 1.

Bien, hacemos lo tipico.. make bzImage... modules... configuramos el lilo/grub ... ya sabeis, y reiniciamos la maquina con el kernel openmosix

Okey, ahora nos hacemos con los utiles para manejar el cluster, es decir, las opemosix_tools. Las bajamos, las compilamos y las instalamos.

Esto nos creara el fichero de configuracion de openmosix /etc/openmosix.map en el que configuraremos nuestro cluster.

Este archivo tiene la siguente estructura:

Código:
ID_Nodo IP(o hostname) Tamaño
-------------------------------------------
Nodo1 192.168.0.1 1
Nodo2 192.168.0.2 1
Hay que crear en dicho archivo una linea por cada nodo, en la cual pondremos un nombre a ese nodo (ID_Nodo), su ip (o su hostname especificado en el /etc/hosts de TODAS las maquinas del cluster) y el tamaño (numero de procesadores que tiene el nodo)

Pues ya casi lo tenemos señores, una vez que esto esta configurado en todos y cada uno de los nodos ejecutaremos:

Código:
setpe -w -f /etc/openmosix.map
Y listo! El cluster esta funcionando de manera trasparente. Podemos monitorizarlo con las ordenes mps (ps para el cluster) mtop (top para tal...) y mosmon (monitor del cluster).

Solo restaria poner dicha orden en el arranque del sistema, para ello vemos que en las fuentes del openmosix_tools, en scripts, hay uno muy mono llamado openmosix lo copiamos a /etc/init.d/ y hacemos un update-rc.d y listo, todo automatico

Bien, pues como habeis visto, esto mas facil no puede ser, asi que ale, a montar clusters a diestro y siniestro ! xDDDD

EDIT:
Como no tenia ni idea de para que usar el cluster, y los del seti@home se han vendido a la mierda del boinc, y hasta para usarlo en linux hace falta interfaz grafica, lo he puesto a calcular π con una precision de un millon de decimales (por usar un numero redondo), tal como hicieron en 1973 con un CDC 7600

Aqui estan los ultimos 100 digitos de ese millon de decimales:

Código:
1716791964347553819009287995721211568842183683107234006889668297626600190773861265374746078134679968 1000000
EDIT 2:
Me aburria y lo que he hecho es instalarle el servidor X y fluxbox para ver que tal tira en estos cacharros, y para mi asombro va infinitamente suave, aun poniendole antialiasing y usando programas modernos como firefox , he aqui una captura de pantalla en la que se ve como balancea la carga entre los 2 nodos: Cluster bajo X

Enviar "[PC] Como montar un cluster" a ¡Menéame! Enviar "[PC] Como montar un cluster" a Technorati Enviar "[PC] Como montar un cluster" a Digg Enviar "[PC] Como montar un cluster" a del.icio.us Enviar "[PC] Como montar un cluster" a Google Enviar "[PC] Como montar un cluster" a Finclu Enviar "[PC] Como montar un cluster" a Copada Enviar "[PC] Como montar un cluster" a StumbleUpon Enviar "[PC] Como montar un cluster" a Reddit Enviar "[PC] Como montar un cluster" a FaceBook

Categorías
Sin categoría

Comentarios

  1. Avatar de Locke
    Muy interesante el articulo, enhorabuena
  2. Avatar de nandove
    Recuerdo que el primer Cluster(o el abuelo de los primeros cluster) que vi eran 16 Amiga 2000 030/50MHz y 8Mb ram cada uno ofreciendo la nada desdeñable cifra de 250Mips allá por el año 1989... era impresionante ver como sacaban 15 fotogramas en calidad SVHS a la hora...
  3. Avatar de otto_xd
    Muy interesante, muchas gracias.

    Puedes hacer pruebas de tiempo con esos calculos?PAra ver si mejora o empeora :P

    Saludos
  4. Avatar de X-Code
    En efecto, muy interesante el articulo, a ver si algún dia me da por hacer un cluster, componentes seguro que no me faltan xD
  5. Avatar de egleuterio
    Como odio ir corto de tiempo...........eres un crack tio, me encantaria poder aplicar eso algun dia......
  6. Avatar de pinchacantos
    Un artículo completisimo y muy bueno.

    Gracias por compartir con nosotros tu sabiduria

    Saludos.
  7. Avatar de Aiken
    cojonudo tio ... solo tengo una duda ... la salida vga por cual de los dos nodos sale? por los dos? se configura cual? bueno y lo mismo para los inputs (teclado,raton).
  8. Avatar de JoJo_ReloadeD
    La salida vga y de teclado.. pues por cualquiera de los dos nodos.. de hecho yo ni la usaba, entraba por ssh o por vnc al escritorio X
  9. Avatar de dardo
    En realidad existen otros tipos de cluster. Está muy bien eso de interconectar equipos para que se repartan el trabajo y tarden menos en completar procesos. Eso es lo que se llama cluster de Alto rendimiento.

    En la cara B del disco tenemos los conjuntos de equipos en los que si uno falla otro puede tomar el control de los servicios (por ejemplo, conexiones entrantes) y reemplazar sin que se note que el equipo "titular" se ha caído. Eso es lo que se llama cluster de alta disponibilidad.

    Existen sistemas operativos que desde sus inicios están pensados para clustering, como por ejemplo (Open)VMS.

    Luego esos están los que yo llamo de "tipo mixto" que en realidad no se como se llaman, que son clusters de alto rendimiento en el que los nodos más críticos son a su vez clusters de alta disponibilidad.

    De momento eso es todo.
  10. Avatar de dardo
    El Mare Nostrum es el tercer computador más potente de Europa. EL primero es un BlueGene.

    Y el segundo si que es un cluster que como la mayoría de cluster actuales son unos despreciables ordenadores "de sobremesa" que monta HP con sus BLP4xx y con GNU/linux sobre ellos y que no tengo más remedio que conocer aunque sea solo de aspecto pues tenemos un par de esos en el trabajo, un poco menos tochos, eso si.
  11. Avatar de elmismo-86
    Hola, soy elmismo-86 y soy nuevo. Quiero saludar a todos y nada. Un saludo
  12. Avatar de DMusta1ne
    JoJo, exkisito el artículo, ya tengo otra nueva idea para cuando monte el servidor

    Un saludo xD