h1

ShakTI HPGC: Core

13/04/2012

El core es el núcleo principal del sistema. El objetivo principal de ShakTI es mantener única y exclusivamente los recursos necesarios para la ejecución de tareas. El encargado de administrar todos los nodos y decidir si se deben o no apagar es el núcleo. El núcleo está compuesto por dos ejecutables. shakti_mom es el programa servidor y debe estar funcionando en el nodo maestro mientras que shakti_son debe estar ejecutándose en los nodos esclavos.

La comunicación entre la madre y los hijos se hace por socket a través del puerto 39393 aunque puede ser modificado realizando un pequeño ajuste.

shakti_mom

Shakti_mom es un demonio que se ejecuta en segundo plano. El funcionamiento es muy sencillo. El demonio se encuentra en todo momento esperando los eventos que se producen en el gestor de colas. Cuando se produce cualquier cambio ShakTI se encarga de recibirlo y analizarlo. El análisis permite evaluar si es necesario que un nodo esté encendido o apagado. En el proceso de evaluación se tiene en cuenta si existe algún otro trabajo que esté ejecutándose en los nodos marcados para ser apagados. Si al finalizar la ejecución no existe ningún otro trabajo ejecutándose en el nodo y no hay ningún trabajo pendiente de ser ejecutado se procederá al envío de petición de apagado a shakti_son.

Si un trabajo es encolado para ejecutar en el cluster y no existen nodos disponibles se evaluará la forma de levantar solo los nodos necesarios. Por lo tanto, se tendrá en cuenta los procesos que se están ejecutando en cada nodo y cuantos nodos hay encendidos. Si no se puede ajustar el trabajo a los recursos disponibles no quedará más remedio que encenderlos. El encendido de los nodos se hará mediante Wake-On-Lan. El comando utilizado es ether-wake. Se espera una mejora de este proceso y que sea ShakTI el que forje el paquete.

shakti_son

Tiene como obligación sufragar las necesidades del programa servidor. Shakti_son se encarga principalmente de notificar la MAC de las interfaces de red que estén activas en los nodos esclavos. Es un requisito necesario para poder encender los nodos. Sin embargo, el objetivo principal de los hijos es apagar los nodos cuando sea ordenado por la madre.

Be Good, Be Green!

Anuncios
h1

ShakTI HPGC: Estructura

11/04/2012

La planificación del desarrollo de ShakTI HPGC era de prioridad 1 en el comienzo del proyecto. La necesidad de obtener una supercomputación más inteligente es un hecho candente. Es necesario optimizar al máximo los recursos y además el consumo energético que se pueda generar.

En la planificación del proyecto se decidió que la estructura más escalable y flexible sería la que se explica en el siguiente esquema.

En el diagrama se aprecia el núcleo principal de la aplicación (ShakTI Core) iteraciona con varias librerias. Las coloreadas de color rojo son librerías pertenecientes a software externo. Las cajas de color blanco son librerias que interactuan con el núcleo de ShakTI y las cajas de color azul representan los tres pilares básicos del software.

ShaktiCore

El principal objetivo del núcleo es administrar los nodos de forma eficiente según la información que le llega desde el gestor de cola. ShakTI se encargará de apagar o encender los nodos según la demanda de trabajos que tenga el cluster.

libshakti_torque

Librería que se encarga de conectar a ShakTI con el gestor de colas Torque. Gracias a esta librería se consigue la independencia entre cualquier sistema gestor de colas y el administrador ShakTI.

libshakti_drmaa

DRMAA es una API propuesta por Open Grid Forum con el objetivo de unificar la interacción de cualquier software con las aplicaciones de administración de recursos distribuidos. Permite que el software que se ajuste a las funciones de DRMAA pueda funcionar sin ningún tipo de problemas. Esta librería permite la interacción con cualquier sistema que soporte DRMMA.

libshakti_webservice

