cluster en ubuntu 11.10 utilizando nfs
DESCRIPTION
Es una breve guía de cómo realizar un cluster utilizando el sistema de archivos nfs y máquinas virtuales con Oracle VM VirtualBox.TRANSCRIPT
![Page 1: Cluster en Ubuntu 11.10 utilizando nfs](https://reader036.vdocuments.site/reader036/viewer/2022072109/55cf9a8c550346d033a24645/html5/thumbnails/1.jpg)
CLUSTER Francisco Daniel García Noriega
![Page 2: Cluster en Ubuntu 11.10 utilizando nfs](https://reader036.vdocuments.site/reader036/viewer/2022072109/55cf9a8c550346d033a24645/html5/thumbnails/2.jpg)
Tabla de contenido Requerimientos previos ...................................................................................................................... 2
Instalación de paquetes fundamentales ............................................................................................. 3
Acceso remoto .................................................................................................................................... 4
Servidor de archivos Network File System (NFS) ................................................................................ 5
Entorno de desarrollo ......................................................................................................................... 7
Prueba del cluster ............................................................................................................................... 7
Reflexión .............................................................................................................................................. 8
Este reporte se basa en el artículo:
Cluster Beowulf + OpenMPI + NFS
![Page 3: Cluster en Ubuntu 11.10 utilizando nfs](https://reader036.vdocuments.site/reader036/viewer/2022072109/55cf9a8c550346d033a24645/html5/thumbnails/3.jpg)
Requerimientos previos El cluster se llevó a cabo en la distribución de Ubuntu 11.10 instalado en dos máquinas virtuales con
Oracle VM VirtualBox.
Los usuarios en ambas máquinas deben ser administradores y llamados igualmente.
En este escrito se utiliza el nombre de usuario: pako y los nombres de los dispositivos:
pako-master y pako-esclavo, para el master y el esclavo respectivamente.
En el siguiente reporte se va a referir a nodo master y nodo esclavo a los diversos nodos a configurar
en el cluster, únicamente se configuró un nodo esclavo, aunque el número de esclavos puede ser
mayor.
Es necesario configurar cada máquina con Adaptador puente en la configuración de la Red para
poder tener una red virtual satisfactoria para el proyecto
.
Como anticipo al proceso de la instalación y configuración del cluster se consideró pertinente
configurar las ip como estáticas en todos los nodos.
La configuración de la ip estática en Ubuntu es de la siguiente manera:
Se configura a través de un editor de texto con privilegios de administrador el archivo interfaces
encontrado en /etc/network/ esto se realizó a través de nano en la terminal como se muestra:
sudo nano /etc/network/interfaces
el archivo se modificó y se le agregó la siguiente información:
iface eth0 inet static
address 192.168.1.76
netmask 255.255.255.0
gateway 192.168.1.255
Estos fueron los datos introducidos a para la máquina en el nodo master y en el nodo esclavo se
llevó a cabo la misma modificación sólo que de esta manera:
![Page 4: Cluster en Ubuntu 11.10 utilizando nfs](https://reader036.vdocuments.site/reader036/viewer/2022072109/55cf9a8c550346d033a24645/html5/thumbnails/4.jpg)
iface eth0 inet static
address 192.168.1.77
netmask 255.255.255.0
gateway 192.168.1.255
De esta manera es pertinente determinar que cuando nos refiramos a las IP, van a ser destinadas a
sus respectivas entidades es decir:
Nodo IP asignada
Master 192.168.1.76
Esclavo 192.168.1.77
Una vez realizada esta configuración no se deberían tener problemas con un cambio repentino de
IP lo cual va a ser necesario para trabajar de manera cómoda.
Instalación de paquetes fundamentales Posteriormente se prosiguió a la instalación de las diversas herramientas que se van a utilizar en la
configuración e instalación del cluster a través de las siguientes instrucciones:
En ambos:
sudo apt-get install openmpi-bin openmpi-common libopenmpi1.3 libopenmpi-dev
sudo apt-get install ssh
apt-get install build-essential
En el master:
sudo apt-get install nfs-kernel-server nfs-common portmap
En el esclavo:
sudo apt-get install nfs-common portmap
Es necesaria una conexión a Internet para la instalación de los paquetes necesarios.
![Page 5: Cluster en Ubuntu 11.10 utilizando nfs](https://reader036.vdocuments.site/reader036/viewer/2022072109/55cf9a8c550346d033a24645/html5/thumbnails/5.jpg)
Acceso remoto Ahora ya que está todo instalado, es necesario empezar la configuración para el cluster.
Primeramente es necesario que el master tenga la capacidad de ejecutar comandos en cada nodo y
es necesario que se permita el acceso via ssh sin clave.
Se tiene que generar una clave pública en el nodo master y ésta será la que nos permitirá acceder
de manera remota a cada nodo sin necesidad de claves por línea de comando. Para esto es necesario
generar una clave de la siguiente manera:
pako@pako-master:~$ ssh-keygen
En este comando se debe aceptar el directorio por defecto para almacenar la llave y en caso de
solicitar una frase de paso dejar vacía la petición de modo que no haya alguna.
Es necesario distribuir la llave generada a cada uno de los nodos del cluster, para hacer esto posible
se utiliza la copia de manera remota con la instrucción scp.
Se debe crear un directorio llamado .ssh y es aquí donde se ubicarán las llaves.
pako@pako-esclavo:~$ mkdir .ssh
pako@pako-esclavo:~$ chmod 700 .ssh
Una vez asignados los permisos y creado el directorio se procede a la copia.
pako@pako-master:~$ scp .ssh/id_rsa.pub [email protected]:
Ahora se accede al nodo esclavo donde copiamos la llave y la ubicamos en la localización correcta.
pako@pako-esclavo:~$ mv id_rsa.pub .ssh/authorized_keys
Cabe mencionar que en caso de tener más nodos esclavos hay que repetir este proceso para cada
uno.
Hecho lo anterior se puede comprobar que el nodo master es capaz de ejecutar comandos en el
nodo esclavo y se demuestra de la siguiente manera:
pako@pako-master:~$ ssh [email protected] hostname
respondiendo de la siguiente manera:
pako-esclavo
Al recibir el nombre del dispositivo del esclavo demuestra que funciona correctamente.
Bien, ahora para fines prácticos se puede modificar el archivo hosts y así identificar cada dirección
IP mediante un alias de la siguiente manera:
sudo nano /etc/hosts
modificando el archive agregando lo siguiente:
192.168.1.76 master master
![Page 6: Cluster en Ubuntu 11.10 utilizando nfs](https://reader036.vdocuments.site/reader036/viewer/2022072109/55cf9a8c550346d033a24645/html5/thumbnails/6.jpg)
192.168.1.77 esclavo esclavo
Esto puede hacerse en cada uno de los nodos, esclavos y master.
Su comprobación se puede ver con el programa ping de la siguiente manera:
pako@pako-master:~$ ping eslcavo
pako@pako-esclavo:~$ ping master
y así comprobamos si existe conexión entre los nodos.
Servidor de archivos Network File System (NFS) Es necesaria la configuración de un servidor de archivos en los nodos para trabajar únicamente en
el master y mediante la exportación del directorio y el montaje remoto desde los nodos se pueda
tener los mismos archivos en cada componente.
Para configurar un recurso compartido se crea un directorio en el home del master que se llamará
clusterdir.
pako@pako-master:~$ mkdir clusterdir
Ahora en modo administrador se exporta este directorio mediante NFS para que los nodos puedan
montarlo remotamente, para esto se necesita modificar el archivo exports en el master:
sudo nano /etc/exports
en este archivo se procede a agregar la siguiente información:
/home/pako/clusterdir 192.168.1.0/24(rw,no_subtree_check,async,no_root_squash)
Aquí hay que hacer hincapié en la sección 192.168.1.0/24. Aquí se determina este valor debido a
que las IP que se está utilizando comienzan con 192.168.1 y el /24 en la sección indica el número de
bits en la IP a considerar y cada sección XXX.XXX.XXX.XXX es de 8 bits, por lo tanto al determinar 24
estamos considerando los primeros XXX.XXX.XXX y dejando la última sección de la IP
arbitrariamente. Por ejemplo, si se va a trabajar con IP’s con un formato 192.168.0.XXX es prudente
cambiar esta sección por 192.168.0.0/24.
Una vez aclarada la situación se debe reiniciar el servicio de NFS:
pako@pako-master:~$ sudo /etc/init.d/nfs-kernel-server restart
Ahora se procede a visualizar si el directorio compartido es accesible desde el nodo.
pako@pako-esclavo:~$ showmount -e 192.168.1.76
y se mostrará un mensaje:
Export list for 192.168.1.76:
/home/pako/clusterdir 192.168.1.0/24
Ahora que se puede visualizar es necesario montar el recurso desde línea de comando y
posteriormente agregarlo a fstab para el montado automático y así cada vez que se arranque el
nodo éste quede montado. Se crea un directorio llamado clusterdir en el home, éste debe ser
![Page 7: Cluster en Ubuntu 11.10 utilizando nfs](https://reader036.vdocuments.site/reader036/viewer/2022072109/55cf9a8c550346d033a24645/html5/thumbnails/7.jpg)
llamado de la misma maner que el que se compartió en el nodo master, aquí es donde se montará
el recurso compartido mediante NFS en el master.
pako@pako-esclavo:~$ mkdir clusterdir
pako@pako-esclavo:~$ sudo mount -t nfs 192.168.1.76:/home/pako/clusterdir /home/pako/clusterdir
La segunda instrucción es en una sola línea y el salto de línea define un espacio.
Para comprobar si fue exitoso lo anterior se demuestra de la siguiente manera:
pako@pako-esclavo:~$ mount
y debe responder con algo parecido
/dev/xvda2 on / type ext3 (rw,noatime,nodiratime,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw)
192.168.1.76:/home/pako/clusterdir on /home/pako/clusterdir type nfs (rw,addr=192.168.1.76)
Se puede observar que el último montaje es correspondiente al directorio compartido por NFS.
Ahora para realizar este proceso de montaje del recurso exportado en cada nodo automáticamente
se debe modificar el archivo fstab ubicado en /etc/fstab
sudo nano /etc/fstab
y se agrega la siguiente línea:
192.168.1.96:/home/pako/clusterdir /home/pako/clusterdir nfs rw,sync,hard,intr 0 0
Para saber si la modificación fue correcta se procede a desmontar el recurso con lo siguente:
pako@pako-esclavo:~$ umount /home/pako/clusterdir/
y posteriormente se montan los sistemas declarados en fstab
pako@pako-esclavo:~$ mount –a
Una vez establecido lo anterior el NFS ha quedado configurado satisfactoriamente.
![Page 8: Cluster en Ubuntu 11.10 utilizando nfs](https://reader036.vdocuments.site/reader036/viewer/2022072109/55cf9a8c550346d033a24645/html5/thumbnails/8.jpg)
Entorno de desarrollo Ahora se debe configurar MPI para indicar qué nodos componen el cluster, esto se puede realizar
creando un archivo de configuración llamado .mpi_hostfile en el home del nodo master con el
siguiente contenido:
# Nodo master
localhost slots=2
# Nodo esclavo
esclavo slots=2
Prueba del cluster Los comandos para generar un binario ejecutable de un programa realizado en C se realiza de la
siguiente manera:
mpicc file_name.c –o file_name
Es necesario que el ejecutable se encuentre en el clusterdir para que se pueda ejecutar en todos los
nodos del cluster.
Para ejecutar un binario ejecutable localmente simplemente se realiza de la siguiente forma:
./file_name
y para ejecutarlo distribuyéndolo en todos los nodos del cluster se utiliza la herramienta mpirun
indicando una cantidad de procesos a ejecutar:
mpirun -np # --hostfile ../.mpi_hostfile ./file_name
en la línea anterior # indica el número de procesos. Por ejemplo, 5. Y file_name el nombre del binario
ejecutable. Cabe mencionar que se está en la ubicación dentro del clusterdir en el master, es decir:
pako@pako-master:~/clusterdir$ mpirun -np # --hostfile ../.mpi_hostfile ./file_name
![Page 9: Cluster en Ubuntu 11.10 utilizando nfs](https://reader036.vdocuments.site/reader036/viewer/2022072109/55cf9a8c550346d033a24645/html5/thumbnails/9.jpg)
Reflexión Personalmente considero esta práctica muy fructífera debido a que requiere un tanto de destreza
en la interacción con Ubuntu mediante la terminal. Se requiere paciencia si no se tiene un equipo
de cómputo potente y abre el horizonte de posibilidades para poder hacer un cluster ya sea
mediante dos computadoras físicas, el sistema en la partición y una máquina virtual o
completamente virtualizado, etc. Hay que destacar que la manera de programar en este ambiente
y hacer que el programa se distribuya de una manera eficiente me resulta algo esotérico e invita a
estudiar esta nueva rama.
Finalmente, estoy muy satisfecho con la realización del cluster y con la resolución de diversos
problemas de configuración presentados en diversos casos.