Вы находитесь на странице: 1из 11

Cmo configurar un clster Beowulf sobre Ubuntu Server.

Vctor Ibez Campos. 21 de noviembre del 2014.


Basado en la gua Cmo configurar un clster Beowulf sobre Debian en 20 minutos y
no morir en el intento? De Juan lvarez Lemunao.
Para el siguiente trabajo se utiliz sistema operativo Ubuntu Server 14.04 en su versin x86. No
debera diferir en su versin x64. El trabajo se mont sobre tres mquinas virtuales en
VirtualBox ocupando la configuracin de 512MB de memoria ram y 8GB de disco duro. De
estas maquinas, una es un maestro y el resto son esclavos para el clster. La mquina maestro
tiene dos tarjetas de red, una en modo puente a la interfaz que de internet en el computador
(puede ser la de wifi o la de ethernet, eso depende de como est conectado a internet el
usuario) y otra en modo de red interna, que es la actuar como un switch y por la cual se
comunicarn todas las mquinas. Para las mquinas esclavo, tendrn una tarjeta que tambin
est en modo red interna, pero primeramente pueden estar en modo NAT o puente para
instalar algunos paquetes, pero despus de haber configurado el DNS en la mquina maestra,
se pueden conectar los esclavos, en modo red interna, y ver si tienen acceso a internet.
El orden de configuracin es NAT, DHCP, DNS, NFS, NIS (en el trabajo se pide LDAP, pero en
el caso prctico es muy engorroso su uso), SSH y finalmente el MPI.
Se sugiere realizar estos cambios en el modo superusuario para tener ms comodidad.
Configuracin del NAT
Para el mapeo del NAT se utilizar la siguiente configuracin que es bastante bsica:
iptables
iptables
iptables
iptables
iptables
iptables
exit 0

-t
-t
-t
-t
-t
-t

filter -F
nat -F
filter -P INPUT ACCEPT
filter -P FORWARD ACCEPT
filter -P OUTPUT ACCEPT
nat -A POSTROUTING -o eth0 -j MASQUERADE

IPTABLES nos sirve para configurar el cortafuegos, y dicha configuracin se debe agregar en la
mquina maestro, en el archivo /etc/rc.local antes de la instruccin exit 0. El archivo rc.local van
comandos para que se ejecuten al momento de iniciar el sistema operativo, en este caso, estos
comandos se ejecutarn cada vez que prendamos la mquina maestro.
Luego editamos el archivo /etc/sysctl.conf y descomentamos la linea donde dice
net.ipv4.ip_forward=1.
Configuracin del DHCP

Para instalar y configurar el servicio DHCP en la mquina maestro debemos instalar el


siguiente paquete:
apt-get install dhcp3-server
Luego editamos el archivo /etc/dhcp/dhcpd.conf y lo podemos dejar de la siguiente manera:
ddns-update-style none;
option domain-name "example.com"; //aqu colocan un dominio propio
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0; //mscara de red
option broadcast-address 192.168.1.255; //direccin de broadcast
option routers 192.168.1.1;//direccin de la mquina maestro
option domain-name-servers 192.168.5.1;//direccin(es) DNS
subnet 192.168.1.0 netmask 255.255.255.0 {//direccin de red y mscara
range 192.168.1.10 192.168.1.254;//pool de direcciones
}
log-facility local7;
Se debe colocar un dominio propio, ficticio o real. Los dems datos deben llenarlo respecto a la
configuracin que deben dejar en su red interna. En este caso, las direcciones comenzarn a
distribuirse desde la direccin 192.168.1.10 hasta la 192.168.1.254. En el caso de option
name-domain-servers deben colocar las DNS de su conexin de internet. Estas, de manera
evidente varan segn el lugar donde estn, y donde quieran ejecutar estas mquinas debern
cambiarlas segn la conexin. Para revisar las DNS, en Windows abrir una consola y escribir
ipconfig -all y buscar la lnea donde dice Servidores DNS, en la interfaz donde tienen internet.
En el caso de Linux pueden colocar en la terminal cat /etc/resolv.conf y las lneas nameserver
les entregarn los DNS correspondientes.
Luego modificamos el archivo /etc/default/isc-dhcp-server y lo dejamos as:
INTERFACES="eth1"

Siendo ya la interfaz eth1 nuestra red interna, solo nos queda modificar el archivo
/etc/network/interfaces de la siguiente manera:
auto lo eht0 eth1

iface lo inet loopback


iface eth0 inet dhcp
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
Ahora, en cada esclavo instalamos el siguiente paquete:
apt-get install dhcp-client
Y luego modificamos el mismo archivo /etc/network/interfaces de la siguiente manera:
auto lo eth0
iface eth0 inet dhcp
iface lo inet loopback
Este paso es para ver si se asignan las direcciones IP dentro del pool asignado. Se sugiere
hacerlo despus de la configuracin del DNS.
Para ver si funciona, hay que bajar y levantar la interfaz de cada esclavo con el comando:
sudo ifdown eth1 && sudo ifup eth1