Permite enviar la información desde el núcleo de ShakTI hacia un servidor web. La comunicación es a través de servicios web SOAP. Actualmente solo permite comprobar el estado de los nodos. Gracias a esta librería se pueden desarrollar multitud de aplicaciones para saber en todo momento el estado del cluster. De esta forma los administradores de sistemas pueden recibir avisos en sus dispositivos móviles y brindar una mayor calidad en el servicio y asegurar alta disponibilidad en el cluster.

ShakTI WebService

Servicios Web desarrollados en PHP con NuSOAP. Permiten que la información de ShakTI sea accesible desde dispositivos externos al sistema. Además, puede ser instalada en un servidor a parte del equipo donde esté instalado el nucleo de ShakTI.

ShakTI Android

Aplicación muy básica que muestra la información del núcleo de ShakTI en dispositivos móviles con Sistema Operativo Android. La aplicación muestra el estado de los nodos. Está en una fase de desarrollo muy temprana aunque le augura un futuro prometedor donde se le capacitará para notificaciones de errores en el cluster o en ejecuciones de trabajos.

Be Good, Be Green!

h1

LAMP

09/04/2012

El uso de Servicios Web está orientado a la interacción de ShakTI con otras plataformas como por ejemplo Android. Existe un nicho de posibilidades con los nuevos Sistemas Operativos móviles y la supercomputación que todavía no está explotado. Para ello me puse manos a la obra en el desarrollo de una aplicación Android que diera el estado del cluster en tiempo real.

El primer paso es la instalación de un servidor LAMP el cual albergará los servicios web. A continuación se detalla el proceso de instalación en el Sistema Operativo del cluster.

Apache

Instalar Apache via Yum.

# yum -y install httpd
# chkconfig httpd on
# service httpd start

MySQL

1) Instalar MySQL.

# yum -y install mysql mysql-server
# service mysqld start
# chkconfig mysqld on

2) Crear contraseña de root. Cambiar “PONER_AQUI_CONTRASEÑA” por la contraseña que se desee.

# mysql -u root
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('PONER_AQUI_CONTRASEÑA');

PHP 5

# yum -y install php php-mysql

PhpMyAdmin

1) Instalar phpmyadmin

# yum -y install phpmyadmin php-mysql php-mcrypt

2) Editar el fichero /etc/httpd/conf.d/phpmyadmin.conf. Cambiar “Deny from All” por “Allow from All” en el primer bloque que pone “Directory”.
* Modificar línea.

# nano /etc/httpd/conf.d/phpmyadmin.conf
* Deny from All
* Allow from All

h1

Torque && Maui

09/04/2012

Preparaciones previas

En primer lugar deberemos instalar las librerías de desarrollo. De esta forma podremos compilar las fuentes del gestor de colas Torque y del planificador de tareas Maui.

# yum -y groupinstall 'Development Tools'
# pdsh "yum -y groupinstall 'Development Tools'"
# yum -y install openssl-devel
# pdsh "yum -y install openssl-devel"

Incluir en el PATH el directorio compartido para poder utilizar los ficheros binarios instalados en el directorio NFS. Añadir los siguientes exports al fichero bashrc.

# nano /etc/bashrc
export PATH=/opt/share/bin:/opt/share/sbin:$PATH
export LD_LIBRARY_PATH=/opt/share/lib:$LD_LIBRARY_PATH

Torque 4.0.0

Torque es un administrador de recursos Open Source. Permite el control de trabajos mediante el uso de colas en entornos distribuidos. El proyecto se mantiene a través de una comunidad consolidada y partiendo como base del proyecto PBS. Ha incorporado importantes avances en las áreas de escalabilidad, tolerancia a fallos y las extensiones de funciones.

A continuación se detallan los pasos para la instalación de torque.

Compilar e instalar torque

$ wget http://www.adaptivecomputing.com/resources/downloads/torque/torque-4.0.0.tar.gz
$ tar xvzf torque-4.0.0.tar.gz
$ cd torque-4.0.0
$ ./configure --prefix=/opt/share --with-scp --enable-syslog
$ make
# make install

El directorio de instalación indicado en el parámetro prefix dependerá de las necesidades de cada usuario. Debido a que será un cluster compartido por muchas personas no se pretende mezclar software y servicios de los usuarios.

