CentOS 7 安装Slurm

1. 前期准备

1.1 关闭SELinux

# vi /etc/sysconfig/selinux
        SELINUX=disabled
# reboot
# getenforce(查看SELinux状态)

1.2 关闭 Firewall

# systemctl stop firewalld.service
# systemctl disable firewalld.service

1.3 安装EPEL Repo

# yum -y install epel-release
  • 查看仓库状态
# yum repolist

1.4 安装axel与yum-axelget

# yum install axel yum-axelget

1.5 安装与配置NTP服务

安装与配置时间同步NTP服务,运行下列命令:

# yum install ntp -y
# systemctl enable ntpd.service
# ntpdate pool.ntp.org
# systemctl start ntpd

1.6 安装与配置NIS和NFS服务

  • 注意:Master Node必须先完成NIS server+NFS server的安装与配置,然后进行Compute Nodes的NIS client+NFS client的安装与配置。

2. Master Node安装Slurm

2.1 安装MariaDB

此处推荐下载离线包进行MariaDB的安装。如果进行再现安装,请先进行2.1.1步骤后,在terminal键入yum install -y MariaDB-server即可。

2.1.1 设置MariaDB.repo文件

  • 推荐离线安装与在线安装都进行设置

打开/etc/yum.repos.d/,新建MariaDB.repo文件

# cd /etc/yum.repos.d/
# vi MariaDB.repo

打开https://downloads.mariadb.org/mariadb/repositories/,选择CentOS版本后,看到如下类似的的内容,在文件中粘贴内容,退出保存。

# MariaDB 10.2 CentOS repository list - created 2017-07-17 09:59 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

2.1.2 下载,解压与安装

下载离线包,解压并进行安装

# axel -n 10 https://downloads.mariadb.com/MariaDB/mariadb-10.2.7/yum/rhel/mariadb-10.2.7-rhel-7-x86_64-rpms.tar
# tar xvf mariadb-10.2.7-rhel-7-x86_64-rpms.tar
# cd mariadb-10.2.7-rhel-7-x86_64-rpms/
# yum localinstall -y MariaDB-* galera-25.3.20-1.rhel7.el7.centos.x86_64.rpm

2.1.3 配置MariaDB

# service mysql start
# mysql_secure_installation
# systemctl enable mariadb.service
# systemctl status mariadb.service
# mysql -u root -p

2.2 安装Slurm

2.2.1 创建全局用户

在创建用户和用户组前,需要键入命令vi /etc/group查看用户组是否冲突

  • 注意:需要确保Master Node和Compute Nodes的UID和GID相同,如果未开启NIS和NFS服务,推荐进行以下步骤。
# export MUNGEUSER=1190
# 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=1191
# groupadd -g $SlurmUSER slurm
# useradd -m -c "Slurm workload manager" -d /var/lib/slurm -u $SlurmUSER -g slurm -s /bin/bash slurm
# cd /var/yp
# make

2.2.2 安装MUNGE

安装MUNGE进行身份验证。确保集群中的所有节点具有相同的munge.key。确保Munge的守护程序munged在Slurm的守护进程之前启动。

  • 在所有节点安装MUNGE rpms,安装rng-tools来正确创建密钥:
# yum install munge munge-libs munge-devel -y
# yum install rng-tools -y
# rngd -r /dev/urandom

2.2.3 配置MUNGE

2.2.3.1 创建全局密钥

在Master Node进行设置,创建一个在每个结点全局使用的密钥。

# /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
2.2.3.2 密钥同步

密钥创建成功后,需要将该密钥发送到所有计算节点:

# scp -p /etc/munge/munge.key root@192.168.118.195:/etc/munge
# ...
2.2.3.3 权限设置

设置正确的所有权限和模式

# chown -R munge: /etc/munge/ /var/log/munge/
# chmod 0700 /etc/munge/ /var/log/munge/
# chmod 0711 /var/lib/munge/
2.2.3.4 启动MUNGE服务
# systemctl start munge
# systemctl status munge
# systemctl enable munge
2.2.3.5 测试MUNGE服务
# munge -n
# munge -n | unmunge
# munge -n | ssh 192.168.118.195 unmunge # Master Node进行测试
# remunge

2.2.4 Slurm的安装与配置

2.2.4.1 安装依赖包
# 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
2.2.4.2 下载Slurm安装包
# wget https://www.schedmd.com/downloads/latest/slurm-17.02.6.tar.bz2
2.2.4.3 安装rpmbuild编译Slurm
# yum install rpm-build
# rpmbuild -ta slurm-17.02.6.tar.bz2

