Linux Clusters 3/3 - El clúster Ubuntu - 1ra. parte
- viernes, abril 04 2008 @ 12:46 CEST
- Autor: linxe
- Lecturas 23,643

Lo prometido es deuda y le traigo la tercera entrega de mi serie de artículos sobre clustering en Linux, es específico un clúster que acabo de armar ahora usando Ubuntu como sistema base. Por la extensión de este tema lo voy a tener que partir en 2, primero les traigo la instalación y configuración del nodo maestro y en la segunda parte veremos la de los nodos esclavos.
En el pasado artículo comenté que este iba a tratar sobre el uso general de la cola de trabajo y un poco de programación en MPI con "hola mundo" pero en paralelo, pero se me hace más interesante narrar esta experiencia dado que lo otro fácilmente lo pueden hacer leyendo los manuales y guías.
Muchas gracias a las personas interesadas en esta serie de artículos por su comentarios.
English version here: http://linxe-eye.blogspot.com/2008/04/ubuntu-cluster-master-node.html
Antecedentes
En esta ocasión mi Instituto (Cinvestav - www.ira.cinvestav.mx) me pidió una solución fija y similar a la anterior montada con ROCKS, esta serviria como un pequeño clúster general y como laboratorio de enseñanza para bioinformática. Este clúster fue bautizado como Beagle, el Instituto puso los equipos y con ayuda de mi buen amigo LuisD pusimos la mano de obra. El diseño incluye un nodo maestro que sirve de acceso, monitoreo y envió de trabajos, y 10 nodos esclavos que hará la parte de cómputo mediante exportación de /home por NFS, una cola de trabajos con SGE (Sun Grid Engine), Ganglia como monitor de los sistemas y soporte para MPI.
El sistema base de inicio fue el mismo ROCKS, pero lamentablemente tuvimos problemas de compatibilidad y no nos fue posible usarlo, y aunque no me gusta mucho Ubuntu, pues ese fue la elección ya que era totalmente compatible y disponíamos de algunos tutoriales y guías para clústers con Debian.
Hardware
Instalación del Nodo Maestro
Tenemos una arquitectura amd64, por lo que usamos Ubuntu Desktop para amd64, descargamos la ISO, la quemamos e instalamos con las siguientes particularidades:
hda1 : 180 Mb : /boot hda2 : 2.0 Gb : swap hda4 : 24 Gb : / hda5 : 4.6 Gb : /tftpboot hda6 : 22 Gb : /var hda7 : 22 Gb : /usr sda1 : 2.0 Gb : swap sda2 : 292 Gb : /home
Terminamos la instalación, reiniciamos, accesamos y con una terminal nos pasamos a ser root y dar una contraseña:
sudo su - passwd
DHCP
Un servidor DHCP se monto para comunicar con los nodos:
apt-get install dhcp3-serverEditamos /etc/dhcp3/dhcpd.conf para dar de alta la red 197.1.1.0/24 y agregar las MACs de cada nodo, incluyendo el nombre de host y el cargador de arranque por red (PXE). Nuestro archivo quedo:
# dhcp.conf # Network for the Beagle Cluster # Juan Caballero @ Cinvestav 2008 ddns-update-style none; subnet 197.0.0.0 netmask 255.0.0.0 { default-lease-time 1200; max-lease-time 1200; option routers 197.1.1.1; option subnet-mask 255.0.0.0; option domain-name "local"; option domain-name-servers 197.1.1.1; option nis-domain "beagle"; option broadcast-address 197.255.255.255; deny unknown-clients; allow booting; allow bootp; if (substring (option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00002") { # ia64 filename "elilo.efi"; next-server 197.1.1.1; } elsif ((substring (option vendor-class-identifier, 0, 9) = "PXEClient") or (substring (option vendor-class-identifier, 0, 9) = "Etherboot")) { # i386 and x86_64 filename "pxelinux.0"; next-server 197.1.1.1; } else { filename "/install/sbin/kickstart.cgi"; next-server 197.1.1.1; } host beagle.local { hardware ethernet 00:e0:7d:b4:e1:13; option host-name "beagle.local"; fixed-address 197.1.1.1; } host node00.local { hardware ethernet 00:1b:b9:e2:0d:18; option host-name "node00.local"; fixed-address 197.1.1.100; } host node01.local { hardware ethernet 00:1b:b9:e1:cf:6a; option host-name "node01.local"; fixed-address 197.1.1.101; } host node02.local { hardware ethernet 00:1b:b9:e1:be:6e; option host-name "node02.local"; fixed-address 197.1.1.102; } host node03.local { hardware ethernet 00:1b:b9:cf:f3:55; option host-name "node03.local"; fixed-address 197.1.1.103; } host node04.local { hardware ethernet 00:1b:b9:e2:14:06; option host-name "node04.local"; fixed-address 197.1.1.104; } host node05.local { hardware ethernet 00:1b:b9:ce:85:9a; option host-name "node05.local"; fixed-address 197.1.1.105; } host node06.local { hardware ethernet 00:1b:b9:e2:0c:5f; option host-name "node06.local"; fixed-address 197.1.1.106; } host node07.local { hardware ethernet 00:1b:b9:cf:f7:29; option host-name "node07.local"; fixed-address 197.1.1.107; } host node08.local { hardware ethernet 00:1b:b9:cf:f3:25; option host-name "node08.local"; fixed-address 197.1.1.108; } host node09.local { hardware ethernet 00:1b:b9:e2:14:9f; option host-name "node09.local"; fixed-address 197.1.1.109; } }En el archivo /etc/defaults/dhcp3-server especificamos la tarjeta por la cual se activa DHCP
Interfaces="eth1"Y reiniciamos el servicio:
/etc/init.d/dhcp3-server restart
Más ajustes de red
Editamos /etc/hosts para incluir todos los nodos, así:
127.0.0.1 localhost 197.1.1.1 beagle.local beagle 197.1.1.100 node00.local node00 197.1.1.101 node01.local node01 197.1.1.102 node02.local node02 197.1.1.103 node03.local node03 197.1.1.104 node04.local node04 197.1.1.105 node05.local node05 197.1.1.106 node06.local node06 197.1.1.107 node07.local node07 197.1.1.108 node08.local node08 197.1.1.109 node09.local node09También se creo un archivo de texto en /etc/machines con los nombres de todos los esclavos para usarse posteriormente en scripts:
node00 node01 node02 node03 node04 node05 node06 node07 node08 node09
NFS
Instalamos los paquetes:
apt-get nfs-common nfs-kernel-serverEditamos /etc/exports para exportar /home y /tftpboot:
/home 197.1.1.0/24(rw,no_root_squash,sync,no_subtree_check) /tftpboot 197.1.1.0/24(rw,no_root_squash,sync,no_subtree_check)E iniciamos el servicio:
exportfs -av
Arranque con PXE
Instalamos tftpd-hpa:
apt-get install tfptd-hpaEditamos /etc/defaults/tfptd-hpa:
#Defaults for tftpd-hpa RUN_DAEMON="yes" OPTIONS="-l -s /tftpboot"Descargamos el netboot para Ubuntu amd64:
cd /tftpboot wget http://tezcatl.fciencias.unam.mx/ubuntu/dists/gutsy/main/installer-amd64/current/images/netboot/netboot.tar.gz tar zxvf netboot.tar.gzReiniciamos el servicio:
/etc/init.d/tftpd-hpa restart
SGE
Para SGE agregamos un usuario sgeadmin, descargamos los archivos y corremos el script de instalación, muchas opciones se toman por defecto:
adduser sgemaster wget http://gridengine.sunsource.net/download/SGE61/ge-6.1u3-common.tar.gz wget http://gridengine.sunsource.net/download/SGE61/ge-6.1u3-bin-lx24-amd64.tar.gz tar zxvf ge-6.1u3-common.tar.gz tar zxvf ge-6.1u3-bin-lx24-amd64.tar.gz ./install-qmaster
Servidor Web
Instalamos Apache:
apt-get install apache2
Ganglia monitor
Primero instalamos las dependencias, descargamos las fuentes y compilamos para tener la versión web:
apt-get install rrdtool librrds-perl librrd2-dev php5-gd wget http://downloads.sourceforge.net/ganglia/ganglia-3.0.7.tar.gz?modtime=1204128965&big_mirror=0 tar zxvf ganglia* cd ganglia* ./configure --with-gmetad make mkdir /var/www/ganglia cp web/* /var/www/gangliaEditamos la configuración de Apache para acceso a ganglia en /etc/apache2/sites-enabled/000-default
Ahora instalamos lo paquetes ya compilados (cuidado con las versiones que se instaló desde fuente y estas):
apt-get install ganglia-monitor gmetadSe puede editar los archivos /etc/gmond.conf y /etc/gmetad.conf para personalizar la configuración.
Otros programas
Usamos apt-get o paquetes compilados, en nuestro caso por ejemplo agregamos un servidor SSH, los compiladores básicos y soporte para MPI:
apt-get install openssh-server gcc g++ g77 mpich-bin openmpi-bin lam-runtime
En la siguiente parte instalaremos y configuraremos los nodos esclavos.
Enlaces:
Autor: Juan Caballero (linxe (arroba) glib . org . mx)