Configurar torque

1) Agregar la siguiente entrada al firewall.

# iptables -A INPUT -p tcp --dport 15001 -j ACCEPT
# iptables -A INPUT -p tcp --dport 15005 -j ACCEPT
# service iptables save
# service iptables restart

2) En la versión 4.0 de Torque necesitamos ejecutar previamente trqauthd. trqauthd es un demonio utilizado por los programas clientes de cada nodo para autorizar conexiones de usuario hacia el servidor ejecutado en el nodo maestro. Las utilidades de los clientes se comunican con trqauthd en el puerto 15005 en la interfaz loopback. Es multi-threaded y puede manejar grandes volúmenes de peticiones simultáneas.

# trqauthd

3) Configurar torque ejecutando el siguiente script. Tras ejecutar saldrá un mensaje indicando que la configuración será sobreescrita. Escribir ‘y’ y pulsar intro.

# ./torque.setup root

4) Crear paquetes de instalación para los nodos clientes.

# make packages
# mkdir ../torque-client
# cp *.sh ../torque-client

5) Añadir los hostnames de las máquinas del cluster al fichero /var/spool/torque/server_priv/nodes.

# nano /var/spool/torque/server_priv/nodes
luxuria
gula
avaritia
acedia
ira
invidia
superbia

6) Editar el fichero /var/spool/torque/mom_priv/config.
nano /var/spool/torque/mom_priv/config

# MOM server configuration file
# if more than one value, separate
# rule is defined by the name
# host allowed to connect to mom server on privileged port
# note: IP address of host running pbs_server it by comma.
$pbsserver 10.0.0.1
$clienthost luxuria
##ideal processor load and max processor load
$ideal_load 8
$max_load 9
## host allowed to connect to Mom server on unprivileged port
#Specifies hosts which can be trusted to access mom services as non-root.
#By default, no hosts are trusted to access mom services as non-root.
$restricted luxuria gula avaritia acedia ira invidia superbia
## Log event :
# 0x1ff : log all events + debug events
# 0x0ff : just all events
$logevent 255
## alarm if the script hang or take very long time to execute
$prologalarm 300
## Specifies which directories should be staged
$usecp 10.0.0.1:/home /home

7) Reiniciar pbs_server y copiar los ficheros necesarios para ejecutar torque en tiempo de arranque.

# pbs_server
# cp contrib/init.d/pbs_* /etc/init.d

8) Modificar el fichero de inicio del demonio pbs_server solo si se ha modificado el directorio de instalación de torque mediante el parámetro prefix. En mi caso procedo a modificar las siguientes líneas.

# nano /etc/init.d/pbs_server
SBIN_PATH=/opt/share/sbin
BIN_PATH=/opt/share/bin

9) Añadir la ejecución de pbs_server en el arranque del sistema.

# chkconfig --add pbs_server
# chkconfig --level 3456 pbs_server on

10) Reiniciar torque.

# qterm
# service pbs_server start

Maui 3.3.1

Compilar e instalar Maui

Para descargar Maui es necesario registrarse en la web de adaptative computing. Tras el registro podemos obtener las fuentes directamente desde la página de descarga de Maui

¡ATENCIÓN! La versión 3.3.1 de Maui todavía no es compatible con la versión 4.0.0 de Torque. Por lo tanto existe un pequeño bug que lo he solucionado creando el siguiente parche.

$ tar xvzf maui-3.3.1.tar.gz
$ cd maui-3.3.1

Si la versión de Torque es la 4.0.0 copiar el parche mencionado anteriormente en el directorio raíz de maui y aplicarlo con la siguiente sentencia. En caso contrario, pasar directamente al configure.

patch -p0 -i maui.patch

$ ./configure --prefix=/opt/share --with-pbs=/opt/share
$ make
# make install
# cp etc/maui.d /etc/init.d/

Editar el fichero maui.d. Modificar la variable e indicar el mismo directorio que la variable prefix que se usó en configure.
# nano /etc/init.d/maui.d
MAUI_PREFIX=/opt/share