Configuracin del DNS


Instalamos el siguiente paquete:
apt-get install bind9

Luego, modificaremos el archivo /etc/bind/name.conf.options de esta manera:


options{
directory "/var/cache/bind";
forwarders {
192.168.5.1;
};
auth-nxdomain no;
listen-on-v6 { any; };
};
Donde en la lnea forwarders debe ir las direcciones DNS que se obtienen de la manera como
se explic anteriormente.
Finalmente, debemos modificar el archivo /etc/hosts tanto en el maestro como en los esclavos,
dejndolos de esta manera:
127.0.0.1 localhost
192.168.20.1 master
192.168.20.10 slave1
192.168.20.11 slave2
Los nombres master, slave1 y slave2 son los nombres que se les asignaron a las mquinas al
momento de la instalacin del sistema operativo.
Desde este punto podemos conectar los esclavos para ver si el DHCP nos asigna una IP a
cada uno de ellos, y si podemos conectarnos a internet.

Configuracin del NFS


En el maestro instalar el siguiente paquete:
apt-get install nfs-kernel-server

Para comprobar que est funcionando, ejecutamos en la terminal el comando rpcinfo -p, y nos
fijamos si est corriendo el servicio buscando el nombre en la columna derecha, en este caso,
NFS. Luego modificamos el archivo /etc/exports y lo dejamos de la siguiente manera:
/home 192.168.1.0/255.255.255.0(rw)
Asumiendo que las red y la mscara de subred pueden cambiar dependiendo de la
configuracin de cada uno, con esto le decimos al servidor que queremos compartir el
directorio /home y que le estamos dando permisos de lectura y escritura (con (rw)). Despus de
esto reiniciamos el servicio con el siguiente comando:
/etc/init.d/nfs-kernel-server restart
Ahora en cada esclavo, debemos configurar el nfs, de tal manera que debemos instalar lo
siguiente:
apt-get install nfs-common
Posterior a esto, modificamos el archivo /etc/fstab y le agregamos la siguiente lnea al final:
192.168.1.1:/home /home nfs
La primera parte de esta lnea corresponde a la IP del servidor maestro seguido del directorio
que es compartido por el NFS. La segunda parte corresponde al punto donde se montar el
directorio compartido por red y finalmente el tipo de sistema de archivos. Entonces esto se
podra leer de la siguiente manera:
De la IP 192.168.1.1, el directorio /home se montar en el directorio /home y es de tipo NFS
Al modificar este archivo, ahora cada vez que se encienda un esclavo, se montar
automticamente la particin /home en /home, siempre y cuando est disponible.

Configuracin del NIS


En el trabajo, debemos ocupar LDAP para gestionar las cuentas de usuario. Pero este llega a
ser engorroso y sera la nica parte en la cual debemos ocupar una interfaz grfica para poder
configurar los usuarios, lo cual nos obliga a instalar un entorno grfico y por ende, a consumir
recursos. En cambio, se eligi ocupar NIS para gestionar los usuarios, ya que este mtodo no
necesita un entorno grfico y es mucho ms simple.

Primeramente hay que instalar NIS en el maestro y en los esclavos con el siguiente comando:
apt-get install nis
Luego de instalado, debemos definir un dominio (anteriormente designado en la configuracin
del DHCP). Para hacerlo debemos poner lo siguiente:
domainname example.com //donde en example.com va nuestro dominio
Para verificar el cambio, escribimos:
more /etc/defaultdomain
Donde nos debera retornar nuestro dominio designado. Posterior a esto, modificamos el
archivo /etc/default/nis y le cambiamos los valores a las siguientes lneas para dejarlas igual a
esto:
NISSERVER=master // donde master es el nombre del equipo maestro
NISCLIENT=false
NISMASTER=master // donde master es el nombre del equipo maestro
Evidentemente indicando que este mquina (la maestro), ser servidor NIS, no ser un cliente
y que adems ser el NIS maestro.
Posteriormente, agregamos un usuario de ejemplo, en este caso, llamado prueba, con el
siguiente comando:
useradd -m prueba
Luego de esto, levantamos los servicios colocando estos comandos en la consola:
/usr/sbin/ypserv start
/usr/sbin/rpc.yppasswdd
/usr/sbin/rpc.ypxfrd
/usr/lib/yp/ypinit m
Despus del ltimo comando, a lo que aparece apretamos ctrl+D y luego escribimos Y.
Ahora las tablas de usuarios de NIS se han actualizado. Ahora, podemos agregar un nuevo
usuario, llamado otro, de la misma manera como agregamos a prueba. Para actualizar las
tablas de usuarios de NIS con este nuevo usuario llamado otro debemos ir al directorio
/var/yp y ejecutar el comando make. Con esto, ya se actualiza nuestra tabla de usuarios de
NIS. Esta operacin se debe realizar cada vez que se modifica un usuario de NIS, de la misma

