Está en la página 1de 4

Cluster • DESARROLLO

Cluster
Cluster sencillo
sencillo con
con MPI
MPI

ASALTO AL
TRASTERO

Catsi, Fotolia
Si tenemos equipos antiguos guardados en el trastero y no sabemos

qué hacer con ellos, ha llegado la hora de desempolvarlos y

aprovecharlos para construir un cluster básico que nos permita eje-

cutar aplicaciones utilizando el Interfaz de Transferencia de Men-

sajes (MPI). POR J.J. SÁNCHEZ TESTAL

H
oy en día cada vez son necesa- Desde su creación en Junio de 1994 ha La Figura 1 muestra gráficamente la
rios más recursos para procesar sido muy utilizado, apareciendo varias estructura de nuestra red.
cierta información en investiga- implementaciones de este estándar,
ciones científicas, surgiendo la necesi- siendo las más utilizadas las que se Instalación
dad de crear grandes computadoras u muestran en la tabla 1. Instalaremos en todos los equipos la dis-
ordenadores con gran capacidad de pro- Seleccionaremos para este artículo la tribución Debian Etch v.4.0 r2 utilizando
ceso, pero con un reducido coste econó- implementación MPICH, por ser la más la opción de instalación por red de un
mico. sencilla de utilizar y por soportar siste- CD mínimo, que podremos obtener
MPI (Message Passing Interface o Inter- mas heterogéneos. desde la página oficial de Debian [4].
faz de Paso de Mensajes) es un estándar La instalación se realizará validando
que define la sintaxis y la semántica de Estructura del Cluster las opciones que aparecen por defecto
las funciones contenidas en una librería Para esta ocasión vamos a disponer de 3 en el asistente, especificando la
de paso de mensajes diseñada para ser equipos con las características que apa- configuración de red de cada uno de los
utilizada con aplicaciones ejecutadas en recen en la tabla 2, y de un pequeño equipos. Llegados al punto de los pro-
sistemas con múltiples procesadores. switch de 8 puertos 10/100 Mbps, todo gramas a instalar seleccionaremos sis-
El paso de mensajes es un modelo de ello recuperado del trastero, con los que tema estándar.
comunicación ampliamente usado en formaremos la red de la que se compon- La Figura 2 muestra la opción que
computación paralela que permite reali- drá nuestro cluster. debe seleccionarse.
zar agrupamiento de máquinas para tra-
bajar en un fin común. Tabla 1: Implementaciones MPI
MPI es una librería de funciones y
Denominación Detalles
macros que pueden ser usados en C y LAM/MPI[1] Utiliza un demonio activo en cada nodo y proporciona ciertas herramientas
Fortran para desarrollar programas y que de monitorización
aprovechen la existencia de múltiples OpenMPI[2] Es descendiente directo de LAM/MPI, en continuo desarrollo, y resulta un
procesadores por medio del paso de buen candidato para usar en el futuro.
MPICH[3] Independiente de la arquitectura utilizada y fácilmente portable.
mensajes.

WWW.LINUX- MAGAZINE.ES Número 38 57


DESARROLLO • Cluster