Configurar Maui

1) Editar el fichero maui.cfg.
+ Añadir linea.
* Modificar línea.
# nano /usr/local/maui/maui.cfg
* ADMIN1 jose.casero
ADMIN1 root
-
* #RMCFG[LUXURIA] TYPE=PBS
RMCFG[0] TYPE=PBS HOST=luxuria
-
* #NODEALLOCATIONPOLICY MINRESOURCE
NODEALLOCATIONPOLICY FIRSTAVAILABLE
-
+ DEFERTIME 0
+ JOBMAXOVERRUN 00:05:00
+ ENABLEMULTIREQJOBS TRUE
+ ENABLEMULTINODEJOBS TRUE
+ JOBNODEMATCHPOLICY EXACTNODE
+ NODEACCESSPOLICY SHARED
+ USERCFG[DEFAULT] MAXNODE=3

2) Iniciar el servicio y registrarlo en el arranque.

# service maui.d start
# chkconfig --add maui.d
# chkconfig --level 3456 maui.d on
# chkconfig --list maui.d

Configuración adicional de Torque

Ejecutar qmgr e introducir las siguientes líneas.

# qmgr
create queue batch
set queue batch queue_type = Execution
set queue batch resources_default.nodes = 1
set queue batch resources_default.walltime = 01:00:00
set queue batch enabled = True
set queue batch started = True
set server scheduling = True
set server default_queue = batch
set server log_events = 511
set server query_other_jobs = True
set server scheduler_iteration = 600
set server node_check_rate = 150
set server tcp_timeout = 6
set server job_stat_rate = 45
set server poll_jobs = True
set server mom_job_sync = True
set server keep_completed = 0
set server next_job_number = 17
set server moab_array_compatible = True

Configuración de nodos de cómputo

Configurar los nodos de cómputo desde el nodo maestro a través de Pdsh. A continuación se describe el procedimiento.

1) Instalar torque en los nodos de cómputos.

# pdsh "/home/jose.casero/torque-client/torque-package-clients-linux-x86_64.sh"
# pdsh "/home/jose.casero/torque-client/torque-package-mom-linux-x86_64.sh --install"
# pdsh 'echo "\$usecp" 10.0.0.1:/home /home >> /var/spool/torque/mom_priv/config'

2) Editar el fichero de inicio del demonio pbs_mom solo si se ha modificado el directorio de instalación de torque mediante el parámetro prefix. En mi caso procedo a modificar las siguientes líneas.

# nano contrib/init.d/pbs_mom
SBIN_PATH=/opt/share/sbin

3) Copiar el fichero de inicio del demonio en tiempo de arranque de los nodos.

# pdsh "cp /home/jose.casero/torque-4.0.0/contrib/init.d/pbs_mom /etc/init.d"

4) Iniciar el demonio de pbs_mom.

# pdsh service pbs_mom start

5) Añadir la ejecución de pbs_mom en el arranque del sistema.

# pdsh chkconfig --add pbs_mom
# pdsh chkconfig --level 3456 pbs_mom on

6) Probar que todo funcione correctamente!!

$ echo "sleep 30" | qsub

Be Good, Be Green!

h1

GCC && MPICH2

01/04/2012

GCC 4.7.0

El desarrollo de ShakTI se realiza en una máquina con Ubuntu 11.10 que utiliza la versión 4.6.1. Existe cierta incompatibilidad de símbolos con la versión utilizada por Scientific Linux 6.2. Para soluciona el problema se tuvo que compilar GCC 4.6.1 en el cluster. En este caso, será la versión 4.7.0 la que se compilará debido a su eminente liberación.

Aunque la arquitectura de los procesadores del cluster es de 64 bits, se instalará el paquete glibc-devel para arquitectura de 32 bits. Es necesario para la compilación de GCC.

# yum -y install glibc-devel.i686 gcc-gnat
# pdsh yum -y install glibc-devel.i686 gcc-gnat

Compilación de GCC

