You are on page 1of 6

Como crear un cluster con un SO Linux, distribucin BACKTRACK 5 R3 Para crear un cluster se necesitan mnimo 2 computadoras, una ser

llamada MAESTRO que ser en la que se ejecutaran los programas paralelizados, y el otro que ser el ESCLAVO este fungir como el que ejecuta los procesos que reciba, es decir, no ejecutara el programa que se paralelizar sino el proceso que reciba del programa paralelizado que se est ejecutando en el MAESTRO. Crear 2 maquinas virtuales: CARACTERSTICAS: Maquina 1: Ip: 192.168.1.1 Usuario: root Privilegios: ADMINISTRADOR (root) Contrasea: admin Nombre del equipo: MAESTRO Imagen del prompt: root@MAESTRO:~# Maquina 2: Ip: 192.168.1.2 Usuario: root Privilegios: ADMINISTRADOR (root) Contrasea: admin Nombre del equipo: ESCLAVO Imagen del prompt: root@ESCLAVO:~# Ahora se procede a configurar el archivo hosts: Primero configuramos al MAESTRO:
root@MAESTRO:~# gedit /etc/hosts

Agregamos al final del archivo las direcciones ips de las 2 computadoras con sus alias:
192.168.1.1 maestro master 192.168.1.2 esclavo slave

Guardamos y cerramos. Ahora realizamos la misma accin pero desde el ESCLAVO:


root@ESCLAVO:~# gedit /etc/hosts

Agregamos al final del archivo las direcciones ips de las 2 computadoras con sus alias:
192.168.1.1 maestro master 192.168.1.2 esclavo slave

Guardamos y cerramos. Comprobamos la conexin:


root@MAESTRO:~# ping esclavo root@MAESTRO:~# ping slave root@ESCLAVO:~# ping maestro root@ESCLAVO:~# ping master

Si se recibe respuesta del ping realizado desde el MAESTRO:


Respuesta desde 192.168.1.2: bytes=32 tiempo=78ms TTL=56

Y del ping realizado desde el ESCLAVO:


Respuesta desde 192.168.1.1: bytes=32 tiempo=78ms TTL=56

Si se recibe un error verificar que las direcciones ips sean las que estn asignadas a su computadora. Ahora procedemos a descargar los programas que se necesitan para el correcto funcionamiento del cluster:
root@MAESTRO:~# apt-get libopenmpi1.3 libopenmpi-dev install openmpi-bin openmpi-common

Si llega a dar error porque no se tiene privilegios de escritura agregados sudo:


root@MAESTRO:~# sudo apt-get libopenmpi1.3 libopenmpi-dev install openmpi-bin openmpi-common

Nos pedir la contrasea, as que la ingresamos. Realizamos lo mismo desde el ESCLAVO:


root@ESCLAVO:~# apt-get libopenmpi1.3 libopenmpi-dev install openmpi-bin openmpi-common

Ahora instalamos ssh:


root@MAESTRO:~# apt-get install ssh root@ESCLAVO:~# apt-get install ssh

Una vez instalado arrancamos el servicio:


root@MAESTRO:~# start ssh root@ESCLAVO:~# start ssh

Nos aseguramos que este corriendo el servicio, ssh trabaja en el puerto 22 de nuestra computadora as que veamos:
root@MAESTRO:~# netstat -noa root@ESCLAVO:~# netstat noa

Y nos muestra una lista de todos los puertos que tenemos abiertos y ofreciendo un servicio. Netstat del MAESTRO:
Proto TCP Direccin local 192.168.1.1:22 Direccin remota 0.0.0.0:0 Estado LISTENING PID 1080

Netstat del ESCLAVO:


Proto TCP Direccin local 192.168.1.2:22 Direccin remota 0.0.0.0:0 Estado LISTENING PID 1088

Ahora instalaremos nfs:


root@MAESTRO:~# apt-get install nfs-kernel-server nfs-common portmap root@ESCLAVO:~# apt-get install nfs-kernel-server nfs-common portmap

Si durante esta instalacin marca algn error intentar lo siguiente:


root@MAESTRO:~# apt-get install portmap root@MAESTRO:~# apt-get install nfs-kernel-server nfs-common

root@ESCLAVO:~# apt-get install portmap root@ESCLAVO:~# apt-get install nfs-kernel-server nfs-common

Instalamos los compiladores de c/c++:


root@MAESTRO:~# apt-get install build-essential root@ESCLAVO:~# apt-get install build-essential

Una vez instalado todo lo anterior procedemos a configurar las maquinas: Primero configuramos la maquina MAESTRO:
root@MAESTRO:~# ssh-keygen

Nos pedir que ingresemos la direccin donde se guardara el archivo, le damos enter. Luego nos pedir una frase clave, le damos enter. Y nos pedir confirmar la clave, le damos enter. Luego necesitamos que esta clave la conozca el ESCLAVO para que se pueda establecer la conexin asi que se la mandamos por scp:
root@MAESTRO:~# scp .ssh/id_rsa.pub root@ESCLAVO:

Nos preguntara si queremos agregar la conexin al archivo host_rsa, le damos enter. Si nos marca un error intentar con esto:
root@MAESTRO:~# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key root@MAESTRO:~# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

Comprobamos que se establece la conexin ssh:


root@MAESTRO:~# ssh root@ESCLAVO

Nos preguntara si queremos agregar la conexin al archivo host_rsa, le damos enter. Si sigue dando el error proceder la misma accin pero con el ESCLAVO:
root@ESCLAVO:~# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key root@ESCLAVO:~# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

Y volver a intentar la conexin. Si todo va bien intentar enviar de nuevo el archivo id_rsa.pub. Si el comando scp funciono la primera vez, es decir, que ya se envio el archivo al ESCLAVO, nos vamos al ESCLAVO y tecleamos lo siguiente: Creamos una carpeta .ssh para almacenar el archivo id_rsa.pub
root@ESCLAVO:~# mkdir .ssh

Le damos permisos:
root@ESCLAVO:~# chmod 700 .ssh

Ahora movemos el archivo a esa carpeta:


root@ESCLAVO:~# mv id_rsa.pub .ssh/authorized_keys

Si el comando no funciono a la primera, teclear lo siguiente:


root@ESCLAVO:~# mv id_rsa.pub .ssh/authorized_keys

Solo se procede a mover el archivo debido a que se cre la carpeta cuando se configuraron los archivos de rsa y dsa. Esto es para ejecutar despues de las dos formas de configuracin de ssh.
root@MAESTRO:~# ssh root@ESCLAVO hostname

Esto nos deber regresar el nombre del host(equipo) es este caso: esclavo:

Ahora necesitamos una carpeta que se comparta entre el MAESTRO y el ESCLAVO. Para ello en MAESTRO creamos una carpeta a compartir:
root@MAESTRO:~# mkdir cluster

Hasta este punto ya est instalado nfs, as que solo lo configuraremos:


root@MAESTRO:~# gedit /etc/exports

Agregamos las siguientes lneas al final del archivo:


/root/cluster *(rw,no_subtree_check,async,no_root_squash)

Guardamos y cerramos. Nota: El * representa localhost, se puede sustituir por: 192.168.1.1/24 que es la direccin ip del MAESTRO. Y ahora reiniciamos el servicio nfs:
root@MAESTRO:~# /etc/init.d/nfs-kernel-server restart

Ahora vamos al ESCLAVO, solo vamos a configurar ya que ya lo habamos descargado antes. Creamos una carpeta para montar la unidad del MAESTRO:
root@ESCLAVO:~# mkdir cluster root@ESCLAVO:~# showmount e maestro

Con esto nos debe mostrar las carpetas que esta compartiendo y podemos montar en nuestra maquina (ESCLAVO) Nos debera mostrar algo como esto:
Export list for 192.168.1.1: /root/cluster 192.168.1.1/24

O no mostrar la direccin IP. Ahora veamos que unidades estn montadas en nuestra maquina (ESCLAVO):
root@ESCLAVO:~# mount

y nos mostrara todas las unidades montadas, pero hasta ahora no est montada la de la maquina MAESTRO. Procedemos a montarla:
root@ESCLAVO:~# mount t nfs master:/root/cluster /root/cluster