Una vez realizada la instalación y rei- ocurrir que no se haya instalado el del paquete de herramientas de comuni-
niciado el equipo, sólo nos queda paquete nfs-utils o bien que inicial- cación segura del protocolo SSH/SecSH
comentar la línea del fichero mente no se hayan cargado, por lo que para redes:
/etc/apt/sources.list que hace referencia tendremos que hacerlo nosotros a mano
al cd-rom como origen de paquetes a ahora: apt-get install openssh-server
instalar para desactivarla.
/sbin/portmap Desde el directorio home del usuario
Configuración del Nodo /usr/sbin/rpc.mountd que vaya a tener permisos para ejecutar
Maestro /usr/sbin/rpc.nfs aplicaciones utilizando mpich, genera-
El primer paso es configurar una car- /usr/sbin/rpc.statd mos sus claves públicas y privadas.
peta compartida desde el servidor acce-
sible desde todos los nodos de la red, Modificamos el fichero /etc/hosts.allow cd $HOME
donde ubicaremos ciertos archivos para permitir el acceso de los nodos al ssh-keygen -t dsa
necesarios y la instalación de mpich. recurso compartido. Incluiremos una
Vamos a utilizar NFS (Network File línea con el formato que se especifica a Nos aparecerán una serie de preguntas a
System, Sistema de Archivos de Red), continuación para cada nodo. las que contestaremos con el valor por
protocolo que permite acceder a fiche- defecto. La ejecución de este comando
ros remotos dentro de una red tratándo- portmap: direccion_ipnodo creará una carpeta denominada .ssh,
los de forma local. Como este paquete donde se encuentran las claves públicas
estará incluido dentro de nuestra distri- Editamos el fichero /etc/hosts.deny y y privadas generadas, y el archivo
bución, podemos instalarlo cómoda- añadimos la siguiente línea para que authorized_keys, que contiene las claves
mente utilizando la herramienta de ins- ningún equipo, excepto los especifica- públicas de los equipos que tendrán
talación de paquetes. dos en el fichero host.allow, pueda acce- acceso al nuestro.
der a este recurso. Copiaremos la clave pública al recurso
apt-get installU compartido para que esté accesible para
nfs-kernel-server portmap: ALL los nodos. Se recomienda la siguiente
nomenclatura:
Creamos la carpeta que se va a compartir: Nos falta añadir al fichero /etc/hosts
los nodos esclavos según la nomencla- cp .ssh/id_dsa.pub U
mkdir /mnt/compartido tura: /mnt/compartido/U
root_mastermpi.pub
Y configuramos NFS para que permita el dirección_ip nombre_del_equipo
acceso remoto desde otros equipos de la 192.168.0.75 esclavo1mpi Ejecutaremos ssh-agent -s y ssh-add para
red. Editamos el archivo /etc/exports aña- que desde el maestro no se pida la clave
diendo una línea por cada equipo que El siguiente paso que debemos dar es si la hemos definido. Llegados a este
vaya a acceder al recurso. establecer los cauces de comunicación punto sólo nos queda instalar y configu-
entre el nodo maestro y los esclavos. rar MPICH, para lo cual necesitaremos
/mnt/compartidoU Para hacerlo podemos utilizar rsh instalar los paquetes necesarios para
192.168.0.75(rw,sync) (Remote Shell) [5] o ssh (Secure Shell) compilación.
[6], entre otras opciones. En nuestro
Actualizamos la información de este caso utilizaremos el protocolo ssh, apt-get installU
archivo para NFS basado en algoritmos de cifrado de crip- build-essential gfortran gccU
tografía asimétrica, que utiliza un par de bzip2
exportfs -ra claves pública y privada, y que propor-
ciona medidas de seguridad muy supe- Tabla 3: Parámetros de
Verificamos que se encuentran carga- riores a rsh. No es objeto de este artículo Configuración de MPICH
dos todos los demonios necesarios para explicar en qué consiste este mecanismo
Parámetro Descripción
nfs: de cifrado, pero para los lectores curio-
-prefix Especifica dónde se
sos que deseen más información, hay un
instalará la biblioteca
rpcinfo -p excelente artículo al respecto en la Wiki- -with-device Dispositivo asociado
pedia [7]. ch_p4: Nodos SMP y sistemas
Deben aparecer los servicios nfs, Primero debemos instalar el paquete heterogéneos
mountd y portmap. De no ser así, puede Openssh [8], que es una versión libre globus2: Sistema con globus
instalado.
Tabla 2: Características Equipos ch_shmem: Sistemas basados en
memoria compartida
Tipo Especificaciones Técnicas -with-arch Arquitectura utilizada
Nodo Maestro Pentium III 833 Mhz, 256 Mb Ram, 4 Gb HDD, Tarjeta red 10/100 Mbps -rsh Mecanismo de
Nodos Esclavos Pentium III 833 Mhz, 128 Mb Ram, 4 Gb HDD, Tarjeta red 10/100 Mbps comunicación a utilizar

58 Número 38 WWW.LINUX- MAGAZINE.ES


Cluster • DESARROLLO

192.168.0.74:/mnt/compartidoU
/mnt/compartido nfs rw U
0 0

Comprobaremos que todo funciona


correctamente montando la unidad.

mount /mnt/compartido

Seguidamente establecemos los cauces