$ wget ftp://ftp.uvsq.fr/pub/gcc/releases/gcc-4.7.0/gcc-4.7.0.tar.gz
$ tar xvf gcc-4.7.0.tar.gz
$ cd gcc-4.7.0
$ ./contrib/download_prerequisites
$ cd ..
$ mkdir gccbuild
$ cd gccbuild
$ ../gcc-4.7.0/configure --prefix=/opt/share --enable-threads-posix --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-shared --enable-version-specific-runtime-libs --enable-__cxa_atexit --enable-libstdcxx-allocator=new
$ make -j8
# make install

Configuración de GCC

Editar las variables de entorno necesarias. Es necesario indicar donde se encuentra la librería gcc_s. Al haber compilado gcc en un directorio no estándar se deben de especificar las variables PATH y LD_LIBRARY_PATH tal y como se indica en el post de no se que no se cuanto. ¡¡¡¡¡ENLACE AL POST ANTERIOR!!!!!

Añadir al final del fichero fichero /etc/bashrc
# nano /etc/bashrc
export LIBRARY_PATH=/opt/share/lib/gcc/x86_64-unknown-linux-gnu/lib64:$LIBRARY_PATH

MPICH 1.4.1

$ wget http://www.mcs.anl.gov/research/projects/mpich2/downloads/tarballs/1.4.1p1/mpich2-1.4.1p1.tar.gz
tar xvf mpich2-1.4.1p1.tar.gz
$ ./configure --prefix=/opt/share/mpich2
$ make
# make install

Configuración de MPICH

1) Editar las variables de entorno necesarias para poder compilar código MPI usando MPICH.

Se incluirán los directorios /opt/share/mpich2/bin y /opt/jose/mpich2/lib a las variables de entorno PATH y LD_LIBRARY_PATH respectivamente. Las líneas de definición de ambas variables debería de quedar de la siguiente forma:

# nano /etc/bashrc
export PATH=/opt/share/bin:/opt/share/sbin:/opt/share/mpich2/bin:$PATH
export LD_LIBRARY_PATH=/opt/share/lib:/opt/share/mpich2/lib:$LD_LIBRARY_PATH

2) Desactivar iptables en todos los nodos menos en el maestro.

# pdsh service iptables stop
# pdsh chkconfig iptables off

3) Crear el fichero de hosts de MPICH2.

MPICH2 necesita un fichero donde se indican los nodos de cómputo. El fichero deberá contener el nombre de cada host y el número de cores disponibles.

# nano ~/.mpi_hostfile
luxuria:8
gula:4
avaritia:4
acedia:4
ira:4
invidia:8
superbia:4

4) Copiar el fichero al skel para que los nuevos usuarios dispongan de él.

# cp /home/jose.casero/.mpi_hostfile /etc/skel

5) Añadir al final del fichero /etc/bashrc la siguiente línea para indicar a MPICH que utilice el fichero de hosts.

# nano /etc/bashrc
export HYDRA_HOST_FILE=$HOME/.mpi_hostfile

6) Probar que todo funcione!

En el directorio examples de las fuentes de Mpich2 existe un fichero llamado cpi.c. Para compilar código MPI con MPICH2 se utiliza mpicc y para ejecutarlo mpirun.

$ cd mpich2-1.4.1p1/examples
$ mpicc -o cpi cpi.c
$ mpirun -np 36 ./cpi

Si la ejecución finaliza correctamente no existe ningún problema para la ejecución de código MPI en el clúster.

Be Good, Be Green!

h1

Network File System && Network Information Service

22/03/2012

Network File System

Network File System (NFS) es un sistema de ficheros distribuidos. Con NFS podemos tener montado un directorio y que este pueda ser accesible desde cualquier nodo del cluster. NFS nos permitirá dos cosas:

  • Que todos los homes de usuarios del cluster puedan ver sus ficheros desde cada nodo.
  • Compartir un directorio entre todos los nodos que será donde se instalen programas como mpich2.

Nodo Maestro

Comprobaremos con YUM tenemos instalado NFS.

