xumarhu.net xumarhu.net biblioteca
Principal > Biblioteca > Manuales de Instalación > Instalación de un cluster con máquinas Linux virtualizadas

Instalación de un cluster con máquinas Linux virtualizadas



Pasos para la construcción del Cluster Virtualizado

1) Virtualizar Linux
2) Actualización y configuración de red.
3) Instalación de MPI4PY y SSH.



NOTA: Hacer click sobre las imagenes para poder verlas a tamaño normal:



PASO 1) Virtualizar Linux

El nombre de la primer máquina será "Ubuntu_20-10_M1" y será nuestro nodo "Maestro":


Máquina Linux 1 virtualizada (hacer click para hacer mas grande):

Máquina Linux 1 virtualizada


El nombre de la segunda máquina será "Ubuntu_20-10_M2" y será nuestro nodo "Esclavo". En un cluster pequeño normalmente sólo hay un nodo "Maestro" y todos los demás serán "Esclavos". Se podrían agregar mas máquinas virtuales que funcionarán como "Esclavos" del nodo "Maestro".


Máquina Linux 2 virtualizada (hacer click para hacer mas grande):

Máquina Linux 2 virtualizada



PASO 2) Actualización y configuración de red

Para ambas máquinas virtuales hacer los siguientes pasos:

Cambio a usuario root:
$ sudo su root

Actulizar los paquetes del sistema:
$ apt-get update

Actulizar los cambios de vesión de algunos paquetes del sistema:
$ apt-get upgrade

Ahora verificamos la direción IP de cada máquina virtual:
$ ifconfig

Para este ejemplo:
La máquina "Maestro" es: 192.168.1.73
La máquina "Esclavo" es: 192.168.1.74


Nota: Como se puede observar ambas computadoras deben estar en el mismo segmento de red y deben de estar configuradas como de tipo "Puente", cuando se configura la máquina virtual, para que cada computadora tenga su propia IP y se comporte como una computadora independiente.

Ejecutamos un "ping" del Maestro al "Esclavo" para verificar la comunicación de red:
$ ping 192.168.1.74

Verificamos la comunicación de red (Nodo Esclavo - Linux):

Y ejecutamos un "ping" ahora del "Esclavo" al "Maestro" para verificar la comunicación de red por los 2 lados:
$ ping 192.168.1.73




PASO3) Instalación de MPI4PY y SSH

Para ambas máquinas virtuales hacer los siguientes pasos:

Seguimos trabajando en la consola como usuario "root" y ahora instalamos MPI4PY:
$ apt-get install python3-mpi4py -y

Editamos el arhivo hosts para colocar todas las computadoras del Cluster y escribimos:
$ nano /etc/hosts

Nos abre el editor de texto y al final observamos nuestra computadora:
127.0.1.1 raspberry

Modificamos el nombre de nuestra computadora y esa línea debe quedar así: 127.0.1.1 raspberry1

Ahora le agregamo al final los datos de la computadora "Esclavo" (si estoy en la computadora "Maestro"):
192.168.1.74 raspberry2

Oprimimos CTRL + X para guardar el archivo y regresar a la consola.

Ahora hay que hacer lo mismo con la computadora "Esclavo" donde en el archivo "hosts" agregaremos al final:
192.168.1.73 raspberry1



También tenemos que cambiar el nombre de nuestra computadora, por default es "raspberry" y la cambiaremos a "raspberry1", ya que cada computadora del Cluster debe ser única, por lo cual editamos el archivo hostname:
$ nano /etc/hostname

Nos abre el editor de texto y observamos el nombre actual de la computadora:
raspberry

Modificamos el nombre de nuestra computadora y esa línea debe quedar así:
raspberrypi1

Oprimimos CTRL + X para guardar el archivo y regresar a la consola.

Ahora hay que hacer lo mismo con la computadora "Esclavo" donde en el archivo "hostname" pondremos el nuevo nombre:
raspberrypi2


Nota: Para que el cambio de nombre surta efecto hay que reiniciar toda la máquina virtual en este momento, pero esto puede ocasionar un cambio de IP en alguna ó en ambas máquinas virtuales. Por lo anterior, en un cluster grande se ponen direcciones IP fijas a cada computadora. También se recomienda como primer paso de toda la instalación cambiar el nombre y reiniciar para que nuestras IPs no se afecten. En caso de haber algún cambio de IP se tiene que revisar y actualizar nuevamente el archivo "hosts".

Continuamos y para ambas máquinas virtuales hacer los siguientes pasos:

Ahora vamos a crear un usuario "mpirun" con el que estaremos trabajando la parte de cómputo paralelo:
adduser mpiuser

Nos pregunta la clave y le ponemos su mismo login (se puede poner cualquier clave que uno quiera):
mpiuser

Para confirmuar nos vuelve a preguntar la clave y le ponemos nuevamente su mismo login:
mpiuser

Nos pregunta algunos otros datos (nombre, número, etc), a todos dar:
ENTER

Nos pregunta si es correcta la información y le escribimos:
S

Le damos ENTER y se termina la creación de la nueva cuenta de usuario (mpiuser) y nos regresa a la consola nuevamente.



La comunicación entre computadoras será por medio de SSH, por lo cual, lo primero que tenemos que hacer es activar el servicio, y por consola entramos a la configuración del Raspberry Pi:
$ raspi-config

