Hay un nodo «maestro» (host01 aka cenachero) y 3 (host02-host04) «esclavos».
El nodo «maestro» es el único con conexión externa y es donde se entra por defecto al conectar con 'cenachero.ctima.uma.es'. Se reserva para gestión y administración (login de usuarios, sesiones interactivas, mantenimiento, etc.). Por tanto, el nodo host01 (cenachero) NO se debe utilizar para encolar procesos de cálculo intensivo, sino solo para lanzarlos a las máquinas esclavas. El objetivo es garantizar en todo momento el acceso de los usuarios independientemente de la carga del servidor.
NFS (Network File System) permite utilizar directorios remotos como recursos locales de forma transparente al usuario. Los directorios remotos aparecen como directorios locales en el árbol de directorios.
Tenemos exportados (NFS) en el nodo «maestro» los directorios '/opt/', '/srv/', '/home/', '/usr/local/' y '/var/mail/' que aparecen como tales en los nodos «esclavos» (en cenachero).
De este modo se asegura que estén disponibles en todos los nodos del cluster en todo momento
El directorio '/srv/' es para almacenar datos comunes y de servicios. Por ejemplo, en /srv/sec/ están los ensamblados de los genomas más utilizados: hg18, hg17, mm7, etc. Se irá actualizando periódicamente. Por tanto, no es necesario bajarse estos genomas a los home de cada usuario. Es mejor apuntar el software para que lea las secuencias de estos directorios.
En Ruby Queue (rq) no existe gestión centralizada de colas; cada usuario se crea y gestiona su/s propia/s cola/s.
Un manual detallado de rq se puede obtener tecleando 'rq help'. Por conveniencia, la salida de ese comando se incluye al final de este documento como un Apéndice.
Los pasos imprescindibles para echar a andar una cola en el home del usuario, tras conectarse por SSH (desde Windows utilizando el cliente PuTTy, por ejemplo) a cenachero.ctima.uma.es, se resumen a continuación
rq q c
Esto crea el directorio 'q' en nuestro directorio home, con todo lo necesario (fundamentalmente, una base de datos SQLite) para gestionar y mantener la cola.
Por ejemplo, para definir host02 como feeder de la cola q que acabamos de crear, se hace lo siguiente:
username@cenachero:~$ ssh host02 Linux host02 2.4.26-om1.om+libata+tuneado+iptables2 #1 SMP dom may 21 22:27:31 CEST 2006 i686 GNU/Linux username@host02:~$ crontab -e
Aparece entonces el contenido del crontab del usuario en el editor por omisión del usuario (o del sistema, si el usuario no tiene definido ninguno, que es Vim). En tabla de cron (crontab) del usuario hay que incluir (i, para entrar en modo INSERT) la siguiente línea:
# m h dom mon dow command */15 * * * * /usr/local/rq-2.3.2/bin/rq /home/username/q feed --max_feed=8 >> /dev/null 2>&1 ~ ~
cambiando «username» por el usn del usuario correspondiente; y siendo 8 el número máximo (--max_feed) de procesos de la cola que debe ejecutar el nodo (nunca debe ser mayor que el número de núcleos (cores) en los microprocesadores del nodo).
Se termina la edición de la tabla cron (crontab) guardando los datos y saliendo del editor (ESC :wq en el caso de Vim) y se comprueba que hemos incluido esa línea correctamente:
username@host02:~$ crontab -l # m h dom mon dow command */15 * * * * /usr/local/rq-2.3.2/bin/rq /home/username/q feed --max_feed=8 >> /dev/null 2>&1
De esta forma, ya tenemos definido host02 como «feeder» de nuestros procesos. Este paso hay que repetirlo para todos los feeders que queramos añadir (host02-04).
Recordar que host01 (cenachero) no se debe usar como «feeder».
El/los host/s definido/s como feeder/s mediante el cron se «activarán» automáticamente cada 15 minutos para, en caso de tener recursos disponibles, hacerse cargo de uno o varios procesos de la cola q.
Otra forma de echar a andar manualmente, pero de forma inmediata, una cola en cualquier feeder es, una vez hecho el login en el host correspondiente, teclear:
~$ rq q start
perl /home/username/CpGcluster/CpGcluster.pl /share/sec/hg18/chr1.fa 50 1E-5 /home/username/CpGcluster/chr1.cpg perl /home/username/CpGcluster/CpGcluster.pl /share/sec/hg18/chrY.fa 50 1E-5 /home/username/CpGcluster/chrY.cpg perl /home/username/CpGcluster/CpGcluster.pl /share/sec/hg18/chr2.fa 50 1E-5 /home/username/CpGcluster/chr2.cpg
Nótese
~$ rq q s --infile=joblist
o bien
~$ rq q s - <joblist
~$ rq q t
~$ rq q l
~$ rq q l r | grep command
oliver@cenachero:~IsoFinderB$ rq ../q l r | grep command
command: /home/oliver/IsoFinderB/a.out /share/sec/hg18/chr1.fa 0.95 r 3000 /home/oliver/IsoFinderB/sal
command: /home/oliver/IsoFinderB/a.out /share/sec/hg18/chr2.fa 0.95 r 3000 /home/oliver/IsoFinderB/sal
command: /home/oliver/IsoFinderB/a.out /share/sec/hg18/chr3.fa 0.95 r 3000 /home/oliver/IsoFinderB/sal
command: /home/oliver/IsoFinderB/a.out /share/sec/hg18/chr4.fa 0.95 r 3000 /home/oliver/IsoFinderB/sal
command: /home/oliver/IsoFinderB/a.out /share/sec/hg18/chr5.fa 0.95 r 3000 /home/oliver/IsoFinderB/sal
command: /home/oliver/IsoFinderB/a.out /share/sec/hg18/chr6.fa 0.95 r 3000 /home/oliver/IsoFinderB/sal
…
command: /home/oliver/IsoFinderB/a.out /share/sec/hg18/chr17.fa 0.95 r 3000 /home/oliver/IsoFinderB/sal
command: /home/oliver/IsoFinderB/a.out /share/sec/hg18/chr18.fa 0.95 r 3000 /home/oliver/IsoFinderB/sal
command: /home/oliver/IsoFinderB/a.out /share/sec/hg18/chr19.fa 0.95 r 3000 /home/oliver/IsoFinderB/sal
command: /home/oliver/IsoFinderB/a.out /share/sec/hg18/chr20.fa 0.95 r 3000 /home/oliver/IsoFinderB/sal
oliver@cenachero:~/IsoFinderB$
~$rq q l r | grep runner
oliver@cenachero:~$ rq ../q l r | grep runner
runner: host04
runner: host04
runner: host03
runner: host03
…
runner: host03
runner: host03
runner: host02
runner: host02
oliver@cenachero:~$
~$ rq q rotate
o bien, añadir esta línea al crontab del host01 (cenachero), para limpiar la cola diariamente:
59 23 * * * rq q rotate `date +q.%Y%m%d`
Más información en el Apéndice, o tecleando:
~$ rq help