如果rpmbuild出现如下错误:

error: Failed build dependencies:
        perl(ExtUtils::MakeMaker) is needed by slurm-17.02.6-1.el7.centos.x86_64

利用cpanm安装Perl模块后再进行rpmbuild。

# yum install cpanm*
2.2.4.4 安装Slurm
# cd /root/rpmbuild/RPMS/x86_64
# yum --nogpgcheck localinstall slurm-*
2.2.4.5 配置Slurm

进入http://slurm.schedmd.com/configurator.easy.html,按照如下范例进行自定义设置:

ControlMachine: mhc
ControlAddr: 192.168.118.163
NodeName: cas01
NodeAddr: 192.168.118.195
CPUs: 1
Sockets: 2
RealMemory: 27145 # terminal键入free -m查看,最好设置为实际值的85%
StateSaveLocation: /var/spool/slurmctld
SlurmctldLogFile: /var/log/slurmctld.log
SlurmdLogFile: /var/log/slurmd.log
AccountingStorageType=accounting_storage/mysql
ClusterName: mhc
JobAcctGatherType=jobacct_gather/linux

点击Submit确认后,将页面的配置信息复制到slurm.conf中,保存退出;

# cd /etc/slurm
# vim slurm.conf
2.2.4.6 同步slurm.conf文件

设置正确的Master Node节点的slurm.conf发送给其他的Compute Node,同时对Compute Node进行配置;

# scp -p /etc/slurm/slurm.conf root@192.168.118.195:/etc/slurm/
# ...
2.2.4.7 权限设置

确保Master Node具有所有正确的配置和文件

# 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
2.2.4.8 测试slurmd配置

查看slurmd配置是否正确

# slurmd -C
2.2.4.9 开启slurmctld服务

开启Master Node的slurmctld服务

# systemctl start slurmctld.service
# systemctl status slurmctld.service
# systemctl enable slurmctld.service

2.3 安装Slurm Accounting

Accounting records可以为slurm收集每个作业步骤的信息。Accounting records可以写入一个简单的文本文件或数据库。

通过将文本文件指定为Accounting存储类型从而可以轻松地将数据存储到文本文件中。但是这个文件会变得越来越大,难以使用。因此,最简单且推荐的方法是使用数据库来存储信息。而Mysql是目前唯一支持的数据库。

2.3.1 创建slurm_acct_db数据库

# mysql -u root -p

slurm_acct_db数据库的配置:

> grant all on slurm_acct_db.* to ‘slurm’@’192.168.118.%’ identified by ‘!QAZ2wsx3edc’ with grant option
> grant all on slurm_acct_db.* to ‘slurm’@’localhost’ identified by ‘!QAZ2wsx3edc’ with grant option;
> SHOW VARIABLES LIKE ‘have_innodb’;
> create database slurm_acct_db;
> quit;

2.3.2 配置slurmdbd.conf文件

# cp /etc/slurm/slurmdbd.conf.example /etc/slurm/slurmdbd.conf
# chown slurm: /etc/slurm/slurmdbd.conf
# chmod 600 /etc/slurm/slurmdbd.conf
# mkdir /var/log/slurm/
# touch /var/log/slurm/slurmdbd.log
# chown slurm: /var/log/slurm/slurmdbd.log
# vi /etc/slurm/slurmdbd.conf
LogFile=/var/log/slurm/slurmdbd.log
DbdHost=localhost
DbdPort=6819
slurmUser=slurm
StorageHost=localhost
StoragePass=!QAZ2wsx3edc
StorageLoc=slurm_acct_db

2.3.3 创建一个正确的systemd文件

# cp /usr/lib/systemd/system/slurmctld.service /usr/lib/systemd/system/slurmd.service /usr/lib/systemd/system/slurmdbd.service /etc/systemd/system/
# cat /etc/systemd/system/slurmctld.service

2.3.4 同步slurm.conf文件

修改slurm.conf配置文件,同时同步到Compute Node

# vi /etc/slurm/slurm.conf

AccountingStorageType=accounting_storage/mysql后添加这几行

AccountingStorageHost=localhost
AccountingStoragePort=3306
AccountingStoragePass=!QAZ2wsx3edc
AccountingStorageUser=slurm

2.3.5 启动SlurmDBD服务