# yum install nfs-utils
# pdsh "yum install nfs-utils"

Editar el fichero /etc/exports

# nano /etc/exports
/home 10.0.0.1/255.255.0.0(rw,sync,no_root_squash)
/opt/share 10.0.0.1/255.255.0.0(rw,sync,no_root_squash)

Crear el directorio compartido.

# mkdir -p /opt/share
# pdsh "mkdir -p /opt/share"

Hacemos efectiva la configuración.

# exportfs -ra

Agregamos las siguientes entradas al firewall.

# iptables -A INPUT -p tcp --dport 32771 -j ACCEPT
# iptables -A INPUT -p tcp --dport 111 -j ACCEPT
# iptables -A INPUT -p tcp --dport 2049 -j ACCEPT

Para reestablecer la configuración de iptables en tiempo de arranque.

# iptables-save > /etc/sysconfig/iptables

Nodos Esclavos

Añadimos al fichero fstab los directorios que se van a montar por NFS.

# pdsh "echo 10.0.0.1:/opt/share /opt/share nfs defaults,nfsvers=3 0 0 >> /etc/fstab"
# pdsh "echo 10.0.0.1:/home /home nfs defaults,nfsvers=3 0 0 >> /etc/fstab"

Montamos los directorios.

# pdsh mount -t nfs -a

Reiniciamos el servicio.

# pdsh service nfs restart

Añadimos la ejecución del demonio de NFS en tiempo de arranque.

# pdsh chkconfig nfs on

Network Information Service

NIS nos permite el envío de datos de configuración en sistemas distribuidos tales como nombres de usuarios y hosts entre equipos sobre una red. De esta forma nos permitirá que las configuraciones de usuario se compartan entre todos los nodos del cluster.

Nodo Maestro

1) Indicar el NIS DOMAIN NAME

# nisdomainname sevendeadlysins

2) Agregar el dominio al fichero network.

# nano /etc/sysconfig/network
NISDOMAIN="sevendeadlysins"

3) Reiniciar interfaces de red

# service network restart

4) Comprobar que portmapper está corriendo en el sistema. Deberá de devolver información. En caso contrario no está corriendo.

# rpcinfo -p 127.0.0.1 | grep portmapper

5) Crear el fichero securenets.

# nano /var/yp/securenets

6) Instalar el paquete ypserv

# yum install ypserv

7) Introducir al final del fichero yp.conf

# nano /etc/yp.conf
ypserv 127.0.0.1

8) Inicializamos los servicios:

# service yppasswdd start
# service ypserv start
# chkconfig yppasswdd on
# chkconfig ypserv on

9) Registrar nodos en NIS. Introducir el hostname de cada nodo.

# /usr/lib64/yp/ypinit -m

Nodos Esclavos

Todas las ejecuciones se harán desde el nodo maestro.

1) Indicar el NIS DOMAIN NAME.

# pdsh nisdomainname sevendeadlysins

2) Agregar el nombre del dominio al fichero network.

# pdsh "echo 'NISDOMAIN=sevendeadlysins' >> /etc/sysconfig/network"

3) Reiniciar la red de los nodos.

# pdsh "service network restart"

4) Agregar al fichero yp.conf

# pdsh "echo 'domain sevendeadlysins server 10.0.0.1' >> /etc/yp.conf"

5) Iniciar el servicio

# pdsh "service ypbind start"
# pdsh "chkconfig ypbind on"

6) Comprobar que ypbind está corriendo.

# pdsh "rpcinfo -u localhost ypbind"

7) Crear el fichero hosts.conf.

# pdsh "echo 'order hosts, nis, bind' >> /etc/hosts.conf"

8) Editar el fichero nsswitch.conf

# scp root@ira:/etc/nsswitch.conf .
# nano nsswitch.conf
passwd: files nis
shadow: files nis
group: files nis
hosts: files dns
netgroup: files nis
automount: files nis
aliases: files nis

9) Copiar el fichero nsswitch.conf a los nodos.

# scp nsswitch.conf root@:/etc

Crear nuevo usuario

