slurm-16.05.3任务调度系统部署与测试(1)

1.概述
2.同步节点时间
3.下载并解压文件
4.编译安装munge-0.5.12
5.配置munge
6.编译安装slurm-16.05.3
7.配置slurm
8.配置MySQL数据库环境
9.启动slurm集群
10.总结

1.概述

本博客通过VMware workstation创建了虚拟机console,然后在console内部创建了8台kvm虚拟机,使用这8台虚拟机作为集群,来部署配置和测试slurm任务调度系统

配置为4核心CPU,8G内存,20G系统盘,20G数据盘挂载到/opt,10G数据盘挂载到/home,一块NAT网卡模拟带外,一块Host only网卡模拟专用内网

为了使console能够同时管理8台kvm虚拟机,需要做一下部署和操作:

  • 部署console到8台虚拟机node11-node18的免密码登陆,通过sshpass+shell的for循环实现
  • 部署console为NTP服务器,将node11-node18的NTP指向为console
  • 部署console为LDAP服务器,能够实现用户的全局管理和认证
  • 格式化数据盘之后,将文件系统/opt,/home通过NFS共享给node11-node18

注:

这部分内容涉及较多,如VMware workstation虚拟机创建,KVM虚拟机创建,创建NFS全局文件系统,多节点免密码登陆,NTP服务器和LDAP服务器部署等,这里为避免内容喧宾夺主,具体细节不多加描述,可参见本人之前博客,或在网上检索各类优秀教程。

2.同步节点时间

将console部署NTP服务器周,通过计划任务来同步node[11-18]时间

pdsh -w node[11-18] ntpdate 192.168.80.8

执行crontab -e,输入:

*/5 * * * *  pdsh -w node[11-18] "ntpdate 192.168.80.8;hwclock --systohc"

3.下载并解压文件

本博客使用的是:

munge-0.5.12

slurm-16.05.3(该版本已经无法下载,可以下载更高版本)

4.编译安装munge-0.5.12

创建安装目录:mkdir -p /opt/munge/munge-0.5.12

解压:unzip munge-munge-0.5.12.zip

编译:cd unzip munge-munge

帮助:./configure --help,按照以下参数编译:

注:因为采用将munge安装在全局文件系统NFS上,为了保证每个节点都保存不同的状态,否则会造成互斥,而无法启动进程,因此将--localstatedir指定到不同的目录,这里各个节点的根文件系统的var目录

./configure --prefix=/opt/munge/munge-0.5.12 --sysconfdir=/opt/munge/munge-0.5.12/etc --localstatedir=/var 
编译报错(1):
checking which cryptographic library to use... failed
configure: error: unable to locate cryptographic library
解决如下:
yum -y install openssl openssl-devel

编译安装:make && make install

查看安装 :

[[email protected] munge-0.5.12]# pwd
/opt/munge/munge-0.5.12
[[email protected] munge-0.5.12]# ls
bin  etc  include  lib  sbin  share
[[email protected] munge-0.5.12]#

5.配置munge

1.创建munge.key,并修改权限:

cd /opt/munge/munge-0.5.12/etc

echo "helloeveryone,I‘ammungekeyonkvmcluster." > munge.key && chmod 600 munge.key

注:munge.key的内容必须大于32字节,否则在启动munged时会提示:munged: Error: Keyfile must be at least 32 bytes

2.在所有节点上创建munge运行时所需要的目录:

pdsh -w node[11-18] mkdir -p /var/{log,run,lib}/munge

3.修改munge运行进程的用户为超级用户root

cd /opt/munge/munge-0.5.12/etc/rc.d/init.d

vim munge修改内容如下:

prefix="/opt/munge/munge-0.5.12"
exec_prefix="${prefix}"
sbindir="${exec_prefix}/sbin"
sysconfdir="/opt/munge/munge-0.5.12/etc"
localstatedir="/var"
SERVICE_NAME="MUNGE"
DAEMON_EXEC="$sbindir/munged"
PIDFILE="$localstatedir/run/munge/munged.pid"
USER="root"
GROUP="root"
VARRUNDIR="$localstatedir/run/munge"

4.修改启动脚本的配置文件

vim /opt/munge/munge-0.5.12/etc/sysconfig/munge,内容如下:

DAEMON_ARGS="--key-file /opt/munge/munge-0.5.12/etc/munge/munge.key --num-threads 1"
USER="root"
GROUP="root"

5.创建环境变量添加脚本并拷贝到各个节点