manera al momento que se elimina un usuario, que se realiza con el comando userdel -f r
nombre.
Para comprobar que el servicio se est ejecutando, ponemos el comando rpcinfo -p y
buscamos en la columna derecha el proceso ypserv.
Ahora, para configurar los esclavos, debemos definir el dominio de estos, de la misma manera
como se hizo en el maestro (domainname example.com) y luego modificamos el archivo
/etc/yp.conf y lo dejamos de la siguiente manera:
ypserver master // donde master es el nombre de la mquina maestro
Finalmente, debemos modificar el archivo /etc/nsswitch.conf y le agregamos a cada lnea la
palabra nis, dejndolo de la siguiente manera:
passwd: compat nis
group: compat nis
shadow: compat nis
hosts: files dns nis
networks: files nis
protocols: db files nis
services: db files nis
ethers: db files nis
rpc: db files nis
netgroup: nis
Luego, modificamos el archivo /etc/passwd y le agregamos lo siguiente al final del archivo:
+::::::
Y posterior a esto, ejecutamos el comando ypbind.
Recordar que al momento de crear un usuario en NIS, posterior a actualizadas las tablas de
usuarios de NIS, se le debe asignar una contrasea con el comando passwd nombreusuario.
Esto es fundamental para el paso siguiente, que es la configuracin del SSH.

Configuracin del SSH


Se debe instalar en el maestro y en cada esclavo el paquete openSSH con el siguiente
comando:
apt-get install openssh-server

El objetivo es establecer una comunicacin entre el maestro y los esclavos mediante SSH sin la
necesidad de requerir una contrasea. Para probarlo, vamos a ocupar el usuario llamado otro
que creamos anteriormente.
Iniciamos sesin en el maestro con el usuario otro y ejecutamos el comando:
ssh-keygen t rsa
El cual nos mostrar una serie de preguntas donde debemos presionar enter. Finalizado esto,
se nos crear una carpeta llamada .ssh en la cul se encontrar nuestra clave pblica en forma
de archivo, llamado id_rsa.pub.
Debemos poner el contenido de este archivo en el archivo authorized_keys. Pero como slo
necesitamos est clave, simplemente entramos a la carpeta .ssh y copiamos el archivo con el
comando:
cp id_rsa.pub authorized_keys
Para comprobar que funciona, ya iniciado sesin con el usuario otro, escribimos:
ssh slave1
Donde slave1 es el nombre de la mquina esclavo (el cul se defini en el archivo /etc/hosts. Al
ejecutar este comando, deberamos poder conectarnos al slave1 mediante SSH y sin la
necesidad de ingresar una contrasea.

Configuracin del MPI.


En el maestro y en los esclavos, debemos instalar los siguientes paquetes con los siguientes
comandos:
apt-get install libibnetdisc-dev
apt-get install libopenmpi-dev openmpi-bin openmpi-doc

Ahora, debemos iniciar sesin con el usuario otro y crear el archivo .mpi_hostfile el cul
tendr el siguiente contenido:
master slots=1
slave1
slave2
Dnde master, slave1, slave2 son los nombres del maestro, esclavo 1 y esclavo 2 definidos
respectivamente en el archivo /etc/hosts y slots=1 indica el nmero de procesadores de la
mquina.
Ahora, en el maestro debemos crear un archivo en C, que nos servir de ejemplo para probar
la ejecucin del MPI.
Archivo de ejemplo llamado 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 parmetro */

if(rank==0){
printf("Introduce el nmero 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( , rank, num); "Proceso %d ha recibido %d\n"
if(rank == 0) {
--num;
printf( );} "Proceso 0 descuenta una vuelta\n"
printf("Proceso %d envia %d al proceso
,rank,num,next); %d\n"
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 ltimo envoo del


ltimo proceso antes de terminar */

if(rank == 0)
MPI_Recv(&num,1,MPI_INT,from,tag,MPI_COMM_WORLD,&status);
MPI_Finalize();
return 0;

Luego para compilar este archivo, debemos ejecutar el siguiente comando:


mpicc anillo.c o anillo.out
Y finalmente, para ejecutar el archivo de salida, colocamos en la terminal:
mpirun -hostfile .mpi_hostfile ./anillo.out

En el caso de este ejemplo, al momento de ejecutar el archivo de salida, se nos preguntar el


nmero de vueltas del anillo. Justo en este momento podemos iniciar sesin en los equipos
esclavos (no con el usuario otro, sino con el que se cre en la instalacin) y ejecutar el
siguiente comando:
top -U otro
El cual mostrar los procesos que est ejecutando el usuario otro en las mquinas esclavo.
Con esto, ya queda listo nuestro clster Beowulf.

Вам также может понравиться