Para crear un nuevo usuario deberemos hacerlo desde el nodo maestro.

1) Crear nuevo usuario

# useradd -m -s /bin/bash -d /home/jose.casero jose.casero

2) Asignar una contraseña al usuario creado.

# passwd jose.casero

4) Propagar la configuración a todos los nodos.

# cd /var/yp
# make
# service ypserv restart

Cada vez que se añada un usuario deben seguirse estos pasos.

Be Green, Be Good!

h1

Parallel Distributed SHell && Wake-On-Lan

12/03/2012

Parallel Distributed SHell

Pdsh es una herramienta orientada a entornos de alto rendimiento que permite la ejecución de comandos en sistemas paralelos. Gracias a esta herramienta podemos realizar operaciones en todos los nodos del cluster con un solo comando. Instalaremos Pdsh para hacer menos monótona la instalación de los paquetes necesarios.

Una de las opciones de Pdsh es la comunicación entre los nodos mediante ssh. Necesitamos crear una clave pública para realizar conexiones ssh sin la necesidad de introducir la contraseña. Detallamos los pasos para ello.

1) Creamos las claves pública y privada.

# ssh-keygen -t rsa -f id_rsa

2) Copiamos la clave pública a todos los nodos.

# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.[2-7]

De esta forma ya podemos hacer conexiones seguras entre los nodos sin necesidad de introducir la contraseña.

3) Instalar Pdsh en el nodo maestro.

# yum -y install pdsh

Para probar si funciona correctamente Pdsh ejecutamos:

# pdsh -w 10.0.0.[2-7] hostname

La salida que da en nuestro caso es:

[root@luxuria ~]# pdsh -w 10.0.0.[2-7] hostname
10.0.0.6: invidia
10.0.0.2: gula
10.0.0.4: acedia
10.0.0.7: superbia
10.0.0.3: avaritia
10.0.0.5: ira

Existe la posibilidad de configurar Pdsh de tal forma que no sea necesario indicar los hosts con el parámetro -w. Por ejemplo, para diferenciar los nodos esclavos del maestro podemos crearnos un fichero /root/slaves e introducir los nombres de los hosts esclavos (uno por cada linea). Mediante la variable de entorno WCOLL indicaremos donde está el fichero. Los comandos para configurar lo anteriormente comentado son los siguientes:

# nano /root/slaves
gula
avaritia
acedia
ira
invidia
superbia

# export WCOLL=/root/slaves

En el caso de que queramos que sean siempre estos hosts añadimos al fichero .bashrc la línea anterior.

Wake-On-Lan

Wake-On-Lan (en adelante WOL) permite iniciar cualquier equipo que esté apagado dentro del cluster. Para ello la placa del nodo debe tener compatibilidad con WOL. Normalmente, en servidores es bastante común esta compatibilidad y no debe de haber ningún problema.

Para instalar WOL en todos los nodos a la vez debemos de seguir los pasos descritos a continuación. Todas las ejecuciones se realizan desde el nodo maestro.

0) Opcional: Desactivar yum-autoupdate. Editar el fichero /etc/sysconfig/yum-autoupdate y cambiar a ENABLED=”false”

nano /etc/sysconfig/yum-autoupdate
ENABLED="false"

1) Instalar ethtool.

# pdsh "yum -y install ethtool"

2) Añadir la variable ETHTOOL_OPTS a los ficheros de configuración de interfaz.

# pdsh 'echo ETHTOOL_OPTS=\"wol g\" >> /etc/sysconfig/network-scripts/ifcfg-eth0'

Ya debería de estar instalado con lo cual la única forma de probar es apuntar las direcciones MAC de todas las interfaces y apagar todos los nodos esclavos. Para ello:

# pdsh "ifconfig eth0 | grep HWaddr | awk '{print $5}'"
# pdsh "shutdown -h now"

3) Instalar net-tools para enviar paquetes mágicos*.

# yum -y install net-tools

4) Finalmente probar el funcionamiento de WOL.

# ether-wake <MAC>

Be Good, Be Green!