vim /etc/profile.d/optenv.sh

#!/bin/bash
export PATH=$PATH:/opt/munge/munge-0.5.12/sbin

拷贝该脚本至所有节点

for i in $(seq 11 18)
do
 scp /etc/profile.d/optenv.sh node$i:/etc/profile.d
done

6.节点启动munged

pdsh -w node[11-18] munged

pdsh -w node[11-18] ps -ef|grep munge|grep -v grep

6.编译安装slurm-16.05.3

1.创建安装目录:

mkdir -p /opt/slurm/slurm-16.05.3

2.编译安装,执行如下:

./configure --prefix=/opt/slurm/slurm-16.05.3/ --sysconfdir=/opt/slurm/slurm-16.05.3/etc
--with-munge=/opt/munge/munge-0.5.12/

make && make install

3.创建其他所需目录

cd /opt/slurm/slurm-16.05.3 && mkdir etc log state

  • etc:用于放置slurmctld,slurmdbd的配置文件等
  • log:用户存放slurmctld,slurmdbd的日志文件等
  • state:用于存放作业状态文件等

4.创建slurmadmin用户,并修改相应目录权限

注:slurmadmin用户用作运行slurmctld,slurmdbd等进程的用户,需要手动创建

同时修改state的属主为slurmadmin,同时增加log目录的slurmadmin写权限

chown -R slurmadmin:slurmadmin state && setfacl -R -m u:slurmadmin:rwx log

7.配置slurm

注:

slurm集群中,存在slurmctld,slurmdbd,slurmd三种守护进程。本博客中做以下规定:

node11运行slurmctld(master),slurmdbd

node12运行slurmctld(backup)

node13-18运行slurmd

同时也在node11上配置MySQL,运行mysqld进程。

在实际应用过程中,可以将slurmctld(master),slurmctld(backup),slurmdbd,mysqld运行在不同节点,只要在编辑配置文件过程中,正确指定即可。

1.创建slurm.conf,如下:

#slurm集群名称
ClusterName=myslurm
#slurm主控制器主机名
ControlMachine=node11
#slurm从控制器主机名
BackupController=node12
#slurm进程用户
SlurmUser=slurmadmin
#slurmd节点守护进程用户
SlurmdUser=root
#slurmctld控制器端口
SlurmctldPort=6817
#slurmd节点守护进程端口
SlurmdPort=6818
#slurm通信认证
AuthType=auth/munge

SwitchType=switch/none
MpiDefault=none
#slurm任务状态保存目录
StateSaveLocation=/opt/slurm/slurm-16.05.3/state
#slurmd守护进程日志保存
SlurmdSpoolDir=/var/log/slurmd
#slurmctld的pid存放
SlurmctldPidFile=/var/run/slurmctld.pid
#slurmd守护进程的pid文件存放
SlurmdPidFile=/var/run/slurmd.pid

TaskPlugin=task/cgroup
ProctrackType=proctrack/cgroup
#第一个jobid号
FirstJobId=1000
#最大的jobid号
MaxJobId=50000
ReturnToService=2

SlurmctldTimeout=300
SlurmdTimeout=300
TCPTimeout=10
InactiveLimit=0
MinJobAge=300
KillWait=30
Waittime=0
SchedulerType=sched/backfill
SelectType=select/linear

FastSchedule=1
DebugFlags=NO_CONF_HASH
SlurmctldDebug=3
#slurmctld控制器守护进程的日志存放,全局文件系统
SlurmctldLogFile=/opt/slurm/slurm-16.05.3/log/slurmctldlogfile
SlurmdDebug=3
#slurmd节点守护进程的日志文件,节点本地
SlurmdLogFile=/var/log/slurmdlogfile
#slurm运行插件的路径
PluginDir=/opt/slurm/slurm-16.05.3/lib:/opt/slurm/slurm-16.05.3/lib/slurm
#jod限制类型
JobAcctGatherType=jobacct_gather/cgroup
#计费等配置
#采用slurmdbd守护进程进行存储
AccountingStorageType=accounting_storage/slurmdbd
#运行slurmdbd进程的节点主机名
AccountingStorageHost=node11
#slurmdbd运行节点的端口
AccountingStoragePort=6819
AccountingStorageEnforce=limints,qos
#account存放的库
AccountingStorageLoc=slurm_acct_db
#运行slurmdbd的数据库用户
AccountingStorageUser=slurmadmin
AccountingStoragePass=/var/run/munge/munge.socket.2
AcctGatherNodeFreq=180
#资源配置,包括节点配置,队列(分区)配置等
NodeName=node[11-18] CPUs=4 RealMemory=300 sockets=2 CoresPerSocket=2 ThreadsPerCore=1 State=UNKNOWN
PartitionName=q_x86_1 Nodes=node[11-18] MaxTime=INFINITE State=UP DEFAULT=YES AllowAccounts=ALL

