You are on page 1of 4

Cmo configurar un clster Beowulf sobre Debian en 20 minutos y no morir en el intento?

Por Juan Alvarez Lemunao

Sistemas Distribuidos

29 de octubre del 2010

Se escogi el sistema operativo deban debido a su amplia documentacin disponible en la red, y por su bajo consumo de recursos se instal la versin no grafica ya que no es necesaria para el experimento a realizar. En tal experimento se tienen 3 mquinas virtuales en VirtualBox con el sistema operativo Debian, se utiliz la imagen debian-505-i386-netinst.iso que puede ser obtenida de http://cdimage.debian.org/debiancd/current/i386/iso-cd/, para el maestro se utiliz un disco de 4GB, para los esclavos se utiliz un disco de 3GB, en ambos casos el disco es dinmico y la memoria RAM es de 256MB. El maestro tiene 2 tarjetas de red la primera es de tipo Puente y la segunda es de tipo Interna, en el caso de los esclavos es de tipo interna, pero se puede utilizar primeramente NAT o Puente para la instalacin o acciones necesarias para el acceso a internet antes de configurarlo como se debe. El orden de instalacin es el siguiente NAT, DHCP, DNS, NFS, NIS, SSH y MPI. Configuracin del NAT Para el mapeo del NAT se utiliza el archivo disponible en http://www.inf.uct.cl/~amellado/archivos/Sim ple_NAT.txt el cual contiene una configuracin simple, se ingresa en el script de inicio /etc/rc.local y se debe colocar antes de la instruccin exit 0 con lo que debera quedar as:
iptables iptables iptables iptables iptables iptables exit 0 -t -t -t -t -t -t filter nat -F filter filter filter nat -A -F -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT POSTROUTING -o eth0 -j MASQUERADE

Instalacin:

apt-get install dhcp3-server


Editamos el archivo /etc/dhcp3/dhcpd.conf que nos quedar:
ddns-update-style none; option domain-name "jfhack.info"; default-lease-time 600; max-lease-time 7200; option subnet-mask 255.255.255.0; option broadcast-address 192.168.20.255; option routers 192.168.20.1; option domain-name-servers 192.168.5.1; subnet 192.168.20.0 netmask 255.255.255.0 { range 192.168.20.10 192.168.20.254; } log-facility local7;

Con esto las maquinas van a tener una direccin IP que parte de 192.168.20.10 hasta 192.168.20.254, en el caso del option domain-name-servers se coloca la IP del servidor de nombres de la mquina, el cual se puede obtener en el archivo /etc/resolv.conf, en este caso era 192.168.5.1. Modificamos el archivo server y lo dejamos:
INTERFACES="eth1"

/etc/default/dhcp3-

Siendo que interna,

eth1 es la interface de red configuramos el archivo /etc/network/interfaces que nos quedar as:
auto lo eth0 eth1 iface lo inet loopback iface eth0 inet dhcp iface eth1 inet static address 192.168.20.1 netmask 255.255.255.0 network 192.168.20.0

En el esclavo instalamos: y luego

apt-get install dhcp-client /etc/network/interfaces que nos quedar:


auto lo eth0 iface eth0 inet dhcp iface lo inet loopback

configuramos

el

archivo

Luego descomentamos net.ipv4.ip_forward=1 del archivo /etc/sysctl.conf Configuracin del DHCP Para instalar y configurar el servicio DHCP se sigui de la siguiente pgina http://www.guatewireless.org/os/linux/distro s/debian/ubuntu/como-instalar-y-configurarun-servidor-dhcp-en-linux-ubuntu-debian/

Configuracin del DNS Para la configuracin del DNS se sigui la pgina http://manes.debianchile.org/bind.html. Instalamos: Luego

apt-get install bind9 /etc/bind/named.conf.options para que quede:


configuramos el archivo

29 de octubre del 2010

options{

apt-get install nis


directory "/var/cache/bind"; forwarders { 192.168.5.1; }; auth-nxdomain no; listen-on-v6 { any; };

En el maestro:
Luego definimos el domainname haciendo:

domainname jfhack.info
Podemos

};

Donde en los forwarders debe ir la IP antes explicada que se puede encontrar en

/etc/resolv.conf.

est listo haciendo more luego modificamos el archivo /etc/default/nis y le modificamos los valores a las siguientes lneas:

/etc/defaultdomain

ver

que

Ahora debemos dejar el archivo /etc/hosts en el maestro y los esclavos as:


127.0.0.1 192.168.20.1 192.168.20.10 192.168.20.11 localhost master slave1 slave2

NISSERVER=master NISCLIENT=false NISMASTER=master

Configuracin del NFS Para esta configuracin se sigui la pgina http://www.forat.info/2008/05/07/comoinstalar-y-configurar-un-servidor-nfs-y-susclientes-en-linux-ubuntu-y-linux-debian/ Instalamos:

Luego agregamos un usuario llamado prueba con el comando useradd -m prueba luego levantamos los servicios de la siguiente manera:

/usr/sbin/ypserv start /usr/sbin/rpc.yppasswd /usr/sbin/rpc.ypxfrd /usr/lib/yp/ypinit m


Aqu para continuar presionamos Ctrl+D, y luego Y. Ahora se han actualizado las tablas de usuarios del NIS, vamos a crear otro usuario llamado otro con el comando useradd m otro, ahora para actualizar las tablas del NIS nuevamente para que el usuario otro aparezca debemos entrar en el directorio /var/yp y ejecutar make con eso se actualiza el registrado en el NIS, lo mismo para el caso de eliminar un usuario que se hace con userdel -f r nombre. Para ver que el servicio est corriendo debemos ejecutar rpcinfo p y debemos ver la columna derecha el proceso ypserv. Luego ya instalado el NIS en cada esclavo con su configuracin por defecto, hacemos

