Cluster Server and Compute Nodes
1. 아래 파일에서 원하는 hostname으로 수정
vi /etc/hostname
wonwooddo
또 아래 파일에서 subdomain이 있다면 아래에 hostname과 ip를 추가하자
vi /etc/hosts
| 127.0.0.1 localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 128.197.115.7 wonwooddo2 2.wonwooddo.com |
네트워크 재시작
systemctl restart network
확인해보자:
hostnamectl status
| Static hostname: wonwooddo
Transient hostname: localhost.localdomain
Icon name: computer-desktop
Chassis: desktop
Machine ID: 3c3d6999caaa4b74a731306fcba50423
Boot ID: b71d4586e8b544d69c3f08e92e730243
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-514.26.1.el7.x86_64
Architecture: x86-64 |
NetworkManager가 예전의 nameservers을 삭제했을수도 있음으로 nameserver도 다시 설정해야된다. Nameserver는 subdomains and domains 를 접속하게 한다
vi /etc/resolv.conf
nameserver 203.248.252.2
nameserver 164.124.101.2
nameserver 8.8.8.8
The clients are:
wwhpc1
wwhpc2
wwhpc3
wwhpc4
wwhpc5
wwhpc6
Delete failed installation of Slurm
실패를 했건 업데이트를 하기위해 재설치를 하건 기존의 슬럼이 설치가 되어있다면 dependency때문에 일단 재설치 전에 완전히 지우는 다시 시작하는게 좋다.
일단, Slurm accounting 보관했던 database를 지워야 한다.
yum remove mariadb-server mariadb-devel -y
그리고 Slurm and Munge를 지운다. Munge 는 Slurm 시스템에서 메시징을 식별하는 데 사용되는 인증 도구다.
yum remove slurm munge munge-libs munge-devel -y
slurm and munge users 가 있는지 확인해라
cat /etc/passwd | grep slurm
있다면 user와 해단 user의 폴더를 지우자
userdel - r slurm
userdel -r munge
userdel: user munge is currently used by process 26278
kill 26278
userdel -r munge
Slurm, Munge 및 Mariadb를 완전히 지우고 이제 실제로 작동하는 새로운 설치를 시작해보자.
Install MariaDB
일단 MariaDB를 설치하면 Slurm이 제공하는 계정을 저장할 수 있다. 이건 accounting file(db)저장하는거여서 client말고 서버노드에서만 하자. 설치하고나면 이따가 slurm RPM깔고 다시 돌아와서 작업하자
yum install mariadb-server mariadb-devel -y
Create the global users
Slurm and Munge 설치 전에 모든 노드에 같은 UID and GID 가 필요하다.
export MUNGEUSER=991
groupadd -g $MUNGEUSER munge
useradd -m -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g munge -s /sbin/nologin munge
export SLURMUSER=992
groupadd -g $SLURMUSER slurm
useradd -m -c "SLURM workload manager" -d /var/lib/slurm -u $SLURMUSER -g slurm -s /bin/bash slurm
Install Munge
CentOS 7이니까 일단 최신 EPEL repository를 추가하자.
yum install epel-release
그리고 Munge 를 설치하자.
yum install munge munge-libs munge-devel -y
Munge 설치 후엔 서버의 secret key를 만들어야 한다. 서버노드가 될 노드하나를 선정하자. 지금 나같은 경우엔 단일노드여서 wonwooddo가 서버노드다
우선 키를 만들기 위해서 rng-tools를 설치하자.
yum install rng-tools -y
rngd -r /dev/urandom
이제 secret key를 서버에서만 만들면 된다.
/usr/sbin/create-munge-key -r
dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key
chown munge: /etc/munge/munge.key
chmod 400 /etc/munge/munge.key
secret key 만들고 나서 키를 모든 compute nodes에 보내야 한다.
scp /etc/munge/munge.key root@1.wwhpc.com:/etc/munge
scp /etc/munge/munge.key root@2.wwhpc.com:/etc/munge
scp /etc/munge/munge.key root@4.wwhpc.com:/etc/munge
scp /etc/munge/munge.key root@5.wwhpc.com:/etc/munge
scp /etc/munge/munge.key root@6.wwhpc.com:/etc/munge
이젠 모든 노드에 SSH 해서 permissions을 수정하고 Munge service도 시작.
chown -R munge: /etc/munge/ /var/log/munge/
chmod 0700 /etc/munge/ /var/log/munge/
systemctl enable munge
systemctl start munge
Munge를 테스트하기 위해, Munge를 통해서 다른 노드에 접속해보자
munge -n
munge -n | unmunge
munge -n | ssh 3.wwhpc.com unmunge
remunge
에러가 없다면 Munge가 잘 작동한다는 뜻!!
Install Slurm
Slurm 을 설치하기전에 의존도에 필요한 것들을 설치해야한다.
yum install openssl openssl-devel pam-devel numactl numactl-devel hwloc hwloc-devel lua lua-devel readline-devel rrdtool-devel ncurses-devel man2html libibmad libibumad -y
Slurm을 이제 최신 shared folder에 다운받자. 최신버전은 아래와 다를수도 있다.
cd /nfs
wget http://www.schedmd.com/download/latest/slurm-15.08.9.tar.bz2
rpmbuild 이 아직 없다면 :
yum install rpm-build
rpmbuild -ta slurm-15.08.9.tar.bz2
rpmbuild로 부터 만들어진 rpms을 확인해본다.
cd /root/rpmbuild/RPMS/x86_64
Slurm rpms을 모두 이제 server and computer nodes에 옮기자.
mkdir /nfs/slurm-rpms
cp slurm-15.08.9-1.el7.centos.x86_64.rpm slurm-devel-15.08.9-1.el7.centos.x86_64.rpm slurm-munge-15.08.9-1.el7.centos.x86_64.rpm slurm-perlapi-15.08.9-1.el7.centos.x86_64.rpm slurm-plugins-15.08.9-1.el7.centos.x86_64.rpm slurm-sjobexit-15.08.9-1.el7.centos.x86_64.rpm slurm-sjstat-15.08.9-1.el7.centos.x86_64.rpm slurm-torque-15.08.9-1.el7.centos.x86_64.rpm /nfs/slurm-rpms
모든 서버노드 계산노드에 이 rpms들을 다 설치해야한다.
yum --nogpgcheck localinstall slurm-15.08.9-1.el7.centos.x86_64.rpm slurm-devel-15.08.9-1.el7.centos.x86_64.rpm slurm-munge-15.08.9-1.el7.centos.x86_64.rpm slurm-perlapi-15.08.9-1.el7.centos.x86_64.rpm slurm-plugins-15.08.9-1.el7.centos.x86_64.rpm slurm-sjobexit-15.08.9-1.el7.centos.x86_64.rpm slurm-sjstat-15.08.9-1.el7.centos.x86_64.rpm slurm-torque-15.08.9-1.el7.centos.x86_64.rpm
모든 머신에 Slurm 을 설치했다면 재대로 Slurm이 잘 작동되는지 확인해보자
http://slurm.schedmd.com/configurator.easy.html 에 접속하여 Slurm configuration file을 만들어라
아래 뺴곤 default로 냅둔다.
ControlMachine: buhpc3
ControlAddr: 128.197.116.18
NodeName: buhpc[1-6]
CPUs: 4
StateSaveLocation: /var/spool/slurmctld
SlurmctldLogFile: /var/log/slurmctld.log
SlurmdLogFile: /var/log/slurmd.log
ClusterName: buhpc
Submit을 누르고나면 전체 Slurm configuration file을 받을 볼 수 있다.
wwhpc인 서버노드는 아래 위치에서 configuration file을 복사해서 slurm.conf를 만든다. 그리고 아직 하나를 더 수정해야한다.
cd /etc/slurm
vim slurm.conf
slurm.conf에서 “# COMPUTE NODES,”를 보면 Slurm 이 한줄로서 자동으로 IP address들을 다 알아내려 한다.
NodeName=buhpc[1-6] CPUs = 4 State = UNKOWN
여기선 IP address가 순서대로 되어있지 않아있다, 그래서 저 줄은 지우고 직접 아래와 같이 바꿨다
| NodeName=wwhpc1 NodeAddr=128.197.115.158 CPUs=4 State=UNKNOWN NodeName=wwhpc2 NodeAddr=128.197.115.7 CPUs=4 State=UNKNOWN NodeName=wwhpc3 NodeAddr=128.197.115.176 CPUs=4 State=UNKNOWN NodeName=wwhpc4 NodeAddr=128.197.115.17 CPUs=4 State=UNKNOWN NodeName=wwhpc5 NodeAddr=128.197.115.9 CPUs=4 State=UNKNOWN NodeName=wwhpc6 NodeAddr=128.197.115.15 CPUs=4 State=UNKNOWN |
명시적으로 NodeAddr IP addresses를 적고나서 저장하고 나온다.
아래 전체 slurm.conf 파일이다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | # slurm.conf file generated by configurator easy.html. # Put this file on all nodes of your cluster. # See the slurm.conf man page for more information. # ControlMachine=wwhpc3 ControlAddr=128.197.115.176 # #MailProg=/bin/mail MpiDefault=none #MpiParams=ports=#-# ProctrackType=proctrack/pgid ReturnToService=1 SlurmctldPidFile=/var/run/slurmctld.pid #SlurmctldPort=6817 SlurmdPidFile=/var/run/slurmd.pid #SlurmdPort=6818 SlurmdSpoolDir=/var/spool/slurmd SlurmUser=slurm #SlurmdUser=root StateSaveLocation=/var/spool/slurmctld SwitchType=switch/none TaskPlugin=task/none # # # TIMERS #KillWait=30 #MinJobAge=300 #SlurmctldTimeout=120 #SlurmdTimeout=300 # # # SCHEDULING FastSchedule=1 SchedulerType=sched/backfill #SchedulerPort=7321 SelectType=select/linear # # # LOGGING AND ACCOUNTING AccountingStorageType=accounting_storage/none ClusterName=buhpc #JobAcctGatherFrequency=30 JobAcctGatherType=jobacct_gather/none #SlurmctldDebug=3 SlurmctldLogFile=/var/log/slurmctld.log #SlurmdDebug=3 SlurmdLogFile=/var/log/slurmd.log # # # COMPUTE NODES NodeName=wwhpc1 NodeAddr=128.197.115.158 CPUs=4 State=UNKNOWN NodeName=wwhpc2 NodeAddr=128.197.115.7 CPUs=4 State=UNKNOWN NodeName=wwhpc3 NodeAddr=128.197.115.176 CPUs=4 State=UNKNOWN NodeName=wwhpc4 NodeAddr=128.197.115.17 CPUs=4 State=UNKNOWN NodeName=wwhpc5 NodeAddr=128.197.115.9 CPUs=4 State=UNKNOWN NodeName=wwhpc6 NodeAddr=128.197.115.15 CPUs=4 State=UNKNOWN PartitionName=debug Nodes=buhpc[1-6] Default=YES MaxTime=INFINITE State=UP |
이제 서버노드는 slurm.conf를 잘 가지고 있다. 이를 다른 client에도 보내야 한다.
scp slurm.conf root@1.wwhpc.com/etc/slurm/slurm.conf
scp slurm.conf root@2.wwhpc.com/etc/slurm/slurm.conf
scp slurm.conf root@4.wwhpc.com/etc/slurm/slurm.conf
scp slurm.conf root@5.wwhpc.com/etc/slurm/slurm.conf
scp slurm.conf root@6.wwhpc.com/etc/slurm/slurm.conf
이제 서버노드를 설정하자, wonwooddo. 모든 노드들이 올바른 configuration 과 file을 가지고 있어야 한다.
mkdir /var/spool/slurmctld
chown slurm: /var/spool/slurmctld
chmod 755 /var/spool/slurmctld
touch /var/log/slurmctld.log
chown slurm: /var/log/slurmctld.log
touch /var/log/slurm_jobacct.log /var/log/slurm_jobcomp.log
chown slurm: /var/log/slurm_jobacct.log /var/log/slurm_jobcomp.log
이제 컴퓨팅 노드들을 설정하자 wwhpc[1-6]. 모든 컴퓨팅 노드들이 똑같은 설정을 가지고 있어야 한다.
mkdir /var/spool/slurmd
chown slurm: /var/spool/slurmd
chmod 755 /var/spool/slurmd
touch /var/log/slurmd.log
chown slurm: /var/log/slurmd.log
slurmd 잘 설정되어있는지 아래 명령어로 확인하자
slurmd -C
You should get something like this:
ClusterName=(null) NodeName=buhpc3 CPUs=4 Boards=1 SocketsPerBoard=2 CoresPerSocket=2 ThreadsPerCore=1 RealMemory=7822 TmpDisk=45753
UpTime=13-14:27:52
노드간에 방화벽이 막혀있을거다. 그래서 wonwooddo 마스터노드뺴곤 다 방화벽을 풀어주자
systemctl stop firewalld
systemctl disable firewalld
서버노드에서는, wonwooddo, Slurm이 사용하는 default port를 열어준다.
firewall-cmd --permanent --zone=public --add-port=6817/udp
firewall-cmd --permanent --zone=public --add-port=6817/tcp
firewall-cmd --permanent --zone=public --add-port=6818/tcp
firewall-cmd --permanent --zone=public --add-port=6818/tcp
firewall-cmd --permanent --zone=public --add-port=7321/tcp
firewall-cmd --permanent --zone=public --add-port=7321/tcp
firewall-cmd --reload
만약 포트가 안열린다면, 테스트를 위한 firewalld 방화벽을 멈춰라. 그리고 모든 cluster의 clocks sync 가 잘되는지 확인해야한다.
모든 노드에:
yum install ntp -y
chkconfig ntpd on
ntpdate pool.ntp.org
systemctl start ntpd
clocks이 synced되어야한다, 그러면 Slurm을 시작할수있다!! 컴퓨팅노드에서는 wwhpc[1-6]:
systemctl enable slurmd.service
systemctl start slurmd.service
systemctl status slurmd.service
(만약 에러가 뜬다면:
서버노드에서는 wwhpc3:
systemctl enable slurmctld.service
systemctl start slurmctld.service
systemctl status slurmctld.service
slurmd와 slurmctld 를 확인해보면 잘되었는지 안되었는지 확인할수 있다. 만약 문제가 되면 로그파일을 보자!
Compute node bugs: tail /var/log/slurmd.log
Server node bugs: tail /var/log/slurmctld.log
Use Slurm
컴퓨팅 노드 확인
scontrol show nodes
-N 은 얼마만큼의 컴퓨팅 노드를 쓸지 정한다. 서버노드,. wwhpc3에서 작업을 던지려면:
srun -N5 /bin/hostname
wwhpc3
wwhpc2
wwhpc4
wwhpc5
wwhpc1
큐의 작업확인하려면:
scontrol show jobs
JobId=16 JobName=hostname
UserId=root(0) GroupId=root(0)
Priority=4294901746 Nice=0 Account=(null) QOS=(null)
JobState=COMPLETED Reason=None Dependency=(null)
Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0
RunTime=00:00:00 TimeLimit=UNLIMITED TimeMin=N/A
SubmitTime=2016-04-10T16:26:04 EligibleTime=2016-04-10T16:26:04
StartTime=2016-04-10T16:26:04 EndTime=2016-04-10T16:26:04
PreemptTime=None SuspendTime=None SecsPreSuspend=0
Partition=debug AllocNode:Sid=buhpc3:1834
ReqNodeList=(null) ExcNodeList=(null)
NodeList=buhpc[1-5]
BatchHost=buhpc1
NumNodes=5 NumCPUs=20 CPUs/Task=1 ReqB:S:C:T=0:0:*:*
TRES=cpu=20,node=5
Socks/Node=* NtasksPerN:B:S:C=0:0:*:* CoreSpec=*
MinCPUsNode=1 MinMemoryNode=0 MinTmpDiskNode=0
Features=(null) Gres=(null) Reservation=(null)
Shared=0 Contiguous=0 Licenses=(null) Network=(null)
Command=/bin/hostname
WorkDir=/root
Power= SICP=0
script로 작업을 제출하려면 script를 작성하고 아래와같이 한다
sbatch -N2 script-file
Slurm has a lot of useful commands. You may have heard of other queuing tools like torque. Here’s a useful link for the command differences: http://www.sdsc.edu/~hocks/FG/PBS.slurm.html
Accounting in Slurm
We’ll worry about accounting in Slurm with MariaDB for next time. Let me know if you encounter any problems with the above steps!