INSTRUCCIONES PARA LA CREACIÓN DE UN CLUSTER LAM-MPI


  1. Introducción.
  2. Configuración de la red.
  3. Creación del usuario lam en cada nodo.
  4. Sistema de ficheros compartidos. Clientes.
  5. Sistema de ficheros compartidos. Servidor.
  6. Instalación de los binarios LAM-MPI.
  7. Gestión de claves RSA2 para SSH.
  8. Configuración del cluster.
  9. Comandos básicos del cluster.
  10. Notas finales.
img cluster

1. Introducción.

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 ]


10. Notas finales.

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 ]