apt-get install nfs-kernel-server


para

rpcinfo p y vemos que aparezca nfs en la


columna derecha, modificamos tambin archivo /etc/exports y lo dejamos as:
/home 192.168.20.0/255.255.255.0(rw)

probar

que

est

corriendo

ejecutamos el

Con esto le decimos al servidor que queremos compartir el directorio /home y le damos acceso de lectura y escritura con (rw), reiniciamos el servidor con:

/etc/init.d/nfs-kernel-server restart
Ahora en cada esclavo hay que configurar el nfs, primero instalamos:

domainname jfhack.info
ypserver master

Luego modificamos el archivo /etc/yp.conf y lo dejamos as: Donde master es el nombre del maestro definido en el archivo /etc/hosts del esclavo. Para finalizar modificamos el archivo /etc/nsswitch.conf agregndole a cada lnea la palabra nis y quedara como sigue:
passwd: group: shadow: hosts: networks: protocols: services: ethers: rpc: netgroup: compat nis compat nis compat nis files dns nis files nis db files nis db files nis db files nis db files nis nis

apt-get install nfs-common


Luego al archivo /etc/fstab lo modificamos agregndole la siguiente linea:
192.168.20.1:/home /home nfs

Configuracin del NIS Para configurarlo se sigui la siguiente pgina http://mguazzardo.wordpress.com/2008/10/28/i ntroduccion-a-los-servicios-de-directorios/ Primero se instala el NIS en el maestro y los esclavos.

29 de octubre del 2010

Modificamos el archivo /etc/passwd y le agregamos lo siguiente al final del archivo:


+::::::

Y ejecutamos ypbind. Configuracin del SSH Instalacin: En el maestro y en cada esclavo instalar openSSH con el comando: se debe

Donde master, slave1 y slave2 son los nombres del maestro, esclavo 1 y esclavo 2 respectivamente definidos el archivo /etc/hosts y slots=1 indica el nmero de procesadores de la mquina. Archivo de ejemplo mpi anillo.c:
#include <stdio.h> #include <mpi.h> int main(int argc, char *argv[]){ MPI_Status status; int num, rank, size, tag, next, from; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); /* Usaremos una etiqueta arbitraria de valor 201. Calculamos el identificador (rango) del siguiente y del anterior, suponiendo un anillo */ tag = 201; next = (rank + 1) % size; from = (rank + size - 1) % size; /* En el proceso primario preguntamos un parametro */ if(rank==0){ printf("Introduce el numero de vueltas al anillo: "); scanf("%d", &num); printf("Proceso %d envia %d al proceso %d\n",rank, num,next); MPI_Send(&num, 1, MPI_INT, next, tag, MPI_COMM_WORLD);} /* Los procesos "pasan" el numero de vueltas que faltan. Cuando llega al proceso 0, se descuenta una vuelta. Cuando un proceso recibe un 0, lo pasa y termina.*/ do{ MPI_Recv(&num,1,MPI_INT,from,tag,MPI_COMM_WORLD,&status); printf("Proceso %d ha recibido %d\n", rank, num); if(rank == 0) { --num; printf("Proceso 0 descuenta una vuelta\n");} printf("Proceso %d envia %d al proceso %d\n",rank,num,next); MPI_Send(&num, 1, MPI_INT, next, tag, MPI_COMM_WORLD); }while(num>0); printf("Proceso %d termina\n", rank); /* El proceso "primario debe esperar el ultimo envio del ultimo proceso antes de terminar */ if(rank == 0) MPI_Recv(&num,1,MPI_INT,from,tag,MPI_COMM_WORLD,&status); MPI_Finalize(); return 0;}

apt-get install openssh-server


El objetivos es establecer una comunicacin entre el maestro y todos los esclavos mediante SSH sin necesidad de requerir contrasea, esto se hace mediante un usuario en comn. Se utilizara el usuario llamado otro. Debemos iniciar sesin como el usuario otro y ejecutar ssh-keygen t rsa y presionar enter a las preguntas, se generar un directorio llamado .ssh en el cual se encuentra la clave pblica que debe llamarse id_rsa.pub. Debemos poner el contenido de esa clave en el archivo authorized_keys como es solo est la clave que necesitamos basta con copiarla dentro de .ssh con este comando: cp

id_rsa.pub authorized_keys

Para probar que funciona, iniciado sesin como otro debemos ejecutar ssh slave1, siendo slave1 el nombre del primer esclavo definido en el archivo /etc/hosts, al ejecutar esta instruccin deveriamos poder conectarnos con el esclavo1 mediante SSH sin necesidad de ingresar la contrasea. Configuracin del MPI Para esta configuracin se sigui la pgina http://techtinkering.com/articles/?id=32 Instalacin: En el maestro:

apt-get install build-essential apt-get install openmpi-bin openmpi-common libopenmpi1 libopenmpi-dev


En cada esclavo:

Para compilar se ejecuta el comando:

mpicc anillo.c o anillo.out


Para ejecutar es:

apt-get install libopenmpi1

openmpi-bin

openmpi-common

mpirun hostfile .mpi_hostfile ./anillo.out


En el caso de este ejemplo se puede apreciar el funcionamiento iniciando sesin en los esclavos y ejecutando el comando top U otro, para este ejemplo es necesario darle al programa el nmero de vueltas del anillo. Finalmente est listo el clster Beowulf.

Ahora iniciamos sesin como el usuario otro y creamos el archivo .mpi_hostfile el cual tendr lo siguiente:
master slots=1 slave1 slave2

29 de octubre del 2010