Hola Visitante

Autor Tema: Crear un cluster / poner en paralelo ordenadores  (Leído 4812 veces)

Berni69

  • Administrator
  • *****
  • Mensajes: 25
    • Ver Perfil
Crear un cluster / poner en paralelo ordenadores
« en: Abril 12, 2009, 03:02:26 pm »
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.

http://openmosix.sourceforge.net/

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


informacion original:
http://www.gp32spain.com/foros/blog.php?b=905

Berni69

  • Administrator
  • *****
  • Mensajes: 25
    • Ver Perfil
Re: Crear un cluster / poner en paralelo ordenadores
« Respuesta #1 en: Abril 13, 2009, 09:29:27 am »
releyendo el tema y con la idea que me dio gscabi... podriamos parchear y recompilar el kernel a las foneras para usarlas de servidor web, ftp,... asi se distribuirian la carga. jejje ahora cuando vuelva a pedir el serial ya que tuve bastantes problemas con el pedido del otro....  :-\\\\

Berni69

  • Administrator
  • *****
  • Mensajes: 25
    • Ver Perfil
Re: Crear un cluster / poner en paralelo ordenadores
« Respuesta #2 en: Abril 13, 2009, 04:06:01 pm »
de moemnto he conseguido compilar el toolchain sin problemas... para la proxima ya veremos, la proxima sera con el parche ejeje...

NachoPistacho

  • Full Member
  • ***
  • Mensajes: 161
    • Ver Perfil
Re: Crear un cluster / poner en paralelo ordenadores
« Respuesta #3 en: Abril 16, 2009, 07:57:22 am »

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.


Para los curiosos:
Mare nostrum