2.创建slurmdbd.conf,如下:

PurgeEventAfter=1month
PurgeJobAfter=36month
PurgeResvAfter=1month
PurgeStepAfter=1month
PurgeSuspendAfter=1month
DebugLevel=debug5
LogFile=/opt/slurm/slurm-16.05.3/log/slurmdbd.log
PidFile=/var/run/slurmdbd.pid
AuthType=auth/munge
AuthInfo=/var/run/munge/munge.socket.2
DbdHost=node11
DbdPort=6819
SlurmUser=slurmadmin
StorageType=accounting_storage/mysql
StorageHost=node11
StorageLoc=slurm_acct_db
StoragePort=3306
StorageUser=slurmadmin
StoragePass=liwanliang

3.创建cgroup.conf,如下:

#CgroupReleaseAgentDir=="/etc/slurm/cgroup"
CgroupAutomount=yes
CgroupMountpoint=/cgroup
CgroupReleaseAgentDir=="/tmp/slurm"
ConstrainCores=yes
TaskAffinity=no
ConstrainRAMSpace=no
MaxRAMPercent=98
AllowedRAMSpace=96

8.配置MySQL数据库环境

根据配置文件,需要在node11部署mysql服务器,操作如下:

1.安装MySQL:yum -y install mysql mysql-client mysql-server mysql-libs

2.启动MySQL,并设置开机自启动:service mysqld start && chkconfig mysql on

3.配置MySQL权限:执行mysql进入数据库,配置root登陆权限:

use mysql;
delete from user where user = ‘ ‘ and host = ‘localhost‘ ;
delete from user where user = ‘ ‘ and host = ‘node11‘;
grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘liwanliag‘;
create database slurm_acct_db;
grant all privileges on slurm_acct_db.* to ‘slurmadmin‘@‘node11‘ identified by ‘liwanliang‘;
flush privileges;

9.启动slurm集群

1.启动munged

console执行:pdsh -w ssh:node[11-18] munged

2.启动slurmdbd

console执行:ssh node11 slurmdbd

注意,此时需要在数据库中添加集群

执行: sacctmgr add cluster myslurm

3.启动slurmctld

console执行:ssh node11 slurmctld

4.验证集群信息

console执行:sinfo

注:此时console必须也munged,否则会报错。

此时显示:q_x86_1* up infinite 8 down* node[11-18]

5.启动节点的slurmd

console执行:pdsh -w ssh:node[11-18] slurmd

注:

此时显示:q_x86_1* up infinite 8 idle node[11-18]

6.测试提交

console执行:srun -n 32 hostname

10.总结

本博客只是slurm集群的基本部署和测试。在部署过程中遇到两个比较棘手的问题:

1.munge编译过程中的没有安装mysql-devel环境,导致在编译slurm的时候不能够编译相应的插件。此时通过yum -y install msyql-devel安装依赖环境,然后重新编译解决

2.在所有环境部署好之后,通过sinfo发现有6个节点总是drain状态,这个状态表示节点通过slurmd获取的节点配置和配置文件中的不相同,尤其是节点的CPU的参数。最后通过重新配置参数,然后清空state目录下的所有文件,同时修改log目录权限为777 解决

下篇博客主要会测试一些其他复杂的功能。

时间: 2024-10-09 19:56:29

slurm-16.05.3任务调度系统部署与测试(1)的相关文章

Slurm任务调度系统部署和测试(1)

1. 概述1.1 节点信息2. 节点准备3. 部署NTP服务器4. 部署LDAP服务器5. 部署Munge认证服务6. 部署Mysql数据库服务6. 部署slurm6.1 slurm下载6.2 解压编译安装 1. 概述 slurm任务调度系统,主要应用在HPC集群资源管理和任务调度.具体信息参见slurm官方网站:https://slurm.schedmd.com/ 部署Slurm任务调度系统,需要部署NTP内网时间同步服务器,LDAP全局认证服务器,Mysql数据库服务器 本篇博客主要记录如何

如何构建延迟任务调度系统

