Slurm#
Slurm (Simple Linux Utility for Resources Management), es un sistema de gestión de tareas y de clústeres (nodos o servidores de cómputo).
srun # Envía un trabajo para su ejecución
scancel # Finaliza trabajos que se encuentren en ejecución o pendientes
sinfo # Muestra información sobre el estado de los nodos de cómputo
squeue # Informa sobre el estado de los trabajos en ejecución y pendientes
sbatch # Envía un script para su posterior ejecución
Caso práctico: Red interna con NIS, NFS, autofs y Slurm#
Partiremos del caso práctico de NIS, NFS y autofs con red interna, donde se exportan los usuarios por NIS y el home por NFS, como podemos ver también en el siguiente vídeo. Empezamos instalandos en el servidor compute-0-0 el controlador central:
root@compute-0-0:~# apt install slurm-wlm
Instalamos Slurmd
root@compute-0-1:~# apt-get install slurmd
Necesitamos que el cliente compute-0-1 seán accesibles por el root desde el servidor sin el uso de contraseña, y que tengan instalado slurmd
root@compute-0-1:~# apt-get install slurmd
Munge es un servicio de autenticación. Se utilizará con Slurm para validar sus procesos. comprueba que se haya instalado en caso contrarío instalalo
root@compute-0-0:~# munge -n | unmunge
Lo instalamos en todos los nodos y copiamos la clave desde el controlador compute-0-0 a los clientes, ejemplo con el nodo compute-0-1
root@compute-0-1:~# apt-get install munge
root@compute-0-0:~# scp /etc/munge/munge.key compute-0-1:/etc/munge/
Nos concetamos al cliente compute-0-1
#chown munge /etc/munge/munge.key
#chmod 400 /etc/munge/munge.key
#systemctl enable munge --now
systemctl restart munge
#systemctl status munge
root@compute-0-0:~# munge -n | ssh compute-0-1 unmunge
Tiene que aparecer STATUS: Success.
Lo siguiente que hacemos es configurar el archivo de configuración del slurm /etc/slurm/slurm.conf
# Control machine
ControlMachine=compute-0-0
# Cluster info
ClusterName=Cluster_tunombre
SlurmUser=slurm
SlurmdUser=root
# Logging
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdLogFile=/var/log/slurmd.log
SlurmdSpoolDir=/var/spool/slurmd
# Communication
StateSaveLocation=/var/spool/slurmctld
SlurmdPort=6818
SlurmctldPort=6817
AuthType=auth/munge
AccountingStorageType=none
# Scheduling
SchedulerType=sched/backfill
# Node definition
NodeName=compute-0-1 CPUs=2 State=UNKNOWN RealMemory=1024
PartitionName=debug Nodes=compute-0-1 Default=YES MaxTime=INFINITE State=UP
ReturnToService=2
Creamos en compute-0-0 los directorios necesarios y les damos los permisos adecuados
sudo mkdir -p /var/spool/slurmctld
sudo mkdir -p /var/log/slurm
sudo chown -R slurm:slurm /var/spool/slurmctld
sudo chown -R slurm:slurm /var/log/slurm
Copiamos la configuración de slurm desde compute-0-0 a compute-0-1:
root@compute-0-0:~# scp /etc/slurm/slurm.conf compute-0-1:/etc/slurm/slurm.conf
Cambiamos permisos y lanzamos slurmd en compute-0-1
touch /var/log/slurmd.log
chown slurm: /var/log/slurmd.log
systemctl enable slurmd.service
systemctl stop slurmd.service
systemctl start slurmd.service
systemctl status slurmd.service
Lanza los servicios en el controlador compute-0-0:
systemctl restart slurmctld.service
systemctl status slurmctld.service
Comprobar desde el servidor el estado del nodo
root@compute-0-0:~# sinfo
PARTITION AVAL TIMELIMIT NODES STATE NODELIST
debug* up infite 1 idle compute-0-1
En el caso de que no se cambie el estado automaticamente lo podemos intentar a cambiar a mano
scontrol update nodename=compute-0-1 state=idle
Clonamos otro cliente compute-0-2, cambiamos en compute-0-0:/etc/slurm/slurm.conf
# Node definition
NodeName=compute-0-[1-2] CPUs=1 State=UNKNOWN RealMemory=1024
PartitionName=debug Nodes=compute-0-[1-2] Default=YES MaxTime=INFINITE State=UP
ReturnToService=2
Hacemos la instalacion en compute-0-2 desde el compute-0-0
ssh compute-0-2 apt install slurmd -y
scp /etc/munge/munge.key compute-0-2:/etc/munge/
ssh compute-0-2 systemctl restart munge
munge -n | ssh compute-0-2 unmunge
scp /etc/slurm/slurm.conf compute-0-2:/etc/slurm/slurm.conf
ssh compute-0-2 touch /var/log/slurmd.log
ssh compute-0-2 chown slurm: /var/log/slurmd.log
ssh compute-0-2 systemctl restart slurmd.service
ssh compute-0-2 systemctl status slurmd.service
!Cambiamos también en compute-0-1
scp /etc/slurm/slurm.conf compute-0-1:/etc/slurm/slurm.conf
ssh compute-0-1 systemctl restart slurmd.service
systemctl restart slurmctld.service