Veamos si se monto la unidad con mount:


root@ESCLAVO:~# mount

La ltima lnea que debemos observar es como sigue:


192.168.1.1:/root/cluster (rw,addr=192.168.1.1) on /root/cluster type nfs

Esta es la forma manual de montar una unidad si queremos que cada vez que se inicie el ESCLAVO se monte automticamente debemos configurar el archivo fstab como sigue:
root@ESCLAVO:~# gedit /etc/fstab

Y le agregamos al final del archivo lo siguiente:


master:/root/cluster /root/cluster nfs rw,sync,hard,intr 0 0

Comprobamos que funcione:


root@ESCLAVO:~# umount /root/cluster

Con esto desmontamos la unidad. Ahora vamos a remontar:


root@ESCLAVO:~# mount a

Y checamos las unidades montadas:


root@ESCLAVO:~# mount

Ahora desde la maquina MAESTRO,nos vamos a la carptea que se esta compartiendo, cluster, creamos un archivo de configuracin para repartir los procesos a las computadoras:
root@MAESTRO:~# cd cluster root@MAESTRO/cluster:~# gedit .mpi_hostfile

y le escribimos lo que sigue:


#NODOS MAESTRO: Localhost slots=2 #NODOS ESCLAVO: Esclavo slots=2

Guardamos y cerramos. Ahora creamos el programa HELLO WORLD para mpi:


#include "mpi.h" #include <stdio.h> int main( int argc, char *argv[] ) { MPI_Init( &argc, &argv ); printf( "Hello World\n" ); MPI_Finalize(); return 0; }

Lo guardamos como:
Hello_world.cpp

Lo compilamos:
root@MAESTRO/cluster:~# mpic++ hello_world.cpp o hello_world

Checamos que se haya creado:


root@MAESTRO/cluster:~# ls

Debern aparecer 3 archivos: 1.- hello_world.cpp 2.- hello_world 3.- .mpi_hostfile Probamos que funcione en la maquina MAESTRO:
root@MAESTRO/cluster:~# ./hello_world root@MAESTRO/cluster:~# mpirun np 4 ./hello_world root@MAESTRO/cluster:~# mpirun np 4 hostfile ./hello_world .mpi_hostfile

Como se instalo lo mismo en el ESCLAVO se pueden realizar las pruebas anteriores en l:


root@ESCLAVO/cluster:~# ./hello_world root@ESCLAVO/cluster:~# mpirun np 4 ./hello_world root@ESCLAVO/cluster:~# mpirun np 4 hostfile ./hello_world .mpi_hostfile

Probablemente en esta ltima prueba ocurran las siguientes situaciones: 1.- que se ejecute, si se ejecuta quiere decir que el archivo esta mal escrito por qu?, debido a que el archivo tiene lo siguiente:
#NODOS MAESTRO: Localhost slots=2 #NODOS ESCLAVO: esclavo slots=2

En donde localhost seria igual a 192.168.1.2, porque lo estamos corriendo desde el cliente, y Esclavo es igual a 192.168.1.2, es decir, la misma direccin

2.- que no se ejecute, si no se ejecuta esta bien configurado el archivo ya que esatria de la siguiente forma:
#NODOS ESCLAVO: Localhost slots=2 #NODOS MAESTRO: maestro slots=2

En donde localhost es igual a 192.168.1.2 que es el ESCLAVO, y Maestro es igual a 192.68.1.1, pero por qu arroja el error?, debido a que el que debe distribuir los procesos es el MAESTRO el ESCLAVO no tiene privilegios para distribuir los procesos y se genera el error, pero si se ejecuta localmente (sin distribucin) mientras tenga los archivos necesarios instalados. Si al ejecutar el ./hello_world marca un error de que no puede ejecutarlo instalar lo siguiente:
root@MAESTRO/cluster:~# apt-get install mpich2 libssl-dev

Si en alguna instalacin marca algn error intentar despues de ejecutar la instalacin esto:
root@MAESTRO/cluster:~# apt-get install f

Esto instalara todos los paquetes que necesita para su correcto funcionamiento.