Diferencias entre las revisiones 38 y 61 (abarca 23 versiones)
Versión 38 con fecha 2017-05-15 22:17:13
Tamaño: 29195
Editor: FabioDuran
Comentario:
Versión 61 con fecha 2017-05-17 17:16:33
Tamaño: 46147
Editor: FabioDuran
Comentario:
Los textos eliminados se marcan así. Los textos añadidos se marcan así.
Línea 236: Línea 236:
La configuración en cada nodo debe ser la siguiente: La política de configuración en cada nodo debe ser la siguiente:
Línea 493: Línea 493:
 * Sobre el espacio de la partición raíz, está motivado en la necesidad de solo albergar el sistema operativo, y esto es porque las aplicaciones necesarias y/o requeridas para ejecución deben estar en un directorio compartido y visto por cada uno de los nodos. Para este y el modo de un clúster tipo Beowulf, cada nodo ejecuta la aplicación vía red bajo mismas condiciones.  * Sobre el espacio de la partición raíz (/), está motivado en la necesidad de solo albergar el sistema operativo y esto es porque las aplicaciones necesarias y/o requeridas para ejecución deben estar en un directorio compartido y visto por cada uno de los nodos. Esta es la forma de como es el modo de un clúster tipo Beowulf, en donde cada nodo ejecuta la aplicación vía red bajo mismas condiciones.
Línea 497: Línea 497:
  * Share, es un directorio global que lo hemos definido como referencia para ser montado y compartido con los demás nodos. Dentro de él podemos definir un numero indeterminados de directorios que serán útiles y visible para cada uno de los esclavos (véase en apartado de directorio compartido).   * Share, es un directorio global que fue definido como referencia para ser montado y compartido con los demás nodos. Dentro de él podemos definir un numero indeterminados de directorios que serán útiles y visible para cada uno de los esclavos (véase en apartado de directorio compartido).
Línea 520: Línea 520:
 * Memoria de Intercambio (swap) 8GB (1/2 Giga Ram física)  * Memoria de Intercambio (swap) 8GB (1 Giga Ram física)
Línea 525: Línea 525:
 * Sobre el espacio de la partición raíz (/), está motivado en la necesidad de solo albergar el sistema operativo y esto es porque las aplicaciones necesarias y/o requeridas para ejecución deben estar en un directorio compartido proporcionado por el nodo máster.
 * Memoria de intercambio esta basada en que es el equipo de procesamiento, y por lo que un cálculo computacional puede requerir más memoria física de la existente.
Línea 526: Línea 529:
== Sandbox ==
=== Variables de Entorno ===
Los directorio a compartir son los directorios:

 * /home que albergará los directorios, archivos y configuraciones personales de cada usuario,
 * /share deberá poseer directorios útiles.
  * /share/apps en donde almacenamos todos las aplicaciones necesarias y/o solicitadas en el clúster.

