INFORME FINAL DEL PROTOTIPO: “Cluster Beowulf de 16 Nodos” Dr. Isidro Robledo Vega División de Estudios de Posgrado e Investigación Instituto Tecnológico de Chihuahua Febrero de 2009 1.- Introducción Dentro de los proyectos ejecutados previamente por el grupo de Automática e Informática Industrial se han desarrollado sistemas de inspección y control basados en visión de máquina para los cuales se ha seleccionado el tipo de hardware y sus interfases para interactuar con el sistema de gestión del taller ArquiTAM [1], generalmente los diseños del software se han planteado sobre una plataforma de programación Windows. Preocupados por los cambios en la orientación de los sistemas operativos de Microsoft hacia un ambiente de casa o negocio, hemos decidido migrar el desarrollo de nuestros sistemas a plataformas open source, que no sean dependientes del sistema Windows. En la actualidad existe un interés particular en el uso de herramientas open source para este tipo de aplicaciones, con muchas compañías, universidades y laboratorios deseando construir sistemas sofisticados sin tener la necesidad de comprar costosos sistemas operativos en tiempo real [2]. Nos dimos a la tarea de buscar la plataforma hardware más apropiada para realizar la conversión de nuestros sistemas de software sobre plataformas open source. Debido a que el proyecto involucra otros aspectos de procesamiento que tienen que ver con cómputo distribuido decidimos construir un sistema de multiprocesamiento que permitiera cubrir las necesidades de las diferentes tareas involucradas. Tomado en cuenta diferentes opciones por costo y disponibilidad decidimos construir un clúster de computadoras. Beowulf es un tipo de clúster de computadoras para realizar “Cómputo de Alto Desempeño”. La característica principal de un clúster Beowulf es que utiliza componentes de bajo costo, los nodos son PCs de escritorio que se interconectan por medio de una red Ethernet y corren con Sistema Operativo Linux de libre distribución. Es una alternativa accesible que permite el desarrollo de cómputo científico [3]. 2.- Construcción física del Clúster (Hardware) Se decidió construir un clúster Beowulf de 16 nodos con el sistema operativo Linux, específicamente la distribución Fedora de 64 bits, para lo cual se adquirieron los siguientes componentes: 16 Tarjetas madre Foxconn 45CMX 16 Procesadores Pentium Core 2 Duo E6320 16 dimms de 1 GB de Memoria DDR 16 Discos duro SATA de 80 GB 16 Tarjetas de red Gigaethernet 16 gabinetes Alaska con fuente de 300 watts 1 Unidad de DVD Re-escribible 3 switches Gigaethernet de 8 puertos 3 Unidades de respaldo de energía Se hizo el ensamble de cada uno de los 16 nodos que componen el clúster con los componentes listados. Se realizó la conexión en red de los equipos y se designo un nodo maestro al que se le instaló una unidad de DVD re-escribible. La Figura 1 muestra los gabinetes que contienen los 16 nodos del clúster construido. Figura 1.- Clúster Beowulf del Laboratorio de Sistemas Inteligentes y Visión por Computadora. 3.- Instalación del Sistema Operativo del Clúster El sistema operativo Linux tiene las siguientes características que lo hacen el más popular: es monolítico, realiza procesamiento multitarea, maneja memoria virtual, maneja memoria paginada, cumple con la especificación POSIX, se tiene libre acceso al código fuente, soporta el ambiente de programación GNU completo incluyendo gcc, g++, g77, gdb, gprof, emacs, y otros [4]. Existen diferentes distribuciones del sistema operativo Linux que son adecuadas para los clústers Beowulf, las más populares son: Red Hat (www.redhat.com) o Enterprise Linux o Fedora (gratuito) Novell SuSE (www.novell.com) o SuSE Linux Enterprise o OpenSuSE (gratuito) Debian (www.debian.org) Gentoo (www.gentoo.org) Canonical LTD - Ubuntu (www.ubuntu.com) Turbolinux (www.turbolinux.com) Mandriva (www.mandriva.com) Slackware (www.slackware.com) Se pueden obtener los medios de instalación desde el sitio web de la distribución Linux seleccionada. Se seleccionó Fedora de 64 bits para instalarlo en los nodos del clúster ya que es una de las distribuciones que cuenta con mayor soporte de la comunidad de desarrollo de Linux. Se descargó el software directamente del sitio web de Red Hat y se instaló directamente al nodo maestro desde la unidad de DVD. Los servicios básicos instalados fueron: Servicios de Red TCP/IP y admnistradores de red; Fuentes del kernel; Compiladores y librerías de Lenguaje C, C++ y Fortran; editor de textos Emacs; Sistema X Windows con librerías de desarrollo; xntp para sincronización de tiempo; autofs para compartir sistemas de archivos automáticamente; NFS server (knfsd, knfsd-clients); ssh y rsync. 4.- Configuración del Nodo Maestro Una vez instalado el nodo maestro se crea un directorio compartido en red con la distribución de Linux a instalar en los nodos. Para hacer el directorio disponible por medio de la red se agregó la siguiente línea al archivo /etc/exports /Fedora 10.6.200.0/255.255.255.0(rw,no_root_squash) Se usa el comando exportfs –a para poner disponible el directorio. Para instalar la distribución de Linux en los nodos esclavos, se preparó una memoria USB con los archivos necesarios para arrancar Linux y conectarlo al directorio NFS del nodo maestro donde se encuentran los medios de instalación. Se modificó el archivo /etc/hosts agregando los nombres de los nodos del cluster 10.6.200.1 10.6.200.2 10.6.200.3 10.6.200.4 10.6.200.5 10.6.200.6 10.6.200.7 10.6.200.8 10.6.200.9 10.6.200.10 10.6.200.11 10.6.200.12 lsivcc01.itchihuahua.edu.mx lsivcc02.itchihuahua.edu.mx lsivcc03.itchihuahua.edu.mx lsivcc04.itchihuahua.edu.mx lsivcc05.itchihuahua.edu.mx lsivcc06.itchihuahua.edu.mx lsivcc07.itchihuahua.edu.mx lsivcc08.itchihuahua.edu.mx lsivcc09.itchihuahua.edu.mx lsivcc10.itchihuahua.edu.mx lsivcc11.itchihuahua.edu.mx lsivcc12.itchihuahua.edu.mx lsivcc01 lsivcc02 lsivcc03 lsivcc04 lsivcc05 lsivcc06 lsivcc07 lsivcc08 lsivcc09 lsivcc10 lsivcc11 lsivcc12 10.6.200.13 10.6.200.14 10.6.200.15 10.6.200.16 lsivcc13.itchihuahua.edu.mx lsivcc14.itchihuahua.edu.mx lsivcc15.itchihuahua.edu.mx lsivcc16.itchihuahua.edu.mx lsivcc13 lsivcc14 lsivcc15 lsivcc16 Se modificaron los archivos /etc/hosts.equiv y /etc/shosts.equiv agregando los nombres de todos los nodos del clúster con el fin de permitir sesiones con ssh y rsync lsivcc01 lsivcc02 lsivcc03 lsivcc04 lsivcc05 lsivcc06 lsivcc07 lsivcc08 lsivcc09 lsivcc10 lsivcc11 lsivcc12 lsivcc13 lsivcc14 lsivcc15 lsivcc16 Para configurar la sincronización de tiempo, se debe activar la sincronización con un servidor de tiempo externo (para mayor información ver http://tf.nist.gov/service/its.htm). Se modificó el archivo /etc/ntp.conf para permitir que el nodo maestro distribuya el tiempo en los nodos esclavos agregando las siguientes líneas: server time.cacr.caltech.edu broadcast 10.6.200.255 Para compartir la partición /scratch en la red se modificó el archivo /etc/exports agregando la línea: /scratch 10.6.200.0/255.255.255.0(rw,no_root_squash) Se configuró el servicio autofs de la siguiente manera: se agregó la siguiente línea al archivo /etc/auto.master /data /etc/auto.beowulf --timeout 600 Se creó el archivo /etc/auto.beowulf con las líneas: lsivcc01 lsivcc02 lsivcc03 lsivcc04 lsivcc05 lsivcc06 lsivcc07 lsivcc08 lsivcc09 lsivcc10 lsivcc11 lsivcc12 lsivcc13 lsivcc14 lsivcc15 lsivcc16 -fstype=nfs -fstype=nfs -fstype=nfs -fstype=nfs -fstype=nfs -fstype=nfs -fstype=nfs -fstype=nfs -fstype=nfs -fstype=nfs -fstype=nfs -fstype=nfs -fstype=nfs -fstype=nfs -fstype=nfs -fstype=nfs lsivcc01:/scratch lsivcc02:/scratch lsivcc03:/scratch lsivcc04:/scratch lsivcc05:/scratch lsivcc06:/scratch lsivcc07:/scratch lsivcc08:/scratch lsivcc09:/scratch lsivcc10:/scratch lsivcc11:/scratch lsivcc12:/scratch lsivcc13:/scratch lsivcc14:/scratch lsivcc15:/scratch lsivcc16:/scratch Se creó el directorio /home/local y se movió todo el contenido del directorio /usr/local a este directorio. Se creó un enlace simbólico desde /usr/local hasta /home/local corriendo el siguiente comando >ln -s /home/local /usr/local Las librerías de software para cómputo paralelo como MPICH y PVM se instalan en /usr/local y quedarán disponibles en /home/local para todos los nodos. De esta forma solo se tiene que actualizar el software en el nodo maestro. 5.- Configuración de los Nodos Esclavos Se instaló el sistema operativo Linux desde la ubicación compartida en el nodo maestro, esto se llevo a cabo gracias a que se preparó una memoria USB con los archivos necesarios para el arranque de los nodos y la conexión por medio de la red hacia el directorio compartido con el sistema de instalación en el nodo maestro. Una vez instalado el sistema operativo se procedió a compartir la partición /scratch del nodo en la red modificando el archivo /etc/exports agregando la línea /scratch 10.6.200.0/255.255.255.0(rw,no_root_squash) Se copiaron los siguientes archivos desde el nodo maestro usando el comando rsync. /etc/hosts /etc/hosts.equiv /etc/shosts.equiv /etc/auto.master /etc/auto.beowulf Se agregó la siguiente línea al archivo /etc/auto.beowulf home -fstype=nfs lsivcc01:/home Se ejecutaron los siguientes comandos con el fin de que el directorio /home del nodo esclavo sea un enlace simbólico al directorio /home del nodos maestro >rm −fr /home >ln −s /data/home /home Se activó la sincronización del tiempo con el nodo principal. Los usuarios del clúster deben tener cuenta en todos los nodos. Para agregar un usuario nuevo se crea la cuenta en el nodo maestro utilizando el software para administración de cuentas de usuario de la distribución Linux. Para duplicar la cuenta en los nodos esclavo se debe sincronizar los archivos /etc/passwd y /etc/shadow del nodo maestro a los demás nodos usando el siguiente comando >rsync /etc/passwd lsivcc02:/etc >rsync /etc/shadow lsivcc02:/etc La sincronización se debe de hacer como usuario root desde el nodo maestro y repetirlo para todos los nodos del clúster. También requiere que los nodos no soliciten contraseña al inicio de la sesión SSH. Para lograr esto, cada usuario debe ejecutar los siguientes comandos desde su sesión en el nodo maestro >ssh-keygen –t rsa (return return return) >cd ~/.ssh >cp id_rsa.pub authorized_keys >cd .. >chmod go-w .ssh .ssh/authorized_keys Los pasos descritos anteriormente se llevaron a cabo en uno de los nodos esclavos (lsivcc02) se revisaron y cuando el nodo quedo completamente funcional se diseñó un programa contenido en script de un archivo por lotes (configuarcion_nodo_eclavo.sh) que desarrolla la configuración completa del nodo corriéndolo desde la misma memoria USB que se utilizó para la instalación del sistema operativo. 6.- Librerías MPICH MPICH es una implementación portable del estándar MPI (Message Passing Interface), este es un estándar para librerías de paso de mensajes para aplicaciones de memoria distribuida usado en el cómputo en paralelo [5]. MPICH es una librería de software libre con diferentes implementaciones para diferentes plataformas. En el prototipo de Cluster Beowulf de 16 nodos desarrollado se instaló MPICH2. El conjunto de librerías de MPICH2 ya se incluye en el DVD de la distribución de Fedora 12, por lo que se realizó la instalación directa en todos los nodos. Se probó la disponibilidad de los comandos principales en todos los nodos corriendo las siguientes instrucciones: >which mpd >which mpicc >which mpiexec Una vez seguros de MPICH2 está corriendo en que todos los nodos se procede a hacer pruebas con MPD (Message Passing Deamon) que es un demonio administrador de procesos para poder iniciar de manera escalada trabajos con MPI bastante grandes. MPD inicia un anillo de demonios en los nodos que permite correr programas MPI utilizando la librería MPICH2. Por seguridad para correr y probar un anillo de demonios es necesario crear un archivo en el directorio home llamado .mpd.conf que contenga la línea: secretword=<secreto> donde <secreto> es una cadena de caracteres conocida solo por el dueño del directorio. Se genera este archivo para lectura y escritura solo para el dueño con: >cd $HOME >touch .mpd.conf >chmod 600 .mpd.conf Se utiliza el editor emacs para agregar la línea anterior. Se prueba creando un anillo con un solo nodo en la máquina local y corriendo un comando de MPD y después se cierra el anillo con las siguientes instrucciones: >mpd & >mpdtrace >mpdallexit La salida del comando mdptrace deberá ser el nombre de la máquina donde se está corriendo. Para correr los demonios en todos los nodos es necesario crear un archivo con la lista de los nombres de todos los nodos, uno por línea. El nombre del archivo deberá ser mpd.hosts. Los nombres de los nodos serán utilizados con ssh para correr MPD en cada uno de ellos, así es que se debe asegurar que se pueda entrar a cada uno de los nodos en la lista utilizando ssh sin tener que teclear una contraseña. Lo cual se hizo previamente y se detalló al final de la sección anterior. Para iniciar los demonios en los nodos listados en mpd.hosts se corre el comando: >mpdboot –n <no. de nodos> -f mpd.hosts El número de nodos puede ser entre 1 y el número de nodos listados en mpd.hosts. Para saber cuáles nodos están corriendo un demonio se utiliza el comando mpdtrace. Se puede probar cuanto tiempo lleva a un mensaje viajar por todo el anillo con el comando mpdringtest y correr programas multiprocesos con el comando mpiexec. El comando mdpallexit cierra todos los demonios. Una vez probados todos estos comandos se podrán correr procesos en paralelo utilizando todos los nodos del Cluster Beowulf desarrollado. 7.- Conclusiones Se diseñó y ensambló físicamente el prototipo de un Clúster Beowulf con 16 nodos, se instaló en cada uno de sus nodos el sistema operativo Linux en su distribución Fedora 12 de 64 bits. Se instalaron y configuraron todos los paquetes necesarios para que los nodos interactúen en una red de cómputo Giga-Ethernet y puedan compartir sus algunos de sus directorios que le dan a esta red la característica de un Clúster Beowulf, en el cual se instaló y probó la librería MPICH2 que permite correr programas en forma paralela en los nodos del clúster. El prototipo del Cluster Beowulf de 16 nodos es 100% funcional y está ubicado en el Laboratorio de Sistemas Inteligentes y Visión por Computadora de la División de estudios de Posgrado del Instituto Tecnológico de Chihuahua. Actualmente de está usando para el desarrollo de aplicaciones y prueba de plataformas open source para procesamiento de imágenes y visión por computadora como parte del proyecto DGEST “Modelado y Control de un Sistema Automático de Fabricación” clave UR.CHI107. Se pretende ir adicionando más nodos al clúster y seguir desarrollando software para procesamiento en paralelo que permita el desarrollo eficiente de los proyectos del grupo de Automática e Informática Industrial. 6.- Referencias [1] Acosta, J., F. Sastrón, Schematic Architecture: Reference Architecture / Frameworks / Particular nd Models for the Shop Floor Environment, 32 Annual Conf. of the IEEE Industrial Electronics Society, París France, November 2006. nd [2] Gropp, W., Lusk, E., Sterling, T., Beowulf Cluster Computing with Linux, 2 . Edition, MIT Press, 2003. [3] Sterling, T., Salmon, J., Becker, D., Savarese, D.F., How to Build a Beowulf, A Guide to the Implementation and Application of PC Clusters, MIT Press, 1998. [4] Vrenios, A., Linux Cluster Architecture, Sams Publishing, 2002. [5] Pacheco, P.S., Parallel Programing with MPI, Morgan Kaufmann Publishers, 1997.