INSTRUCCIONES PARA LA CREACIÓN DE UN CLUSTER LAM-MPI
El contenido de este documento describe las acciones a realizar para la creación de un
cluster de máquinas linux. Este cluster permite la ejecución de programas paralelos;
esto significa que su codificación contiene instrucciones especiales para ser ejecutados
de forma paralela. Existen diferentes protocolos para la creación de este tipo de entornos
(pe. PVM o MPI). El cluster que se describe utiliza el protocolo MPI a través de la
implementación LAM-MPI.
El cluster descrito consiste en un conjunto de máquinas con sistema operativo linux a las que
se les define un usuario (lam ). El directorio de trabajo de este usuario es un
directorio remoto (montado usando samba) que contiene los binarios necesarios para la activación
del nodo. No se supone que cada uno de los nodos sea una máquina dedicada; de hecho cada máquina
del cluster continuará realizando las tareas asignadas (pe. servidor web, servidor de base de datos,
firewall, servidor de ficheros, etc.) además de pertenecer al cluster. No es necesario la ejecución
de un daemon de sistema. Cuando el cluster se activa, el nodo maestro se pone en contacto
con cada uno de los nodos clientes a través del usuario lam y ejecuta el daemon
lamd . Mientras está activo se pueden ejecutar los programas paralelos dentro del
entorno LAM. Cuando el cluster ya no es necesario, se cierra el daemon lamd
y no queda ningún proceso ni usuario del cluster en ejecución.
Se procura que la seguridad de cada nodo no quede comprometida por el hecho de pertenecer al
cluster. Además, se busca que el propio cluster sea seguro (no pueda ser usado o modificado
por terceros). Esto se consigue de la forma siguiente:
-
El acceso al usuario
lam se realiza de forma segura a través de una conexión
SSH con clave RSA2 (clave asimétrica). Se garantiza que nadie accederá a la cuenta del
usuario lam a no ser que disponga de la clave privada.
-
El sistema de ficheros compartido por el servidor utiliza usuario y password para su acceso.
Este usuario y password puede ser vulnerado por terceros (aparece de forma plana en los ficheros
de configuración de cada nodo). Queda bajo la responsabilidad del administrador del cluster
garantizar que la gestión o configuración del servidor de ficheros se realiza de forma segura.
La plantilla HTML usada para la redacción de este documento sigue el formato de las LAM-FAQ.
Gran parte de la información que aquí se recopila se encuentra explicada en detalle en la
documentación de LAM o en las FAQ-LAM.
[ Top of page ]
2. Configuración de la red.
|
Todas las máquinas del cluster deben poder resolver por nombre el resto de nodos.
El esquema propuesto consiste en la existencia de un servidor de nombres (DNS) donde
todas las máquinas están referenciadas y todas las máquinas tienen este servidor
de nombres asignado por defecto. La configuración del servidores de nombres no entra
dentro del ámbito de este documento.
Para asignar el dominio y el servidor de nombres al nodo edite el fichero
/etc/resolv.conf y compruebe que contiene las siguientes líneas:
domain domainname
search domainname
nameserver ip_nameserver
La implementación LAM-MPI actual gestiona la asignación de puertos de forma dinámica
(el primero que encuentra libre). En un futuro está previsto que se pueda fijar los
puertos usados por LAM-MPI. Debe tenerse esto en cuenta si la máquina se encuentra
detrás de un firewall. En este caso las reglas a habilitar en el firewall son: debe
permitirse todo tipo de tráfico entre todas las máquinas pertenecientes al cluster.
[ Top of page ]
3. Creación del usuario lam en cada nodo.
|
El usuario utilizado por el cluster es el usuario lam . Las características
de este usuario son las siguientes:
-
Nombre:
lam
-
Home:
/home/lam
-
Grupo:
users (puede ser otro grupo)
-
Shell:
bash
-
Password: A decidir por el administrador de la máquina. Local al nodo.
-
Descripción:
usuario cluster LAM-MPI
En el fichero /etc/password debe constar una línea parecida a la siguiente:
lam:x:500:100:usuario cluster LAM-MPI:/home/lam:/bin/bash
El directorio de trabajo ($HOME) de los nodos es un directorio compartido. Antes de crear el usuario,
comprobar que existe el grupo donde será asignado (por defecto users ). Para crear el
usuario con las características indicadas, ejecutar como root el siguiente comando:
useradd -c "usuario cluster LAM-MPI" -d /home/lam -g users -n -s /bin/bash lam
Si se desea añadir una contraseña al usuario creado, ejecutar como root el siguiente comando
e indicar el password deseado (no es necesario que sea conocido por el resto del cluster):
passwd lam
[ Top of page ]
4. Sistema de ficheros compartidos. Clientes.
|
El sistema de ficheros compartidos es de tipo samba con autentificación.
Es necesario tener instalado el cliente samba en cada nodo del cluster.
Para montar y desmontar manualmente un sistema de ficheros de este tipo
teclear:
mount -t smbfs -o username=foo,password=bar //host_name/dir /mnt
...
umount /mnt
Nos interesa que el directorio de trabajo del usuario lam sea
único en todo el cluster para poder garantizar lo siguiente:
-
Ejecutables LAM-MPI únicos. La versión de los ejecutables debe ser la
misma para que el cluster funcione correctamente. Para más información
véase LAM FAQ.
-
Simplificación en la distribución de programas a ejecutar. Dentro de la
carpeta compartida existe un directorio para albergar los programas que
ejecutará el cluster. Nos evitamos el distribuir el programa antes de
ejecutarlo.
-
Distribución automática de las claves públicas para SSH. Cada nodo permite
que el nodo master se conecte a el al disponer de la clave pública. La posesión
de esta clave no significa que cualquier persona pueda acceder al usuario lam.
Solamente lo podrá hacer aquella que disponga de la clave privada (el nodo master).
La clave privada no se encontrará en el sistema de ficheros compartido.
Para montar de forma automática un sistema de ficheros samba usando autentificación
debe añadirse la siguiente línea en el fichero /etc/fstab :
//host_name/lam /home/lam smbfs username=lam,passwd=lam,user,exec,fmask=644,dmask=755 0 0
Es responsabilidad del administrador del cluster garantizar la accesibilidad e integridad de
los ficheros compartidos (evitar que una máquina no perteneciente al cluster monte el
sistema de ficheros y modifique su contenido).
[ Top of page ]
5. Sistema de ficheros compartidos. Servidor.
|
Es necesario tener instalado el servidor samba. El objetivo de este apartado es
explicar la configuración del sistema de ficheros compartido para el cluster, no
la instalación del servidor samba. Puedes encontrar mas información en
www.samba.org. Los objetivos a cumplir son los
siguientes:
-
Disponer de un sistema de ficheros compartido instalado por defecto en la mayoría
de nodos.
-
Compartir el directorio
/home/lam con los nodos del cluster.
-
Garantizar el acceso mediante usuario y contraseña.
-
Impedir que el contenido del directorio compartido sea modificado por terceros.
Comprobar que el usuario lam existe en /etc/passwd . Añadir el
usuario lam en la lista de usuarios samba, usando la siguiente instrucción
(cuando solicite el password, introducir lam ):
smbpasswd -a lam
Localizar el fichero smb.conf . Normalmente se encuentra en
/etc/samba/smb.conf . En caso de no encontrarlo en este path
usar la instrucción locate smb.conf para determinar la ruta
del fichero o buscarlo en /etc/smb.conf . Realizar las
siguientes modificaciones al fichero smb.conf :
[global]
workgroup = WORKGROUP
hosts allow = 192.9.199. 127.
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
[lam]
comment = lam
path = /home/lam
valid users = lam
public = no
writable = yes
printable = no
Una vez realizadas las modificaciones indicadas, ejecutar el comando testparm -s
para comprobar que la configuración final del servidor samba es correcta y reiniciar el servicio.
[ Top of page ]
6. Instalación de los binarios LAM-MPI.
|
La instalación de LAM se realizará de forma centralizada, en el $HOME del usuario lam del
servidor de ficheros. De esta forma se evita el actualizar la instalación de los binarios
lam cada vez que haya un cambio de versión. Generaremos los ejecutables o binarios a partir
del código fuente; deberemos compilarlo.
Obtenemos la última versión del código de LAM-MPI.
Se supone que la versión usada es la LAM-7.0.6. Tenemos el fichero lam-7.0.6.tar.gz
en el $HOME.
cd $HOME
gunzip -c lam-7.0.6.tar.gz | tar xf -
rm lam-7.0.6.tar.gz
cd lam-7.0.6
./configure --prefix=/home/lam --without-fc
make
make install
make examples
Modificamos el $HOME/.bashrc (nunca $HOME/.profile ) del usuario
lam para indicar añadir el directorio $HOME/bin al PATH. También
indicamos donde se encuentran las páginas para man . Debemos añadir las siguientes
líneas:
PATH=$HOME/bin:$PATH
MANPATH=$MANPATH:$HOME/man
LAMHOME=/home/lam
LAMRSH="ssh -x -i /etc/lam.key"
export PATH MANPATH LAMHOME LAMRSH
export LD_LIBRARY_PATH=$HOME/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=$HOME/lib:$LIBRARY_PATH
export C_INCLUDE_PATH=$HOME/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=$HOME/include:CPLUS_INCLUDE_PATH
Para mas información relativa a la instalación véase la documentación que proporciona
www.lam-mpi.org.
[ Top of page ]
7. Gestión de claves RSA2 para SSH.
|
Se supone que todas las máquinas del cluster tienen el cliente y servidor openSSH (no se
usa /etc/ssh2, que es obsoleto, sinó /etc/ssh). Las instrucciones de este
apartado las debe realizar el administrador del cluster una sola vez. Para generar
la claves entre en el nodo que hace de servidor de ficheros como usuario lam .
Compruebe que existe el directorio $HOME/.ssh . En caso de no existir,
conéctese vía ssh usando password a otra máquina, el directorio se creará automáticamente
con los permisos adecuados. Ejecute el siguiente comando sin introducir passphrase:
ssh-keygen -t rsa -f lam.key
El fichero lam.key.pub contiene la clave pública que debe ser conocida por
todos los nodos. Movemos la clave pública al fichero .ssh/authorized_keys2 .
Recordemos que el $HOME del usuario lam de la máquina que hace de servidor de ficheros
es compartido por el resto de máquinas del cluster.
cat lam.key.pub >> $HOME/.ssh/authorized_keys2
chmod 600 $HOME/.ssh/authorized_keys2
rm lam.key.pub
El fichero lam.key contiene la clave privada y no debe ser accesible por el
resto de nodos. Para conseguirlo debemos ponerla fuera del $HOME del usuario lam. Como
usuario root ejecutamos la siguiente instrucción:
mv lam.key /etc/lam.key
Finalmente comprobamos que podemos acceder vía ssh sin necesidad de escribir el password
al usuario LAM desde la máquina servidora de ficheros ejecutando (como usuario root o lam,
para tener acceso al fichero /etc/lam.key):
ssh -i /etc/lam.key lam@localhost.localdomain
Si obtenemos una consola significa que se ha abierto una sesión SSH usando las claves
pública y privada. Si solicita una contraseña significa que algo no funciona.
[ Top of page ]
8. Configuración del cluster.
|
La definición del cluster se encuentra en el fichero /home/lam/etc/lam-bhost.def
de la máquina que hace de servidor de ficheros. Debe contener todos los nodos del cluster,
usuario de conexión (en nuestro caso, lam ) y número de CPU's. El contenido debe
ser parecido al siguiente:
# ===========================================================
# lam-bhost.def file
# contains node list of cluster
# for more info execute: man bhost
# ===========================================================
servername_node_0 cpu=4 user=lam
etc.
servername_node_n cpu=1 user=lam
El parámetro cpu indica a LAM el número de procesos que debe lanzar en cada máquina.
Es el sistema operativo quien de forma automática distribuie los diferentes procesos en cada CPU's
disponible. Normalmente se indica el número de CPU's de la máquina para aprovechar todos los
recursos existentes.
El número de CPU's a indicar en el nodo maestro (n0), el usado para lanzar los procesos y que hace
las funciones de servidor de ficheros, es especial. Recomiendo poner 1 CPU mas de la que tiene por el
siguiente motivo: al codificar un programa paralelo es una práctica usual que el nodo maestro se
encarge de repartir las tareas a realizar y recoger los resultados. El nivel de carga es inferior
al resto de nodos. Por lo tanto, en el nodo maestro existiran dos procesos corriendo en una misma
CPU, el maestro (con poca carga de CPU) y el esclavo. Si la mayoria de programas hacen uso intensivo
de operaciones en coma flotante, recomiendo contabilizar las CPU's con hyperthreading como una, si
los programas a ejecutar no realizan este tipo de operaciones puede contabilizarse cada CPU con
hyperthreading como 2 CPU's. Este comentario lo realizo después de realizar varias pruebas con el
programa mflops (véase el apartado de notas finales).
[ Top of page ]
9. Comandos básicos del cluster.
|
Una sesión de trabajo estándar en el cluster comprende la ejecución por parte del usuario
lam , desde el nodo master (el servidor de ficheros) de los siguientes comandos:
-
recon
Comando para comprobar si el cluster está preparado para ser arrancado. Utiliza las variables
de entorno LAMHOME para determinar donde se encuentra la instalación de LAM y LAMRSH para
indicar que la conexión a los nodos se realize usando SSH.
-
lamboot
Comando usado para arrancar el cluster. La configuración del cluster debe la obtiene del fichero
$HOME/etc/lam-bhost.def. Utiliza las variables de entorno LAMHOME para determinar donde se
encuentra la instalación de LAM y LAMRSH para indicar que la conexión a los nodos se realize
usando SSH.
-
mpicc|mpiCC|mpif77 args
Comandos utilizados para compilar los binarios a ejecutar en el cluster. Se trata de wrappers
a los compiladores de sistema. Utilízese exactamente igual (los mismos argumentos, etc.) que
los comandos originales, normalmente gcc.
-
mpirun [C|N] $HOME/lam-7.0.6/examples/hello/hello
Ejecuta el programa de ejemplo hello en el cluster. La opción C, indica que debe
ejecutarse en todas las CPU's; la opción N indica que solamente debe ejecutarse una
instancia en cada nodo.
-
lamexec [C|N] command
Comando similar a mpirun para lanzar programas estándar unix (programas no MPI, pe. date).
La opción C, indica que debe ejecutarse en todas las CPU's; la opción N indica que solamente
debe ejecutarse una instancia en cada nodo.
-
lamclean
Este comando solamente debe utilizarse cuando un programa del cluster acaba de forma
incorrecta o inesperada y mantiene recursos del cluster alocados. Mata todos los programas
que se están ejecutando en aquel momento en el cluster.
-
mpitask|laminfo|lamnodes|tping
Comandos informativos. mpitask lista el conjunto de tareas que está ejecutando el
cluster en este momento. Es el equivalente al comando unix ps .
laminfo proporciona información del entorno LAM. Tiene multitud de opciones, para
mas información consulte las páginas de man . lamnodes lista
el conjunto de nodos que forman el cluster. Proporciona una información muy parecida al
contenido del fichero lam-bhost.def. tping comprueba que todos los nodos están
activados.
-
lamhalt
Comando utilizado para deshabilitar el cluster. En caso de retorno de error o falta de respuesta
utilice wipe -v $HOME/etc/lam-bhost.def .
[ Top of page ]
Dentro de la distribución de LAM existen ejemplos que se pueden ejecutar para comprobar
el funcionamiento del entorno. Si nos interesa determinar el número de megaflops (millones
de operaciones en punto flotante por segundo) del cluster sin recurrir a los benchmarks
estándar (incluien resolución de sistemas lineales, resolución de EDP's, etc.) puedes
hacerlo usando mflops.
El siguiente paso es dotar al cluster de herramientas que faciliten su gestión. La
herramienta ganglia permite la monitorización
del cluster (carga por cpu, memoria usada, usuarios conectados, etc.) a través de web y
con gráficos. Os recomiendo que le hecheis un vistazo a las 'Live Ganglia Demos'.
Si deseamos dar un uso intenso al cluster con múltiples tareas y de forma constante nos hará
falta un planificador de tareas que se encargue de ejecutarlas a su tiempo, balancear la carga,
determinar los recursos necesarios para llevar a cabo una tarea, etc. Recomiendo hechar un
vistazo a la herramienta maui.
Para la redacción de este documento he usado un editor de texto, dia para la generación
del gráfico, tidy y el validador on-line de W3C para la validación de la sintaxis HTML.
Para indicar sugerencias o correcciones ponerse en contacto con
Gerard Torrent.
[ Top of page ]
|