一.需求目标 1.需求描述之前笔者接触过一些营销业务场景,比如说: 用户注册未登录过APP第二天早上10点发一条营销短信促活红包过期前两天短信通知,下午16:00发送等等定时任务处理业务.采用的技术方案是定时任务扫数据汇总表,分页读取一定数量然后处理然而随着业务的发展,业务多元化,遇到了以下场景: 拼团砍价活动过期前半小时提醒订单提交半小时内没有完成支付,订单自动取消,库存退还用户几天内没有操作过系统,发放激活短信以上场景处理时间不是固定的某个点,而是业务发生的时间推迟一段时间,针对以上的业务场

Elasticstack 5.1.2 集群日志系统部署及实践

Elasticstack 5.1.2 集群日志系统部署及实践 一.ELK Stack简介 ELK Stack 是Elasticsearch.Logstash.Kibana三个开源软件的组合,在实时数据检索和分析场合,三者通常是配合共用的. 可参考:https://www.elastic.co/products 二.Elasticstack重要组件 Elasticsearch: 准实时索引 Logtash: 收集数据,配置使用 Ruby DSL Kibana 展示数据,查询聚合,生成报表 Kafk

基于suse linux系统的cacti系统部署——rpm包方式

豆丁 http://www.docin.com/p-191889788.html rpm包方式:啊扬--沙迳:2010-12-1:更改:2011/5/16:一.Cacti的简介(来源:网络):Cacti是通过snmpget来获取数据,使用R:Cacti的发展是基于让RRDTool使用者更方:cacti是用php语言实现的一个软件,它的主要:MySQL配合PHP程序存储一些变量数据并对变量 123 基于suse linux系统的cacti系统部署 ——rpm包方式 啊扬--沙迳 2010-12-1

分布式工作流任务调度系统Easy Scheduler正式开源

分布式工作流任务调度系统Easy Scheduler正式开源 1.背景 在多位技术小伙伴的努力下,经过近2年的研发迭代.内部业务剥离及重构,也经历一批种子用户试用一段时间后,EasyScheduler终于迎来了第一个正式开源发布版本 -- 1.0.0.相信做过数据处理的伙伴们对开源的调度系统如oozie.azkaban.airflow应该都不陌生,在使用这些调度系统中可能会有这样的体验:比如配置工作流任务不能可视化.任务的运行状态不能实时在线查看.任务运行时不能暂停.不能支持参数传递.不能补数.

MDT2012部署系列之12 WDS之PXE启动系统部署

(十四).测试PXE启动系统部署 经过前面两个章节的WDS服务器安装与配置,我们完成了对于PXE启动的前期准备工作,下面我们来测试一下,从PXE启动进行系统的安装. 1.首先将对应的引导光盘移除,设置网络引导为第一启动项,在下图中我们可以看到对应的获得的IP地址,这时候我们按F12键从PXE启动 2.这时候我们可以看到刚刚添加的PE系统的映像名称,直接按回车 3.这里我们可以看到正在加载192.168.1.203下的x86.wim映像 4.这时候我们可以看到对应的WDS服务器的网络流量会大幅度提

linux 任务调度 系统任务调度

linux  at 针对运行一次的任务 crontab   控制计划任务的命令 crond系统服务 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程, 与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具, 并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务, 如果有要执行的任务,则自动执行该任务. 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘.日志清理等.在/etc目录下有一个crontab文件

SCCM2012 R2系统部署时,客户端报0x80004005错误(2)

错误现象: 裸机部署过程中,报"Task Sequence:任务序列名 has failed with the error code(0x80004005)"错误,并生动重启计算机. 分析过程: 通过SCCM的"部署状态"查看此任务序列的部署过程: 解决方案: 通过查看任务序列的"部署状态"确定是任务序列配置的问题,接下来我们打开此任务序列.发现此任务序列的"应用操作系统"和"应用数据映像1"执行的操作都是

Linux系统部署规范v1.0

Linux系统部署规范v1.0 目的: 1.尽可能减少线上操作: 2.尽可能实现自动化部署: 3.尽可能减少安装服务和启动的服务: 4.尽可能使用安全协议提供服务: 5.尽可能让业务系统单一: 6.尽可能监控可监控的一切信息: 7.尽可能控制一切可控制的安全策略: 8.尽可能定期更新补丁修补漏洞: 具体规范: A. 帐户和口令 帐户: 1.为每个系统维护人员建立一个独立的普通权限帐号,为监控机建立监控帐号,分别用于日常系统维护和系统监控: 2.FTP 服务器配置虚拟帐号: 3.禁止除root 帐