[PC] Como montar un cluster
por
- 17/12/2007 a las 21:20 (40907 Visitas)
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.
¿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:
Con lo que el kernel limpio ha sido parcheado con openmosixCó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
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 :
En realidad es como viene por defecto, solo hay que cambiar el CONFIG_MOSIX_DISCLOSURE a 3, que creo que venia a 1.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 ...
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:
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)Código:ID_Nodo IP(o hostname) Tamaño ------------------------------------------- Nodo1 192.168.0.1 1 Nodo2 192.168.0.2 1
Pues ya casi lo tenemos señores, una vez que esto esta configurado en todos y cada uno de los nodos ejecutaremos:
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).Código:setpe -w -f /etc/openmosix.map
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:
EDIT 2:Código:1716791964347553819009287995721211568842183683107234006889668297626600190773861265374746078134679968 1000000
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