Toda la configuración utilizada está basada en [[https://es.wikipedia.org/wiki/Network_File_System|NFS]].

El sistema NFS permite a un servidor exportar un sistema de archivo para que pueda ser utilizado de forma interactiva desde un cliente. El servicio se compone básicamente de un servidor (básicamente representado por nfsd* y un cliente (representado por rpc.mountd) que permiten compartir un sistema de archivo (o parte de él) a través de la red.

=== Nodo Máster ===
Para compartir un directorio se debe editar el fichero /etc/exports, el que controla cuáles sistemas de archivos son exportados a las máquinas remotas y especifica opciones. Importante es conocer que cada sistema de archivos exportado debe tener su propia línea y cualquier lista de hosts autorizadas colocada después de un sistema de archivos exportado, debe estar separada por un espacio. Las opciones para cada uno de los hosts deben ser colocadas entre paréntesis directamente detrás del identificador del host, sin ningún espacio de separación entre el host y el primer paréntesis.

La política de configuración propuesta en los clúster para /etc/exports en nodo máster es:

{{{
/export 192.168.10.1(rw,async,no_root_squash) 192.168.10.0/255.255.255.0(rw,async)
}}}
'''Referencia:'''

http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-es-4/s1-nfs-server-export.html

=== Nodo Esclavos ===
Las comparticiones NFS son montadas en el lado del cliente usando el comando mount. El formato del comando es como sigue:

{{{{
{{{
mount -t <nfs-type> -o <options> <host>:</remote/export> </local/directory>
}}}}
}}}

En cada nodo esclavo se utilizará la herramienta de automount, cuya característica es montar y desmontar sistemas de archivos NFS automáticamente, ahorrando recursos.

El servicio autofs es utilizado para controlar el comando automount a través del archivo de configuración primario /etc/auto.master. Mientras que automount puede ser especificado en la línea de comandos, es más conveniente especificar los puntos de montaje, nombres de hosts, directorios exportados y opciones en un conjunto de archivos que teclearlo todo a mano.

El archivo de auto.master establecido para cada nodo esclavo y localizado en el directorio de /etc/ es:

{{{
/share /etc/auto.share --timeout=1200
/home /etc/auto.home --timeout=1200
}}}
Se debe configurar el archivo auto.master en cado de los nodos esclavos y para nuestro caso que apunte un archivo auto.home conteniendo los detalles sobre cómo montar el directorio /home/ vía NFS. Esto permite al usuario acceder a sus datos personales y archivos de configuración en su directorio /home/ conectándose desde cualquier sitio de la red interna.

Ejemplo de /etc/auto.home definido en clustertalca2

{{{
user -nfsvers=3 clustertalca2.local:/export/home/user
}}}
Así también se deben configurar los directorios definidos como lo es /etc/auto.share:

{{{
apps clustertalca2.local:/export/&
}}}
'''Referencia:'''

http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-es-4/s1-nfs-client-config.html

== Instalación de Aplicaciones ==
Todas las implementaciones de aplicaciones deberán estas visadas por la dirección de escuela, por lo que la solicitud debe ser propuesta vía correo electrónico para analizar factibilidad técnica (formas de compilación, compatibilidad de librerías, soporte a sistema operativo, soporte a paralelización y/o distribución, openMPI, disponibilidad de Infiniband, capacidad de cómputo, compatibilidad con PBS, benchmark, etc.).

Las aplicaciones deben ser compiladas a fin de adecuarse de mejor modo a la infraestructura del clúster, y de no ser así buscar el binario específico para el equipo y sus componentes (clúster beowulf, openMPI, Infiniband, etc).

No deben instalarse aplicaciones de repositorio, puesto a que son genéricas y la posible perdida de performance es latente.

En la actualidad los clúster poseen aplicaciones destinadas a la simulación molecular (NAMD, Desmond Schrodinger, Lammps). Puede visualizar en los siguiente links:

http://srvbioinf1.utalca.cl/wiki/cluster/clustertalca#Software

http://srvbioinf1.utalca.cl/wiki/cluster/clustertalca2#Software

Las aplicaciones requeridas estarán todas localizadas en el directorio /share/apps y debe garantizar el acceso de todos los nodos (/etc/auto.share).

El árbol directorio a conformar será el siguiente: /share/apps/<apps>/<versionx>, esto a fin de poder identificar la aplicación misma y las versiones de implementadas.

Para el caso de que la aplicación requiera de una actualización para una misma version, se debe crear un nuevo directorio de la siguiente manera /share/apps/<apps>/<versionx-update> y pasar a producción solo cuando el software a sido testeado.

=== Sandbox de aplicaciones ===
Nuestra política no es restringir a los usuarios a utilizar o experimentar herramientas dentro del cluster, por lo que tienen la posibilidad de poder compilar e instalar dentro del espacio asociado a su cuenta la aplicación deseada. La limitación corre por el uso del espacio en disco, vea [[http://srvbioinf1.utalca.cl/wiki/cluster/politicas#Asignaci.2BAPM-n_de_espacio_en_disco|aquí]].

== Variables de Entorno ==
Las [[https://es.wikipedia.org/wiki/Variable_de_entorno|variables de entorno]] forman un conjunto de [[javascript:void(0)|valores]] dinámicos que normalmente afectan al comportamiento de los [[javascript:void(0)|procesos]] en una [[https://es.wikipedia.org/wiki/Computadora|computadora]].

Algunas de las variables más utilizadas:

 * '''PATH''', que mantiene la [[javascript:void(0)|ruta]] de búsqueda de programas en el sistema
 * '''LD_LIBRARY_PATH''', que mantiene la ruta de búsqueda de librerías en el sistema
 * '''INCLUDE''', que mantiene la ruta de búsqueda de cabeceras necesarias por algún software en particular en el sistema

La mejor forma que se ha decidido para agregar o editar las variables de entorno que afecten a todos los usuarios es agregar un fichero (nueva-variable-entorno.sh) a /etc/profile.d/ en donde se cargarán de forma automática ante un nuevo inicio de sesión.

Un ejemplo puede ser para nuestra implementación de gcc 6.3.0:

{{{
$cat /etc/profile.d/gcc.sh

export PATH=/share/apps/gcc/6.3.0/bin:$PATH
export LD_LIBRARY_PATH=/share/apps/gcc/6.3.0/lib64:$LD_LIBRARY_PATH
export INCLUDE=/share/apps/gcc/6.3.0/include/c++/6.3.0/:$INCLUDE
}}}
La prioridad de acceso es primer directorio que lee es primero donde busca el paquete o librería.

El usuario puede tener la habilidad de poder modificar las variables de entorno, solo de enunciarlas vía terminal (export) o instanciarlas desde un archivo bash.
Línea 530: Línea 634:
referencias:

(1) - https://software.intel.com/en-us/blogs/2012/09/26/gcc-x86-performance-hints

(2) - http://developer.amd.com/wordpress/media/2012/10/CompilerOptQuickRef-62004200.pdf
El '''GNU Compiler Collection''' ('''colección de compiladores GNU''') es un [[https://es.wikipedia.org/wiki/Conjunto|conjunto]] de [[https://es.wikipedia.org/wiki/Compilador|compiladores]] creados por el proyecto [[https://es.wikipedia.org/wiki/GNU|GNU]]. GCC es [[https://es.wikipedia.org/wiki/Software_libre|software libre]] y lo distribuye la Free Software Foundation ([[https://es.wikipedia.org/wiki/FSF|FSF]]) bajo la licencia general pública [[https://es.wikipedia.org/wiki/Licencia_pública_general_de_GNU|GPL]].

La url del proyecto es: https://gcc.gnu.org/

La última implementación de GCC realizada ha sido en nuestros clúster ha sido la versión 6.3 ([[http://mirrors.concertpass.com/gcc/releases/gcc-6.3.0/gcc-6.3.0.tar.bz2|gcc-6.3.0.tar.bz2]]). La forma de compilar GCC en nuestras máquinas es la siguiente:

Estableciendo dependencias:

 * [[http://www.gnu.org/software/gawk/|Gawk]] - (4.1.4)
 * [[http://www.gnu.org/software/m4/|M4]] - (1.4.18)
 * [[http://www.gnu.org/software/libtool/|Libtool]] - (2.4.6)
 * [[http://www.gnu.org/software/make/|Make]] - (4.2.1)
 * [[http://www.gnu.org/software/bison/|Bison]] - (3.0.4)
 * [[http://flex.sourceforge.net/|Flex]] - (2.6.4)
 * [[http://www.gnu.org/software/automake/|Automake]] - (1.15)
 * [[http://www.gnu.org/software/autoconf/|Autoconf]] - (2.69)
 * [[http://www.gnu.org/software/gettext/|Gettext]] - (0.19.8.1)
 * [[http://www.gnu.org/software/gperf/|Gperf]] - (3.1)
 * [[http://www.gnu.org/software/texinfo/|Texinfo]] - (6.3)

Librerías de Desarrollo

 * [[http://manualinux.eu/gccdep.html#GMP|Gmp]] - (6.1.2)
 * [[http://manualinux.eu/gccdep.html#MPFR|Mpfr]] - (3.1.5)
 * [[http://manualinux.eu/gccdep.html#MPC|Mpc]] - (1.0.3)
 * [[http://manualinux.eu/gccdep.html#ISL|ISL]] - (0.16.1)

{{{
$ tar jxvf gcc-6.3.0.tar.bz2
$ mkdir /share/apps/gcc/6.3/
$ cd gcc-6.3.0
$ ./configure --enable-shared --enable-threads=posix --enable-__cxa_atexit \
--enable-clocale=gnu --enable-languages=fortran,objc \
--prefix=/share/apps/gcc/6.3/
}}}
La explicación del comando:

 * '''--enable-shared ''': Compila las librerías compartidas.
 * '''--enable-threads=posix ''': Selecciona la librería genérica POSIX/Unix98 para el soporte de hilos.
 * '''--enable-cxa_atexit''' : Opción necesaria para una correcta compilación de c++.
 * '''--enable-clocale=gnu''' : Evita un error en la generación de las locales, en el caso de que estén incompletas.
 * '''--enable-languages=fortran,objc''' : Compila los lenguajes de programación Fortran, y Objetive C, además de los predefinidos, C y C++.
 * '''--prefix=/share/apps/gcc/6.3/''' : Instala el compilador en /share/apps/gcc/6.3

Se puede y debe compilar con un modo de optimización al procesador dependiendo del clúster

 * '''-march=native''', para clústertalca(procesador Xeón)
 * '''-march=bdver1''', para clústertalca2 (procesador AMD)

{{{
make -j8
}}}
'''-j8 ''': Si tenemos un procesador de ocho núcleos (octa-core) y el kernel está optimizado para el mismo, con este parámetro aumentaremos el número de procesos de compilación simultáneos a ocho obteniendo un tiempo de compilación del programa de forma considerable.

'''referencias: '''

(1) - __https://software.intel.com/en-us/blogs/2012/09/26/gcc-x86-performance-hints __

(2) - __http://developer.amd.com/wordpress/media/2012/10/CompilerOptQuickRef-62004200.pdf __
Línea 537: Línea 695:
OpenMPI es una implementación de la interfaz de paso de mensajes [[http://lsi.ugr.es/jmantas/pdp/ayuda/mpi_ayuda.php|MPI]]. OpenMPI se caracteriza por su alta eficiencia y prestaciones para la ejecución en entornos distribuidos (clústers de ordenadores).

La implementación de rocks contempla una instancia de OpenMPI por defecto que incluye al nodo máster como esclavos.

Las versiones instaladas son:

 * OpenMPI 1.4.2 (clustertalca)
 * OpenMPI 1.6.2 (clustertalca2)

Pero por requerimientos de nuevos softwares se hace necesario tener disponibles otras versiones.

Las versiones de OpenMPI se pueden implementar sin problema, siempre y cuando sea en modo "Sandbox" y localizada en /share/apps/openmpi/<version> esto porque para la vinculación con el mismo debe ser invocado de modo explicito.

Para instalar se debe, descargar la versión de OpenMPI deseada desde la url https://www.open-mpi.org/software/.

Posterior ejecutar los siguientes pasos:

{{{
tar -xvf openmpi-<version>

cd openmpi-<version>

./configure --prefix=/share/apps/openmpi/<version>

make -j8 all

su -c 'make install'
}}}
Para ejecutar OpenMPI el usuario debe editar sus variables de entorno de PATH y LD_LIBRARY_PATH, esto sería

{{{
export PATH=/share/apps/openmpi/<version>/bin:$PATH

export LD_LIBRARY_PATH=/share/apps/openmpi/<version>/lib:$LD_LIBRARY_PATH
}}}
En los nodos esclavos no se toca nada, por el contrario todo cambio en variables de entorno se deben realizar en el archivo bash envíado al gestor de colas para la adopción de estás nuevas rutas en los nodos para la sesión.
Línea 538: Línea 733:
=== Paridad de paquetes ===
== Instalación de Aplicaciones ==
Los clúster solo actualizarán su sistema desde repositorios oficiales de CentOS (Rock Cluster está basado en CentOS) y/o Red Hat, permaneciendo por defecto deshabilitados, habilitandose solo cuando sea invocado el comando de actualización.

Ejemplo de repositorios clustertalca y clustertalca2

{{{
$ cat /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
enabled = 0
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#released updates
[updates]
enabled = 0
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that may be useful
[extras]
enabled = 0
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that extend functionality of existing packages
[centosplus]
enabled = 0
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#contrib - packages by Centos Users
[contrib]
enabled = 0
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
}}}
{{{
$ cat /etc/yum.repos.d/elrepo.repo
### Name: ELRepo.org Community Enterprise Linux Repository for el6
### URL: http://elrepo.org/
[elrepo]
enabled = 0
name=ELRepo.org Community Enterprise Linux Repository - el6
baseurl=http://elrepo.org/linux/elrepo/el6/$basearch/
mirrorlist=http://elrepo.org/mirrors-elrepo.el6
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0
[elrepo-testing]
enabled = 0
name=ELRepo.org Community Enterprise Linux Testing Repository - el6
baseurl=http://elrepo.org/linux/testing/el6/$basearch/
mirrorlist=http://elrepo.org/mirrors-elrepo-testing.el6
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0
[elrepo-kernel]
enabled = 0
name=ELRepo.org Community Enterprise Linux Kernel Repository - el6
baseurl=http://elrepo.org/linux/kernel/el6/$basearch/
mirrorlist=http://elrepo.org/mirrors-elrepo-kernel.el6
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0
[elrepo-extras]
enabled = 0
name=ELRepo.org Community Enterprise Linux Repository - el6
baseurl=http://elrepo.org/linux/extras/el6/$basearch/
mirrorlist=http://elrepo.org/mirrors-elrepo-extras.el6
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0
}}}
Solo se actualizará mediante red el nodo máster, realizando los siguientes comandos:

{{{
yum clean all

yum check-update --enablerepo=base,updates

yum upgrade --enablerepo=base,update
}}}
=== Paridad de paquetes entre los nodos ===
Una de las particularidades de Rocks es poder crear imagenes de instalación a partir de una actualización, por lo que se debe realizar lo siguiente:

{{{
cp /var/cache/yum/updates/packages/* /export/rocks/install/contrib/<version>/<arch>/RPMS/
cd /export/rocks/install
rocks create distro
rocks run host compute "/boot/kickstart/cluster-kickstart"
}}}
Lo anterior realizará:

 * Copia los paquetes descargados en formato rpm al directorio especificado de creación de imagen rocks
 * Se crea la nueva imagen de instalación para nodos esclavos
 * Se ordena a todos los nodos reiniciarse e incluye en flags de reinstalación para grub
 * Se reinstalan los nodos con una versión actualizada del sistema.

'''Referencia''':

http://www.rocksclusters.org/roll-documentation/base/5.5/update.html

Inicio

Políticas, características e implementación aplicadas a los clúster

Refiere a las políticas asignadas para el uso, implementación de herramientas con su configuración básica y elemental para un correcto funcionamiento de los clúster de la escuela de Ingeniería Civil en Bioinformática de la universidad de Talca.

Políticas por defecto aplicadas al equipo máster de los cluster

  • Impedir que se pueda arrancar otro sistema operativo: si alguien tiene acceso físico a la máquina, podría arrancar con otro sistema operativo preconfigurado y modificar el actual, por lo que se debe inhibir desde el BIOS del ordenador el boot por CD-ROM o USB y poner una contraseña de acceso.

  • Configuración y red: es recomendable desconectar la red siempre que se deseen hacer ajustes en el sistema. Se debe deshabilitar el dispositivo con /etc/init.d/networking stop (start para activarla de nuevo) o con ifdown eth0 (ifup eth0 para habilitarla) para un dispositivo en concreto.

  • Modificar los archivos de /etc/security: de acuerdo a las necesidades de utilización y seguridad del sistema. En access.conf hay información sobre quién puede hacer un login al sistema, por ejemplo:

    # Tabla de control de acceso. líneas con clomuna1=# es un comentario.
    # El orden de la líneas es importante
    # Formato: permission : users : origins
    # Deshabilar todo los logins excepto root sobre tty1
    -:ALL EXCEPT root:tty1
    # User “root” permitido conectarse desde estas direcciones
    + : root : 192.168.200.1 192.168.200.4 192.168.200.9
    + : root : 127.0.0.1
    # O desde la red
    + : root : 192.168.201.
    # Impide el acceso excepto user1,2,3 pero el último solo desde consola.
    -:ALL EXCEPT user1 user2 user3:console
    También se debería, por ejemplo, configurar los grupos para controlar cómo y a dónde pueden acceder y también los límites máximos (limits.conf) para establecer los tiempos máximos de utilización de CPU, E/S, etc. y así evitar ataques por denegación de servicio (DoS).
  • Mantener la seguridad de la contraseña de root: utilizar como mínimo 8 caracteres, con uno, por lo menos, en mayúsculas o algún carácter que sea no trivial, como “-”, “.”, “,”, etc.; asimismo, es recomendable activar el envejecimiento para forzar a cambiarlo periódicamente, así como también limitar el número de veces con contraseña incorrecta. También se puede cambiar el parámetro min=x de la entrada en /etc/pam.d/passwd para indicar el número mínimo de caracteres que se utilizarán en la contraseña (x es el número de caracteres). Utilizar algoritmos como SHA512 para la configuración de paswssd.

  • No acceder al sistema como root: si bien muchas distribuciones ya incorporan un mecanismo de este estilo (por ejemplo, Ubuntu), se puede crear una cuenta como sysadm y trabajar con ella. Si se accede remotamente, habrá siempre que utilizar shh para conectarse al sysadm y, en caso de ser necesario, realizar un "su -" para trabajar como root o activar el sudoers para trabajar con el comando sudo (consultad la documentación para las opciones del comando y su edición).

  • Tiempo máximo de inactividad: inicializar la variable TMOUT, por ejemplo a 360 (valor expresado en segundos), que será el tiempo máximo de inactividad que esperará el shell antes de bloquearse; se puede poner en los archivos de configuración del shell (por ejemplo, /etc/profile, .profile, $HOME/.bashrc, etc.). En caso de utilizar entornos gráficos (KDE, Gnome, etc.), se puede activar el salvapantallas con contraseña, al igual que el modo de suspensión o hibernación.

  • Configuración del NFS en forma restrictiva: en el /etc/exports, exportar solo lo necesario, no utilizar comodines (wildcards), permitir solo el acceso de lectura y no permitir el acceso de escritura por root, por ejemplo, con /directorio_exportado host.domain.com (ro, root_squash).

  • Control de la combinación Ctrl-Alt-Delete: Para evitar que se apague la máquina desde el teclado, se debe insertar un comentario (#) en la primera columna de la línea siguiente: ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now del archivo /etc/inittab. Los cambios se activan con la orden telinit q.

  • Evitar peticiones de servicios no ofrecidos: se debe bloquear el archivo /etc/services, para no admitir servicios no contemplados, por medio de chattr +i /etc/services.

  • Conexión del root: hay que modificar el archivo /etc/securetty que contiene las TTY y VC (virtual console) en que se puede conectar el root dejando solo una de cada, por ejemplo, tty1 y vc/1 y, si es necesario, hay que conectarse como sysadm y hacer un su.

  • Eliminar usuarios no utilizados: se deben borrar los usuarios o grupos que no sean necesarios, incluidos los que vienen por defecto (por ejemplo, operator, shutdown, ftp, uucp, games, etc.) y dejar solo los necesarios (root, bin, daemon, sync, nobody, sysadm) y los que se hayan creado con la instalación de paquetes o por comandos (lo mismo con /etc/group). Si el sistema es crítico, podría considerarse el bloqueo (chattr +i file) de los archivos /etc/passwd, /etc/shadow, /etc/group, /etc/gsahdow para evitar su modificación (cuidado con esta acción, porque no permitirá cambiar posteriormente las contraseñas).

  • Montar las particiones en forma restrictiva: utilizar en /etc/fstab atributos para las particiones tales como nosuid (que impide suplantar el usuario o grupo sobre la partición), nodev (que no interpreta dispositivos de caracteres o bloques sobre esta partición) y noexec (que no permite la ejecución de archivos sobre esta partición). Por ejemplo: /tmp /tmp ext2 defaults,nosuid,noexec 0 0. También es aconsejable montar el /boot en una partición separada y con atributos ro.

  • Protecciones varias: se puede cambiar a 700 las protecciones de los archivos de /etc/init.d (servicios del sistema) para que solo el root pueda modificarlos, arrancarlos o pararlos y modificar los archivos /etc/issue y /etc/issue.net para que no den información (sistema operativo, versión, etc.) cuando alguien se conecta por telnet, ssh, etc.

  • SUID y SGID: un usuario podrá ejecutar como propietario un comando si tiene el bit SUID o SGID activado, lo cual se refleja como una ‘s’ SUID (-rwsr-xr-x) y SGID (-r-xr-sr-x). Por lo tanto, es necesario quitar el bit (chmod a-s file) a los comandos que no lo necesitan. Estos archivos pueden buscarse con: find / -type f -prem -4000 o -perm -2000 -print. Se debe proceder con cuidado respecto a los archivos en que se quite el SUID-GUID, porque el comando podría quedar inutilizado.

  • Archivos sospechosos: hay que buscar periódicamente archivos con nombres no usuales, ocultos o sin un uid/gid válido, como “...” (tres puntos), “.. ” (punto punto espacio), “..ˆG” o equivalentes. Para ello, habrá que utilizar: find / -name=”.*” -print | cat -v o sino find / -name ”..” -print. Para buscar uid/gid no válidos, utilizad find / -nouser (o utilizad también -nogroup (cuidado, porque algunas instalaciones se hacen con un usuario que luego no está definido y que el administrador debe cambiar).

  • Conexión sin contraseña: no se debe permitir el archivo .rhosts en ningún usuario, a no ser que sea estrictamente necesario (se recomienda utilizar ssh con clave pública en lugar de métodos basados en .rhosts).

  • X Display manager: para indicar los hosts que se podrán conectar a través de XDM y evitar que cualquier host pueda tener una pantalla de login se puede modificar el archivo /etc/X11/xdm/Xaccess.

Acceso y Uso

Todos los Académicos, Funcionarios y estudiantes pudiesen tener acceso a la utilización de los recursos computacionales disponibles por la escuela de Bioinformática.

Solicitud de acceso

Para poder obtener acceso específicamente a los clúster de cálculos computacionales en HPC, los usuarios debiesen pedir autorización a la dirección de carrera justificando las razones del por qué debiese otorgarse el permiso de uso.

Asignación de CPU

Otorgada la autorización el usuario debiese ser encasillarse (rol) en una de las posibilidades para uso en CPU definidas en el cluster. Está se ha estandarizado del siguiente modo:

Rol

Cantidad de CPU disponible

Máximo de trabajos en paralelos

Prioridad de ejecución

Estudiante de Pregrado

64

1

0

Estudiante de Postgrado

80

1

43200

Postgrado Memorista

96

1

43200

Docentes

128

2

86400

Asignación de espacio en disco

La definición para todos los usuarios es la asignación de 15GB (soft limit), con la posibilidad de sobrepasarme hasta 20GB por un periodo de 7 días (hard limit).

  • Límite débil (soft limit): si la cuenta del usuario o del grupo supera el límite débil, se impondrá un período de gracia en el que el usuario podrá reducir la ocupación.

  • Límite duro (hard limit): se deniega cualquier intento de escribir datos después de este límite.

  • Período de gracia: tras superar el límite débil, si el usuario no resuelve el problema borrando archivos, la cuenta se bloquea.

El control del espacio en disco será llevado por el paquete "quota".

Para establecer la quota de uso de disco para un usuario se realizará con el programa "edquota", que es un editor de cuotas para usuarios o grupos y que se pueden especificar a través de línea de comandos.

La representación de la imposición de una cuota puede verse en el siguiente ejemplo:

$/sbin/edquote usuarioXXXX

Disk quotas for user usuarioXXXX (uid XXX):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/cciss/c0d0p5          32604068       15480000       20480000        401        0        0

En donde:

  • 15480000 representa 15GB
  • 20480000 representa 20GB

Se puede establecer como referencia este link: http://web.mit.edu/rhel-doc/3/rhel-sag-es-3/ch-disk-quotas.html

Gestor de Colas

Un gestor de colas gestiona trabajos lanzados en una máquina por diferentes usuarios. Para simplificar la configuración al gestor de colas hacia el usuario se ha decidido utilizar solo un nombre o queue para la asociación y denominado talca1 en cada uno de los clúster.

El software de gestión de colas escogido por simplicidad, compatibilidad de software utilizado es PBS.

PBS

PBS (Portable Batch System) es un sistema flexible de balanceo de carga y planificación de tareas, inicialmente fue desarrollado para administrar recursos computacionales de la NASA. PBS ha sido el líder en la administración de recursos y considerado el estándar de facto para los sistemas de planificaciónes bajo sistemas Linux.

La versión utilizada de PBS es parte de TORQUE Resource manager es un software que permite gestionar tareas computacionales, que provee control sobre estas tareas y los recursos computacionales de sistemas distribuidos.

Posee los siguientes componentes:

  • Servidor: En este caso se llama pbs_server. Permite operaciones básicas como crear, modificar, borrar y ejecutar un trabajo.

  • Ejecutor: Es un demonio, llamado en nuestro caso pbs_mom, que pone el comando en ejecución cuando recibe una copia del trabajo de el server.

  • Agendador: Otro demonio que tiene las políticas para decidir que trabajo se ejecuta, donde y cuando. Usamos el agendador MAUI el cual se puede comunicar con varios MOMs para comunicar al servidor el estado de los recursos y para conocer del servidor el estado de los trabajos a ejecutar.

Algunas características más importantes del sistema PBS son:

  • Listas de seguridad y control de acceso: El administrador puede permitir o denegar el acceso al sistema PBS basándose en el nombre de usuario, grupo, nodo o dominio de red.
  • Registro de tareas: logs detallados de las actividades del sistema mediante el análisis de utilización por usuario, por grupo y por nodo.
  • Soporte de tareas paralelas: Permite la utilización de librerías de programación paralela como MPI, PVM, y HPF. Se puede planificar la ejecución de aplicaciones sobre un computador de un sólo procesador o mediante la utilización de múltiples computadores.
  • Monitoreo del sistema: Mediante una interfaz gráfica permite realizar un monitoreo completo del ambiente distribuido.
  • Soporte para grids: Provee tecnología para grids computacionales y la integración del toolkit Globus.
  • Nivel de carga automático: Provee diversas formas de distribuir la carga en los computadores que conforman el cluster, basados en la configuración de hardware, disponibilidad de recursos, actividad del teclado y el manejo de políticas locales.
  • Ambiente común de usuario: Ofrece al usuario una visión común de las tareas entregadas y solicitadas, el estado del sistema y seguimiento de tareas.
  • Priridad de tareas: Permite a los usuarios especificar prioridades para la asignación de recursos y ejecución de sus tareas.
  • Disponibilidad para diferentes plataformas: Permite el soporte de Windows 2000 y XP, junto con la mayoría de versiones de UNIX y Linux, desde estaciones de trabajo y servidores hasta supercomputadores.

Politica de configuración estándar para PBS

La configuración de políticas del servidor PBS por defecto para los clúster de Ingeniería Civil en Bioinformática es la siguiente:

set server scheduling = True
set server acl_host_enable = False
set server acl_hosts = clustertalca2.utalca.cl
set server managers = maui@clustertalca2.utalca.cl
set server managers += maui@clustertalca2.local
set server managers += root@clustertalca2.utalca.cl
set server managers += root@clustertalca2.local
set server default_queue = default
set server log_events = 511
set server mail_from = adm
set server query_other_jobs = True
set server scheduler_iteration = 600
set server node_check_rate = 150
set server tcp_timeout = 300
set server job_stat_rate = 45
set server poll_jobs = True
set server mom_job_sync = True
set server allow_node_submit = True
set server next_job_number = 2198
set server server_name = clustertalca2.utalca.cl
set server moab_array_compatible = True
set server nppcu = 2

Esto es seteado a traves del comando qmgr.

Maui

A pesar de que ya tenemos un gestor de colas, se hace necesario tener un planificador de procesos. Es seleccionado es Maui.

MAUI es un planificador externo integrado en el sistema, que periódicamente itera sobre los trabajos pendientes en el gestor de colas.Cada iteración (cuyo intervalo de tiempo varía en función del parámetro RMP POLL), consulta al gestor de colas el estado de los trabajos en el sistema. A partir de esa información, MAUI ordena los trabajos pendientes de ejecución en función de las políticas de prioridad del sistema, y los ejecuta en el orden de mayor a menor prioridad. Presenta la ventaja de ser de código abierto, lo que ha facilitado su rápido crecimiento, y actualmente es uno de los planificador es más extendidos. Permite ser integrado en la gran mayoría de gestores de colas, tales como PBS, LoadLeveler, SGE y BPROC.

Es totalmente configurable a las necesidades del usuario. Como características destacaremos las siguientes:

  • Permite definir diferente políticas con diferentes prioridades.
  • Posee una interface Metascheduling.
  • Permite configurar múltiples políticas backfill.
  • Diferentes modos de uso como son el normal, test o monitor.
  • Posee un simulador de scheduler que permite analizar workloads para diferentes políticas.

Política de configuración estándar para Maui

La configuración de políticas para aplicar en Maui siguiente:

# maui.cfg.tmpl for Maui v3.2.5
# full parameter docs at http://supercluster.org/mauidocs/a.fparameters.html
# use the 'schedctl -l' command to display current configuration
RMPOLLINTERVAL        00:00:30
SERVERHOST        clustertalca2.utalca.cl
SERVERPORT        42559
SERVERMODE        NORMAL
RMCFG[base]        TYPE=PBS
# Admin: http://supercluster.org/mauidocs/a.esecurity.html
# ADMIN1 users have full scheduler control
ADMIN1                maui root
ADMIN3                ALL
LOGFILE               maui.log
LOGFILEMAXSIZE        10000000
LOGLEVEL              3
# Job Priority: http://supercluster.org/mauidocs/5.1jobprioritization.html
QUEUETIMEWEIGHT       1
# Backfill: http://supercluster.org/mauidocs/8.2backfill.html
BACKFILLPOLICY        FIRSTFIT
RESERVATIONPOLICY     CURRENTHIGHEST
# Node Allocation: http://supercluster.org/mauidocs/5.2nodeallocation.html
NODEALLOCATIONPOLICY  MINRESOURCE

Algunas de la referencias:

https://www.researchgate.net/profile/Brett_Bode/publication/236659354_The_Portable_batch_scheduler_and_the_Maui_Scheduler_on_Linux_Clusters/links/0a85e53b180a2ae39f000000/The-Portable-batch-scheduler-and-the-Maui-Scheduler-on-Linux-Clusters.pdf

http://www.adaptivecomputing.com/products/open-source/maui/

https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaai.hpcsuse/installingmcs.htm

Monitorización de salud del cluster

Un aspecto importante en el funcionamiento de los clúster es tener una implementación para que el administrador visualice y tenga los datos necesarios para intentar anticipar los problemas. Si se dispone de herramientas adecuadas que puedan prevenir la situación, generar alertas y advertir al responsable de que “algo está pasando” y que este pueda realizar con antelación las acciones correctivas para evitar el fallo, disfunción o situación de fuera de servicio del sistema o recurso.

Ante esto se ha decidido la implementación de Ganglia.

Ganglia

Es una herramienta que permite monitorizar de forma escalable y distribuida el estado de un conjunto de máquinas agrupadas bajo diferentes criterios (red, servicios, etc). El sistema se compone de dos daemons (gmond y gmetad), una página de visualización (ganglia-webfrontend).

En Rock Clusters el servicio viene instalado y configurado por defecto lo cual ofrece una ventaja al momento de implementar.

Algunas características de ganglia:

  • La interfaz Web, o mejor conocido como frontend. Esta debe ser instalada en el nodo de administración únicamente.
  • El demonio de monitoreo: gmond, el cual debe ser instalado en cada nodo del cluster.
  • El backend para la recolección de los datos, el demonio: gmetad. Instalado únicamente en el nodo de administración.

Una buena posibilidad que ofrece ganglia es que también se puede visualizar bajo línea de comandos, esto el práctico en caso no se posea un navegador. Estas herramientas son:

  • gstat, la cual provee un medio de comunicación para realizar consultas al demonio gmond, y permite crear reportes del estado del cluster.

  • gmetric, que permite monitorear de manera sencilla las métricas de los equipos, además de las predefinidas por Ganglia, como: número de procesadores, memoria utilizada, velocidad del CPU entre otros.

Para la configurar el servidor Ganglia se debe crear o editar el archivo /etc/ganglia/gmetad.conf, para el caso esto debiesemos tocar la siguiente linea para iniciar el monitoreo.

data_source "clustertalca" localhost:8649

Acá solo se especifica la ip y el puerto de escucha para el servicio de ganglia y solo se configura en el Headnode o equipo máster.

Para los nodos el servicio a supervisar es gmond, que es un demonio que permite monitorizar los cambios de estado en el host, enviar los cambios pertinentes, escuchar el estado de otros nodos.

La política de configuración en cada nodo debe ser la siguiente:

/* Global Configuration */
globals {
    daemonize = yes
    setuid = yes
    user = nobody
    debug_level = 0
    max_udp_msg_len = 1472
    mute = no
    deaf = yes
    host_dmax = 0 /* secs */
    cleanup_threshold = 300 /* secs */
    gexec = no
    send_metadata_interval = 180 /* secs */
}
/* Cluster Specific attributes */
cluster {
    name = "clustertalca"
    owner = "El Dueño soy YO"
    latlong = "N32.87 W117.22"
    url = "http://icb.utalca.cl"
}
/* Host configuration */
host {
    location="0,1,0"
}
/* UDP Channels for Send and Recv */
udp_recv_channel {
    mcast_join = 224.0.0.3
    port = 8649
}
udp_send_channel {
    mcast_join = 224.0.0.3
    host = 192.168.10.1
    port = 8649
}
/* TCP Accept Channel */
tcp_accept_channel {
    port = 8649
    acl {
        default = "deny"
        access {
            ip = 127.0.0.1
            mask = 32
            action = "allow"
        }
        access {
            ip = 192.168.10.0
            mask = 24
            action = "allow"
        }
    }
}
/* Modules */
modules {
    module {
        name = "core_metrics"
    }
    module {
        name = "cpu_module"
        path = "modcpu.so"
    }
    module {
        name = "disk_module"
        path = "moddisk.so"
    }
    module {
        name = "load_module"
        path = "modload.so"
    }
    module {
        name = "mem_module"
        path = "modmem.so"
    }
    module {
        name = "net_module"
        path = "modnet.so"
    }
    module {
        name = "proc_module"
        path = "modproc.so"
    }
    module {
        name = "sys_module"
        path = "modsys.so"
    }
        module {
                name = "python_module"
                path = "modpython.so"
                params = "/opt/ganglia/lib64/ganglia/python_modules"
        }
}
/* Metrics Collection group */
collection_group {
    collect_every = 60
    time_threshold = 300
    metric {
        name = "location"
        value_threshold = 10.0
    }
    metric {
        name = "load_one"
        value_threshold = 10.0
    }
    metric {
        name = "mem_total"
        value_threshold = 10.0
    }
    metric {
        name = "cpu_intr"
        value_threshold = 10.0
    }
    metric {
        name = "proc_run"
        value_threshold = 10.0
    }
    metric {
        name = "load_five"
        value_threshold = 10.0
    }
    metric {
        name = "disk_free"
        value_threshold = 10.0
    }
    metric {
        name = "mem_cached"
        value_threshold = 10.0
    }
    metric {
        name = "mtu"
        value_threshold = 10.0
    }
    metric {
        name = "cpu_sintr"
        value_threshold = 10.0
    }
    metric {
        name = "pkts_in"
        value_threshold = 10.0
    }
    metric {
        name = "bytes_in"
        value_threshold = 10.0
    }
    metric {
        name = "bytes_out"
        value_threshold = 10.0
    }
    metric {
        name = "swap_total"
        value_threshold = 10.0
    }
    metric {
        name = "mem_free"
        value_threshold = 10.0
    }
    metric {
        name = "load_fifteen"
        value_threshold = 10.0
    }
    metric {
        name = "boottime"
        value_threshold = 10.0
    }
    metric {
        name = "cpu_idle"
        value_threshold = 10.0
    }
    metric {
        name = "cpu_aidle"
        value_threshold = 10.0
    }
    metric {
        name = "cpu_user"
        value_threshold = 10.0
    }
    metric {
        name = "cpu_nice"
        value_threshold = 10.0
    }
    metric {
        name = "sys_clock"
        value_threshold = 10.0
    }
    metric {
        name = "mem_buffers"
        value_threshold = 10.0
    }
    metric {
        name = "cpu_system"
        value_threshold = 10.0
    }
    metric {
        name = "part_max_used"
        value_threshold = 10.0
    }
    metric {
        name = "disk_total"
        value_threshold = 10.0
    }
    metric {
        name = "heartbeat"
        value_threshold = 10.0
    }
    metric {
        name = "mem_shared"
        value_threshold = 10.0
    }
    metric {
        name = "machine_type"
        value_threshold = 10.0
    }
    metric {
        name = "cpu_wio"
        value_threshold = 10.0
    }
    metric {
        name = "proc_total"
        value_threshold = 10.0
    }
    metric {
        name = "cpu_num"
        value_threshold = 10.0
    }
    metric {
        name = "cpu_speed"
        value_threshold = 10.0
    }
    metric {
        name = "pkts_out"
        value_threshold = 10.0
    }
    metric {
        name = "swap_free"
        value_threshold = 10.0
    }
}
include ('/opt/ganglia/etc/conf.d/*.pyconf')

La url para visualizar el monitoreo tiene que ser la siguiente: http://ip-del-cluster/ganglia

Imagenes de Ganglia

attachment:ganglia-clustertalca2-1 attachment:ganglia-clustertalca2-2 attachment:ganglia-clustertalca2-3 attachment:ganglia-clustertalca2-4

Estructuras de particiones del sistema operativo

Nodo Máster

Particiones definidas:

  • Raíz (/) 16 GB
  • Var (/var) 4 GB
  • Memoria de Intercambio (swap) 8GB (1/2 Giga Ram física)
  • Home, Share: Resto del disco*

Justificación de la adopción de la medida:

  • Sobre el espacio de la partición raíz (/), está motivado en la necesidad de solo albergar el sistema operativo y esto es porque las aplicaciones necesarias y/o requeridas para ejecución deben estar en un directorio compartido y visto por cada uno de los nodos. Esta es la forma de como es el modo de un clúster tipo Beowulf, en donde cada nodo ejecuta la aplicación vía red bajo mismas condiciones.
  • La partición /var es creada producto a los logs definidos y además de posibles "share space" que puede utilizar bases de datos de aplicaciones usadas por software de monitoreo de la salud del clúster.
  • La memoria de intercambio configurada es de bajo requerimiento de consumo y por regla debe ser así, "el nodo máster no es un equipo de procesamiento".
  • Home y Share, son parte de una partición única que contempla la mayor porción del disco que es definida como /state1/partition1.
    • Share, es un directorio global que fue definido como referencia para ser montado y compartido con los demás nodos. Dentro de él podemos definir un numero indeterminados de directorios que serán útiles y visible para cada uno de los esclavos (véase en apartado de directorio compartido).
    • Home, alberga los documentos y archivos destinados y utilizado por los usuarios, teniendo como restricción una quota. Su link simbolico es /share/home y es montado como /home en este equipo.

Ejemplo de /etc/fstab de clustertalca y clustertalca2

LABEL=/                 /                       ext3    defaults        1 1
LABEL=/state/partition  /state/partition1       ext3    defaults,usrquota,grpquota        1 2
LABEL=/var              /var                    ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
LABEL=SW-cciss/c0d0p3   swap                    swap    defaults        0 0

# The ram-backed filesystem for ganglia RRD graph databases.
tmpfs /var/lib/ganglia/rrds tmpfs size=2043372000,gid=nobody,uid=nobody,defaults 1 0

Nodos esclavos

Particiones:

  • Raíz (/) 16 GB
  • Var (/var) 4 GB
  • Memoria de Intercambio (swap) 8GB (1 Giga Ram física)
  • Home, Share: NFS Disco Máster

Justificación de la adopción de la medida:

  • Sobre el espacio de la partición raíz (/), está motivado en la necesidad de solo albergar el sistema operativo y esto es porque las aplicaciones necesarias y/o requeridas para ejecución deben estar en un directorio compartido proporcionado por el nodo máster.
  • Memoria de intercambio esta basada en que es el equipo de procesamiento, y por lo que un cálculo computacional puede requerir más memoria física de la existente.

Directorios compartidos

Los directorio a compartir son los directorios:

  • /home que albergará los directorios, archivos y configuraciones personales de cada usuario,
  • /share deberá poseer directorios útiles.
    • /share/apps en donde almacenamos todos las aplicaciones necesarias y/o solicitadas en el clúster.

Toda la configuración utilizada está basada en NFS.

El sistema NFS permite a un servidor exportar un sistema de archivo para que pueda ser utilizado de forma interactiva desde un cliente. El servicio se compone básicamente de un servidor (básicamente representado por nfsd* y un cliente (representado por rpc.mountd) que permiten compartir un sistema de archivo (o parte de él) a través de la red.

Nodo Máster

Para compartir un directorio se debe editar el fichero /etc/exports, el que controla cuáles sistemas de archivos son exportados a las máquinas remotas y especifica opciones. Importante es conocer que cada sistema de archivos exportado debe tener su propia línea y cualquier lista de hosts autorizadas colocada después de un sistema de archivos exportado, debe estar separada por un espacio. Las opciones para cada uno de los hosts deben ser colocadas entre paréntesis directamente detrás del identificador del host, sin ningún espacio de separación entre el host y el primer paréntesis.

La política de configuración propuesta en los clúster para /etc/exports en nodo máster es:

/export 192.168.10.1(rw,async,no_root_squash) 192.168.10.0/255.255.255.0(rw,async)

Referencia:

http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-es-4/s1-nfs-server-export.html

Nodo Esclavos

Las comparticiones NFS son montadas en el lado del cliente usando el comando mount. El formato del comando es como sigue:

{{{
mount -t <nfs-type> -o <options> <host>:</remote/export> </local/directory>

}}}

En cada nodo esclavo se utilizará la herramienta de automount, cuya característica es montar y desmontar sistemas de archivos NFS automáticamente, ahorrando recursos.

El servicio autofs es utilizado para controlar el comando automount a través del archivo de configuración primario /etc/auto.master. Mientras que automount puede ser especificado en la línea de comandos, es más conveniente especificar los puntos de montaje, nombres de hosts, directorios exportados y opciones en un conjunto de archivos que teclearlo todo a mano.

El archivo de auto.master establecido para cada nodo esclavo y localizado en el directorio de /etc/ es:

/share /etc/auto.share --timeout=1200
/home  /etc/auto.home  --timeout=1200

Se debe configurar el archivo auto.master en cado de los nodos esclavos y para nuestro caso que apunte un archivo auto.home conteniendo los detalles sobre cómo montar el directorio /home/ vía NFS. Esto permite al usuario acceder a sus datos personales y archivos de configuración en su directorio /home/ conectándose desde cualquier sitio de la red interna.

Ejemplo de /etc/auto.home definido en clustertalca2

user    -nfsvers=3    clustertalca2.local:/export/home/user

Así también se deben configurar los directorios definidos como lo es /etc/auto.share:

apps clustertalca2.local:/export/&

Referencia:

http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-es-4/s1-nfs-client-config.html

Instalación de Aplicaciones

Todas las implementaciones de aplicaciones deberán estas visadas por la dirección de escuela, por lo que la solicitud debe ser propuesta vía correo electrónico para analizar factibilidad técnica (formas de compilación, compatibilidad de librerías, soporte a sistema operativo, soporte a paralelización y/o distribución, openMPI, disponibilidad de Infiniband, capacidad de cómputo, compatibilidad con PBS, benchmark, etc.).

Las aplicaciones deben ser compiladas a fin de adecuarse de mejor modo a la infraestructura del clúster, y de no ser así buscar el binario específico para el equipo y sus componentes (clúster beowulf, openMPI, Infiniband, etc).

No deben instalarse aplicaciones de repositorio, puesto a que son genéricas y la posible perdida de performance es latente.

En la actualidad los clúster poseen aplicaciones destinadas a la simulación molecular (NAMD, Desmond Schrodinger, Lammps). Puede visualizar en los siguiente links:

http://srvbioinf1.utalca.cl/wiki/cluster/clustertalca#Software

http://srvbioinf1.utalca.cl/wiki/cluster/clustertalca2#Software

Las aplicaciones requeridas estarán todas localizadas en el directorio /share/apps y debe garantizar el acceso de todos los nodos (/etc/auto.share).

El árbol directorio a conformar será el siguiente: /share/apps/<apps>/<versionx>, esto a fin de poder identificar la aplicación misma y las versiones de implementadas.

Para el caso de que la aplicación requiera de una actualización para una misma version, se debe crear un nuevo directorio de la siguiente manera /share/apps/<apps>/<versionx-update> y pasar a producción solo cuando el software a sido testeado.

Sandbox de aplicaciones

Nuestra política no es restringir a los usuarios a utilizar o experimentar herramientas dentro del cluster, por lo que tienen la posibilidad de poder compilar e instalar dentro del espacio asociado a su cuenta la aplicación deseada. La limitación corre por el uso del espacio en disco, vea aquí.

Variables de Entorno

Las variables de entorno forman un conjunto de valores dinámicos que normalmente afectan al comportamiento de los procesos en una computadora.

Algunas de las variables más utilizadas:

  • PATH, que mantiene la ruta de búsqueda de programas en el sistema

  • LD_LIBRARY_PATH, que mantiene la ruta de búsqueda de librerías en el sistema

  • INCLUDE, que mantiene la ruta de búsqueda de cabeceras necesarias por algún software en particular en el sistema

La mejor forma que se ha decidido para agregar o editar las variables de entorno que afecten a todos los usuarios es agregar un fichero (nueva-variable-entorno.sh) a /etc/profile.d/ en donde se cargarán de forma automática ante un nuevo inicio de sesión.

Un ejemplo puede ser para nuestra implementación de gcc 6.3.0:

$cat /etc/profile.d/gcc.sh

export PATH=/share/apps/gcc/6.3.0/bin:$PATH
export LD_LIBRARY_PATH=/share/apps/gcc/6.3.0/lib64:$LD_LIBRARY_PATH
export INCLUDE=/share/apps/gcc/6.3.0/include/c++/6.3.0/:$INCLUDE

La prioridad de acceso es primer directorio que lee es primero donde busca el paquete o librería.

El usuario puede tener la habilidad de poder modificar las variables de entorno, solo de enunciarlas vía terminal (export) o instanciarlas desde un archivo bash.

Compilación de herramientas

GCC

El GNU Compiler Collection (colección de compiladores GNU) es un conjunto de compiladores creados por el proyecto GNU. GCC es software libre y lo distribuye la Free Software Foundation (FSF) bajo la licencia general pública GPL.

La url del proyecto es: https://gcc.gnu.org/

La última implementación de GCC realizada ha sido en nuestros clúster ha sido la versión 6.3 (gcc-6.3.0.tar.bz2). La forma de compilar GCC en nuestras máquinas es la siguiente:

Estableciendo dependencias:

Librerías de Desarrollo

$ tar jxvf gcc-6.3.0.tar.bz2
$ mkdir /share/apps/gcc/6.3/
$ cd gcc-6.3.0
$ ./configure --enable-shared --enable-threads=posix --enable-__cxa_atexit \
--enable-clocale=gnu --enable-languages=fortran,objc \
--prefix=/share/apps/gcc/6.3/

La explicación del comando:

  • --enable-shared : Compila las librerías compartidas.

  • --enable-threads=posix : Selecciona la librería genérica POSIX/Unix98 para el soporte de hilos.

  • --enable-cxa_atexit : Opción necesaria para una correcta compilación de c++.

  • --enable-clocale=gnu : Evita un error en la generación de las locales, en el caso de que estén incompletas.

  • --enable-languages=fortran,objc : Compila los lenguajes de programación Fortran, y Objetive C, además de los predefinidos, C y C++.

  • --prefix=/share/apps/gcc/6.3/ : Instala el compilador en /share/apps/gcc/6.3

Se puede y debe compilar con un modo de optimización al procesador dependiendo del clúster

  • -march=native, para clústertalca(procesador Xeón)

  • -march=bdver1, para clústertalca2 (procesador AMD)

make -j8

-j8 : Si tenemos un procesador de ocho núcleos (octa-core) y el kernel está optimizado para el mismo, con este parámetro aumentaremos el número de procesos de compilación simultáneos a ocho obteniendo un tiempo de compilación del programa de forma considerable.

referencias:

(1) - https://software.intel.com/en-us/blogs/2012/09/26/gcc-x86-performance-hints

(2) - http://developer.amd.com/wordpress/media/2012/10/CompilerOptQuickRef-62004200.pdf

OpenMPI

OpenMPI es una implementación de la interfaz de paso de mensajes MPI. OpenMPI se caracteriza por su alta eficiencia y prestaciones para la ejecución en entornos distribuidos (clústers de ordenadores).

La implementación de rocks contempla una instancia de OpenMPI por defecto que incluye al nodo máster como esclavos.

Las versiones instaladas son:

  • OpenMPI 1.4.2 (clustertalca)
  • OpenMPI 1.6.2 (clustertalca2)

Pero por requerimientos de nuevos softwares se hace necesario tener disponibles otras versiones.

Las versiones de OpenMPI se pueden implementar sin problema, siempre y cuando sea en modo "Sandbox" y localizada en /share/apps/openmpi/<version> esto porque para la vinculación con el mismo debe ser invocado de modo explicito.

Para instalar se debe, descargar la versión de OpenMPI deseada desde la url https://www.open-mpi.org/software/.

Posterior ejecutar los siguientes pasos:

tar -xvf openmpi-<version>

cd openmpi-<version>

./configure --prefix=/share/apps/openmpi/<version>

make -j8 all

su -c 'make install'

Para ejecutar OpenMPI el usuario debe editar sus variables de entorno de PATH y LD_LIBRARY_PATH, esto sería

export PATH=/share/apps/openmpi/<version>/bin:$PATH

export LD_LIBRARY_PATH=/share/apps/openmpi/<version>/lib:$LD_LIBRARY_PATH

En los nodos esclavos no se toca nada, por el contrario todo cambio en variables de entorno se deben realizar en el archivo bash envíado al gestor de colas para la adopción de estás nuevas rutas en los nodos para la sesión.

Actualización de Sistema

Los clúster solo actualizarán su sistema desde repositorios oficiales de CentOS (Rock Cluster está basado en CentOS) y/o Red Hat, permaneciendo por defecto deshabilitados, habilitandose solo cuando sea invocado el comando de actualización.

Ejemplo de repositorios clustertalca y clustertalca2

$ cat /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
enabled = 0
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#released updates
[updates]
enabled = 0
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that may be useful
[extras]
enabled = 0
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that extend functionality of existing packages
[centosplus]
enabled = 0
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#contrib - packages by Centos Users
[contrib]
enabled = 0
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

$ cat /etc/yum.repos.d/elrepo.repo
### Name: ELRepo.org Community Enterprise Linux Repository for el6
### URL: http://elrepo.org/
[elrepo]
enabled = 0
name=ELRepo.org Community Enterprise Linux Repository - el6
baseurl=http://elrepo.org/linux/elrepo/el6/$basearch/
mirrorlist=http://elrepo.org/mirrors-elrepo.el6
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0
[elrepo-testing]
enabled = 0
name=ELRepo.org Community Enterprise Linux Testing Repository - el6
baseurl=http://elrepo.org/linux/testing/el6/$basearch/
mirrorlist=http://elrepo.org/mirrors-elrepo-testing.el6
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0
[elrepo-kernel]
enabled = 0
name=ELRepo.org Community Enterprise Linux Kernel Repository - el6
baseurl=http://elrepo.org/linux/kernel/el6/$basearch/
mirrorlist=http://elrepo.org/mirrors-elrepo-kernel.el6
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0
[elrepo-extras]
enabled = 0
name=ELRepo.org Community Enterprise Linux Repository - el6
baseurl=http://elrepo.org/linux/extras/el6/$basearch/
mirrorlist=http://elrepo.org/mirrors-elrepo-extras.el6
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0

Solo se actualizará mediante red el nodo máster, realizando los siguientes comandos:

yum clean all

yum check-update --enablerepo=base,updates

yum upgrade --enablerepo=base,update

Paridad de paquetes entre los nodos

Una de las particularidades de Rocks es poder crear imagenes de instalación a partir de una actualización, por lo que se debe realizar lo siguiente:

cp /var/cache/yum/updates/packages/*  /export/rocks/install/contrib/<version>/<arch>/RPMS/
cd /export/rocks/install
rocks create distro
rocks run host compute "/boot/kickstart/cluster-kickstart"

Lo anterior realizará:

  • Copia los paquetes descargados en formato rpm al directorio especificado de creación de imagen rocks
  • Se crea la nueva imagen de instalación para nodos esclavos
  • Se ordena a todos los nodos reiniciarse e incluye en flags de reinstalación para grub
  • Se reinstalan los nodos con una versión actualizada del sistema.

Referencia:

http://www.rocksclusters.org/roll-documentation/base/5.5/update.html

cluster/politicas (última edición 2017-05-17 19:14:18 efectuada por FabioDuran)