# systemctl enable slurmdbd
# systemctl start slurmdbd
# systemctl status slurmdbd

3. Compute Node安装Slurm

3.1 安装Slurm

  • 注意:在下面的步骤进行之前,需确保集群节点的NIS和NFS服务已经安装配置完成。

3.1.1 安装MUNGE

安装MUNGE进行身份验证

# yum install munge munge-libs munge-devel -y

3.1.2 设置权限与启动MUNGE服务

设置Compute Node的MUNGE权限和启动MUNGE服务

在下列操作之前,Master Node应该将munge.key传到Compute Nodes

# chown -R munge: /etc/munge/ /var/log/munge/
# chmod 0700 /etc/munge/ /var/log/munge/
# systemctl start munge
# systemctl enable munge

3.1.3 测试MUNGE服务

在Master Node测试访问Compute Node

# munge -n | ssh 192.168.118.195 unmunge
# ...

3.1.4 Slurm的安装与配置

3.1.4.1 安装依赖包
# 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
3.1.4.2 安装Slurm
# scp root@192.168.118.163:/root/rpmbuild/RPMS/x86_64/* /root/rpmbuild/RPMS/x86_64/
# cd /root/rpmbuild/RPMS/x86_64
# yum --nogpgcheck localinstall slurm-*
3.1.4.3 确保正确的配置

确保Compute Node具有所有正确的配置和文件

在下列操作之前,确保Master Node将slurm.conf发送给其他的Compute Nodes

# 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
3.1.4.4 开启slurmd服务

开启Compute Node的slurmd服务

# systemctl start slurmd.service
# systemctl status slurmd.service
# systemctl enable slurmd.service

Compute Nodes中出现Failed to start slurm node daemon.时候,同时cat /var/log/slurm.log后看到cannot create proctrack context for proctrack/cgroup错误的时候,执行:

# cd /etc/slurm/
# cp cgroup.conf.example cgroup.conf
# cp cgroup_allowed_devices_file.conf.example cgroup_allowed_devices_file.conf

4. Slurm 测试指令

4.1 slurm测试

4.1.1 显示所有Compute Nodes

# scontrol show nodes

如果Compute Nodes的State=DOWN,则如下执行,将状态变成IDLE

# scontrol update nodename=cas01 state=resume

4.1.2 简单测试执行

# srun -N4 hostname

4.1.3 查看节点

# scontrol show nodes

4.1.4 显示作业数量

# scontrol show jobs

4.1.5 使用脚本

# sbatch -N2 script-file

4.2 常见API

  • sacct 被用来汇报工作或者解释激活的或完成的工作的信息的工作步骤。
  • salloc 被用来实时的分配给一个工作任务资源。经常地这被用来分配资源并生成一个Shell(命令解释程序)。这个Shell程序然后被用来执行srun命令运行平行的任务们。
  • sattach 被用来将标准输入输出以及错误的附加的信号能力附着于目前正在执行的工作或工作步骤。这既可以被附着也可以将其从多任务线程中分离。
  • sbatch 被用来提交一段工作脚本以进行后续的执行,这个脚本经常性地包括一个或多个srun命令去运行平行任务。
  • sbcast 被用来将一个文件从当地硬盘转移到当地硬盘上被分配到这个工作的节点上。这可以被用来高效地使用(diskless)不怎么使用硬盘的计算节点或相对于一个共享文件系统而言提供更好的性能。
  • scancel被用来取消一个挂起或正在执行的工作或工作步骤。他能够被用来发送任意信号给所有与正在执行的工作或工作步骤相关的进程。
  • scontrol 是管理性的工具用来视察并或修改slurm状态。记住许多scontrol命令只能被管理员root权限执行。
  • sinfo 记录了由slurm管理的(partition)分区和节点的状态,它有广泛多样的如过滤、排序、格式化等的选项。
  • smap 记录了由slurm管理的工作、分区和节点的状态信息,但图像化显示的信息业反映了网络拓扑结构。
  • strigger 被用来设置、获得或视察事件触发器。事件触发器包括了诸如节点going down(挂死)或工作任务接近了它们的限制事件。
  • sview 是一个图像化的用户界面用来获得并更新由slurm管理的工作、分区以及节点的状态信息。

5. 参考资料

  1. https://www.slothparadise.com/how-to-install-slurm-on-centos-7-cluster/
  2. https://wiki.fysik.dtu.dk/niflheim/Slurm_database
  3. https://hrouhani.org/slurm-workload-manager/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容