de comunicación a través de ssh, igual
que hicimos para el caso del nodo maes-
tro, instalando el paquete openssh-
server, y creando las claves pública y
privada, aunque en este caso añadire-
mos la clave pública del nodo maestro al
Figura 1: Estructura y Configuración de los equipos del Cluster. archivo authorized_keys para permitir la
conexión desde este equipo al nodo
Descargamos el archivo fuente de esta determinar el protocolo de comunicación a esclavo.
biblioteca desde la página de MPICH [3] y utilizar. Como copiamos la clave pública en el
lo descomprimimos. recurso compartido y lo tenemos ya
vi /etc/profile accesible, ejecutaremos la siguiente ins-
tar xvzf mpich.tar.gz >PATH=$PATH:U trucción:
/mnt/compartido/mpich/bin
Configuramos la compilación y la instala- >export P4_RSHCOMMAND=ssh cat /mnt/compartido/U
ción >:wq! root_mastermpi.pubU
>> $HOME/.ssh/authorized_keys
./configureU Configuración del Nodo
-prefix=/mnt/compartidoU Esclavo Nos falta modificar la variable de
/mpich -with-device=ch_p4 U Comenzaremos la configuración del entorno PATH y definir P4_RSHCOM-
-with-arch=LINUX -rsh=ssh nodo maestro permitiendo el acceso a MAND=ssh en el archivo /etc/profile,
make los esclavos, para lo que modificamos el como hicimos en el caso del equipo
make install archivo /etc/hosts.allow, al que añadire- maestro.
mos la línea ALL:192.168.0.74. A conti- Llegados a este punto sólo nos queda
Los parámetros utilizados aparecen deta- nuación cambiamos el archivo /etc/hosts verificar que el cluster está correcta-
llados en la tabla 3. añadiéndole la línea 192.168.0.74 mas- mente configurado.
En el archivo termpi.
../mpich/share/machines.LINUX especifi- Posteriormente debemos configurar el Pruebas de Funcionamiento
camos las máquinas que van a participar acceso al recurso compartido que hemos Para verificar el correcto funcionamiento
en el cluster, definiendo el número de pro- creado en el servidor, verificando que de nuestra plataforma vamos a realizar
cesos que se ejecutarán en cada una de exista y que esté bien definido con: ciertas pruebas:
ellas. • Comprobar la conexión a través de
showmount -e mastermpi ssh
host:numero_procesos Intentaremos establecer una conexión
que nos mostrará las carpetas comparti- ssh desde el usuario root con cada uno
Para finalizar con la configuración del das en el equipo especificado y los de los esclavos ejecutando la siguiente
nodo maestro incluimos la ruta de los pro- nodos que tienen acceso al recurso. instrucción:
gramas MPICH en el fichero profile (según Ahora creamos la carpeta en la que
la distribución), y añadimos la variable de montaremos la carpeta compartida: ssh esclavo1mpi
entorno P4_RSHCOMMAND=ssh para
mkdir /mnt/compartido A continuación nos mostrará un men-
Cuadro 1: Resultado de la saje al que contestaremos con “yes”,
Utilidad tstmachines Y la declararemos en el fichero /etc/fstab con lo que estaremos validados en el
These machines seem to be para que esté accesible al arrancar la equipo identificado en la conexión. En
available máquina, definiendo el equipo donde se este momento podremos ejecutar cual-
esclavo1mpi encuentra y el nombre del recurso com- quier comando del mismo modo que si
esclavo2mpi partido, el sistema de ficheros (NFS) y estuviéramos sentados en el teclado de
mastermpi las operaciones que podremos realizar ese equipo. Si no es así habrá que verifi-
sobre él. car la configuración ssh.

WWW.LINUX- MAGAZINE.ES Número 38 59


DESARROLLO • Cluster

• Disponibilidad de las máquinas del La función