Aparece varias opciones y escogemos la opción 5 por medio de las flechas del teclado:
5 SSH

Nos pregunta si queremos habilitar el servicio y seleccionamos:
Si

Aparece un mensaje en pantalla indicando que ya está listo el SSH:
The SSH server is enabled

Seleccionamos:
Aceptar

Nos regresa a la pantalla anterior y seleccionamos:
Finish

Nos regresa nuevamente a la consola y verificamos si está en funcionamiento el SSH:
$ service ssh status

Y debe aparecer en pantalla:
Active: active(running)

Ahora nos cambiamos al nuevo usuario "mpiuser":
su mpiuser

Verificamos que funcione el mpi y el nombre de nuestra computadora y escribimos en la consola:
mpirun hostname

En el Raspberry Pi sale (si estamos en el "Maestro"):
raspberrypi1

Probamos el ssh con los nombres de usuario creados:

Desde el Nodo Maestro al Esclavo (Raspberry Pi):
$ ssh mpiuser@192.168.1.74

La primera vez que nos conectamos nos pregunta si queremos guardar la llave RSA y le decimos que:
yes

Nos debe preguntar el password del usuario "mpiuser":
Pasword: ?

Le tecleamos el password que le asignamos ("mpiuser") y debemos de entrar a la computadora remota. Para salir escribimos:
$ exit

Y con eso se termina la conexión remota. Este paso hay que repetirlo pero ahora en modo inverso, es decir, hay que hacer un SSH del "Esclavo" al "Maestro" para probar la conexión.



Ahora vamos a generar la llave de comunicación RSA (seguimos como usuario "mpiuser"), para ello ejecutamos el siguiente comando:
$ssh-keygen -t rsa

Nos pregunta el nombre del archivo donde se guarda la llave, le damos:
ENTER

Nos pregunta por una frase para generar la llave, nuevamente le damos:
ENTER

Para confirmar nos pregunta nuevamente la frase y nuevamente le damos:
ENTER

Nos genera e imprime en pantalla el "id", la llave "Pública" y termina la generación de llaves.

Ahora vamos a copiar las llaves a la otra computadora:
ssh-copy-id 192.168.1.74

Y trata de conectarse vía SSH con la computadora "Esclavo" y nos pregunta el password del usuario "mpiuser":
mpiuser password: ?

Le tecleamos el password y entonces puede hacer la copia de la llave a la otra computadora. Nos deja en la terminal remota y nos salimos con:
exit

Para probar si funciona podemos cambiarnos nuevamente a usuario "mpiuser":
su mpiuser

Y ahora intentar conectarnos con la computadora "Esclavo"
ssh mpiuser@192.168.1.74x

Debe de entrar, funcionar y ya no preguntarnos el password, lo cual indica que esta todo correcto.

Este paso hay que repetirlo pero ahora en modo inverso, es decir, hay que crear las llaves en el "Esclavo" y copiarlas al "Maestro".



Por último, para probar que todo funciona ejecutaremos en consola la siguiente instrucción:
$ mpiexec -n 2 --hosts 192.168.1.73,192.168.1.74 hostname

Donde le especificamos que utilizaremos 2 nodos (-n 2), luego se ponen las direcciones de nuestros 2 nodos ("Maestro" y "Esclavo") y después que impriman su nombre (hostname) y debe de salir lo siguiente:




Para probar un programa en Python con MPI haremos los siguientes pasos en la consola en el "Maestro":

Nos cambiamos al usuario "mpiuser":
$ su mpiuser

Nos pregunta el password:
contraseña: ?

Tecleamos la contraseña, y damos:
ENTER

Abrimos el editor de textos (nano) para crear el hola mundo:
nano hola_mundo.py

Tecleamos en el editor el código fuente del programa:

from mpi4py import MPI
size = MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()
name = MPI.Get_processor_name()
print("\nHola Mundo con MPI")
print("El tamaño del Cluster es: " + str(size))
print("Mi rango es: " + str(rank))
print("Mi nombre es: " + str(name))

Oprimimos CTRL + X para guardar el archivo y regresar a la consola.

Los pasos anteriores deben hacerser de igual manera en la computadora "Esclavo".

Para ejecutar ahora el programa anterior, escribiremos las siguientes instrucciones en el "Maestro":
$ mpiexec -n 2 --hosts 192.168.1.73,192.168.1.74 pyhton hola_mundo.py

Donde le especificamos que utilizaremos 2 nodos (-n 2), luego se ponen las direcciones de nuestros 2 nodos ("Maestro" y "Esclavo") y después que ejecute Python el programa "hola_mundo.py" y debe de salir lo siguiente:



Aunque en el nodo "Esclavo" no aparece nada, el nodo "Maestro" si lo mandó llamar para que ejecutara el código, es decir, que el programa se ejecutó en ambos nodos, por eso cada nodo manda el tamaño del cluster, su rango dentro del Cluster y el nombre de la computadora.


Nota: El programa a ejecutar deberá ser "IDÉNTICO" tanto en "Maestro" como en "Esclavo", el código fuente debe ubicarse en el "MISMO" directorio y ejecutarse con el "MISMO" usuario para que funcione correctamente.

Usted se encuentra Aquí > Principal > Biblioteca > Manuales de Instalación > Instalación de un cluster con máquinas Linux virtualizadas
Portal de Tecnología desarrollado por: Rogelio Ferreira Escutia
Valid CSS Valid XHTML 5