cluster MPI_Init ini-
La biblioteca MPICH proporciona, ade- cializa el
más del compilador y el comando para entorno,
ejecutar las aplicaciones que desa- tomando como
rrollemos, ciertas utilidades que nos per- argumentos los
miten verificar si los nodos del cluster pasados por la
están o no disponibles. función main
En este caso usaremos la utilidad tstma- para realizar
chines, que se encuentra ubicada en la las configura-
carpeta /mnt/compartido/mpich/sbin/, y ciones que per-
que muestra las máquinas especificadas mitan el
en el archivo correcto uso de
../mpich/share/machines.LINUX que la librería MPI.
están disponibles en la plataforma. La Al finalizar el
información que presenta esta herra- programa debe-
mienta se muestra en el cuadro 1. mos llamar a la
• Ejecución de una aplicación de Ejem- función Figura 2: Selección de programas en la instalación Debian.
plo MPI_Finalize
Aunque MPICH incluye una serie de para limpiar todos los trabajos no finaliza- Conclusiones
aplicaciones de ejemplo en la carpeta dos por MPI. Como se ha podido comprobar a lo largo
mpich/examples, vamos a crearnos una El identificador del proceso que se está del artículo, hemos montado un cluster
distinta desde cero, tomando como ejem- ejecutando es devuelto por la función de equipos de una forma rápida y senci-
plo el archiconocido “Hola Mundo”. Des- MPI_Comm_rank. El primer argumento es lla, y sin apenas recursos, permitiéndo-
arrollaremos una aplicación en C que el comunicador. Un comunicador es una nos además introducirnos en el mundo
imprima el mensaje “Hola Mundo” desde colección de procesos que pueden de la programación paralela y distri-
cada uno de los nodos. enviarse entre sí. El comunicador por buida. Por supuesto que esto es sólo el
En el listado 1 se muestra el código defecto o más genérico es principio, ya que hay un universo entero
fuente de este ejemplo, que pasamos a MPI_COMM_WORLD. por descubrir en torno a este tema, del
describir a continuación. Para conocer el número de procesos que que encontraremos muchas fuentes en la
Lo primero que aparece es la inclusión se están ejecutando haremos uso de la Web que podrán servirnos de referencia
del fichero cabecera mpi.h que contiene función MPI_Comm_size. De esta forma para desarrollar todo cuanto nos propon-
las definiciones, macros y prototipos de compondremos el mensaje “Hola Mundo gamos. ■
función necesarios del estándar MPI. desde el proceso x de y”.
Para poder verificar este ejemplo debe- RECURSOS
Listado 1: hola.c mos compilarlo con la herramienta que a
[1] Biblioteca LAM/MPI Parallel Comput-
tal efecto propociona MPICH.
01 #include <stdio.h> ing: www.lam-mpi.org/
02 #include ”mpi.h” [2] Biblioteca OpenMPI Open Source
mpicc -o hola hola.c
03 High Performance Computing: http://
04 int main( argc, argv ) www.open-mpi.org/
Y ejecutarla con la instrucción
05 int argc; [3] Biblioteca MPICH MPICH-A Portable
06 char **argv; Implementation of MPI: http://
mpirun -np 3 hola
07 { www-unix.mcs.anl.gov/mpi/mpich1/
08 int rank, size; [4] Instalación Debian por red desde un
Siendo el parámetro np el que especifica
09 MPI_Init( &argc, &argv ); CD mínimo: http://www.debian.org/
el número de máquinas en las que se va a
10 MPI_Comm_size( CD/netinst/
ejecutar el programa.
MPI_COMM_WORLD, [5] Rsh Wikipedia: http://es.wikipedia.
En el cuadro 2 se puede apreciar el
&size ); org/wiki/Rsh
resultado de esta pequeña aplicación.
11 MPI_Comm_rank( [6] SSH Comunicactions Security: http://
MPI_COMM_WORLD, www.ssh.com/
&rank );
Cuadro 2: Salida del
[7] Criptografía asimétrica: http://es.
12 printf( ”Hola Mundo desde Programa hola.c
wikipedia.org/wiki/
el Hola mundo desde el proceso 3 de Criptograf%C3%ADa_asim%C3%A9tr
proceso %d de %d\n”, rank, 3 ica
size ); Hola mundo desde el proceso 1 de [8] OpenSSH Versión Libre del paquete
13 MPI_Finalize(); 3 de herramientas de comunicación
14 return 0; Hola mundo desde el proceso 2 de segura del protocolo ssh: http://www.
15 } 3 openssh.com/es/

60 Número 38 WWW.LINUX- MAGAZINE.ES