slurm任务调度系统部署和测试(一)
1.概述
本博客通过VMware workstation创建了虚拟机console,然后在console内部创建了8台kvm虚拟机,使用这8台虚拟机作为集群,来部署配置和测试slurm任务调度系统。
console虚拟机配置为:4核心CPU,8G内存,20G系统盘安装OS,20G数据盘挂载到/opt,10G数据盘挂载到/home,一块NAT网卡模拟带外,一块Host only网卡模拟专用内网
在使用console部署8台kvm虚拟机之后,需要做一下操作:
- 部署console到node11-18的免密码登陆,通过sshpass+shell实现
- 部署console为NTP服务器,同步node11-18的时间到console
- 部署console为LDAP服务器,能够实现全局用户认证
- 格式化数据盘,将/opt和/home通过NFS共享给node11-18
注:
上面这部分内容涉及较多,如VMware workstation部署虚拟机console,console虚拟机部署kvm虚拟机,创建并挂载NFS全局文件系统,console到多节点的免密码登陆,NTP和LDAP服务部署等,这里不做一一详述。
2.同步时间节点
将console部署为NTP服务器之后,通过定时执行同步任务来保证所有节点时间一致:
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.下载软件包
munged-0.5.12
slurm-16.05.3(该软件包因为安全漏洞问题,已经无法下载,可下载其他版本)
4.编译安装munge-0.5.12
1.创建安装目录:
mkdir -p /opt/munge/munge-0.5.12
2.解压:
unzip munge-munge-0.5.12.zip
3.编译:
cd munge-munge-0.5.12
./configure --prefix=/opt/munge/munge-0.5.12 --sysconfdir=/opt/munge/munge-0.5.12/etc --localstatedir=/var
make && make install
注:
此时编译报错:
checking which cryptographic library to use... failed
configure: error: unable to locate cryptographic library
解决如下:
yum -y install openssl openssl-devel
此时可以在/opt/munge/munge-0.5.12下,查看到munge的各类目录
5.配置munge
我希望munged在运行的时候,以root用户的身份运行(默认是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个字节以上,且文件权限为600方可
2.在所有需要部署slurmd的节点上创建munged运行需要的目录
pdsh -w node[11-18] mkdir -p /var/{log,run,lib}/munge
假如这三个目录为全局目录,即安装在/opt上的话,则节点不能够同时启动munged
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/sinb
拷贝至其他节点:
for i in $(seq 11 18)
do
scp /etc/profile.d/optevn.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/
--with-mysql_config=xxx
make && make install
3.创建其他所需目录
cd /opt/slurm/slurm-16.05.3 && mkdir etc log state
- etc:用于放置slurmctld,slurdbd的配置文件
- log: 用于存放slurmctld,sluedbd的日志文件
- state:用户存放作业状态的目录
4.创建slurmadmin用户,并修改相应目录权限
chown -R slurmadmin:slurmadmin state && chmod 777 log
7. 配置slurm
- 创建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-server mysql-client mysql-libs
2.启动MySQL
service mysqld start && chkconfig mysqld on
3.配置MySQL
use mysql;
delete from user where user = ' ' and host = 'localhost' ;
delete from user where user = ' ' and host = 'node11';
grant all privileges on *.* to 'root'@'localhost' identified by 'liwanliag';
grant all privileges on *.* to 'root'@'node11' identified by 'liwanliag';
grant all privileges on *.* to 'root'@'127.0.0.1' identified by 'liwanliag';
grant all privileges on *.* to 'root'@'192.168.80.11' 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.校对节点时间
2.启动munged进程
3.启动slurmdbd进程
ssh node11 slurmdbd
4.启动slurmctld进程
ssh node11 slurmctld
5.添加集群
sacctmgr add cluster myslurm
6.启动节点slurmd
pdsh -w node[11-18] slurmd
7.测试
sinfo
8.测试提交
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 解决。
在下一篇博客中,将会对slurm一些具体的功能做测试
slurm任务调度系统部署和测试(一)的更多相关文章
- Slurm任务调度系统部署和测试(源码)(1)
1. 概述1.1 节点信息2. 节点准备3. 部署NTP服务器4. 部署LDAP服务器5. 部署Munge认证服务6. 部署Mysql数据库服务7. 部署slurm7.1 创建slurm用户7.2 挂 ...
- slurm-16.05.3任务调度系统部署与测试(1)
1.概述2.同步节点时间3.下载并解压文件4.编译安装munge-0.5.125.配置munge6.编译安装slurm-16.05.37.配置slurm8.配置MySQL数据库环境9.启动slur ...
- LDAP-openldap服务部署和测试(YUM安装)
1. 概述2. 服务端部署过程2.1 软件包说明2.2 部署过程2.3 配置过程3. 测试4. 生成LDIF格式文件4.1 安装migrationtools工具4.2 用migrationtools生 ...
- 分布式任务调度系统xxl-job搭建
为解决分布式环境下定时任务的可靠性,稳定性,只执行一次的特性,我找到了个大众点评开源的分布式调度任务解决完整系统,下面我将一步步深入解读该系统,从基本的使用到源码的探究 下载 https://gith ...
- 分布式定时任务调度系统技术解决方案(xxl-job、Elastic-job、Saturn)
1.业务场景 保险人管系统每月工资结算,平安有150万代理人,如何快速的进行工资结算(数据运算型) 保险短信开门红/电商双十一 1000w+短信发送(短时汇聚型) 工作中业务场景非常多,所涉及到的场景 ...
- 分布式任务调度系统:xxl-job
任务调度,通俗来说实际上就是"定时任务",分布式任务调度系统,翻译一下就是"分布式环境下定时任务系统". xxl-job一个分布式任务调度平台,其核心设计目标是 ...
- Memcached 分布式缓存系统部署与调试
Memcache 分布式缓存系统部署与调试 工作机制:通过在内存中开辟一块区域来维持一个大的hash表来加快页面访问速度,和数据库是独立的;目前主要用来缓存数据库的数据;存放在内存的数据通过LRU算法 ...
- 消息中间件kafka+zookeeper集群部署、测试与应用
业务系统中,通常会遇到这些场景:A系统向B系统主动推送一个处理请求:A系统向B系统发送一个业务处理请求,因为某些原因(断电.宕机..),B业务系统挂机了,A系统发起的请求处理失败:前端应用并发量过大, ...
- 基于nginx+xxl-job+springboot高可用分布式任务调度系统
技术.原理讲解: <分布式任务调度平台XXL-JOB--源码解析一:项目介绍> <分布式任务调度平台XXL-JOB--源码解析二:基于docker搭建admin调度中心和execut ...
随机推荐
- 对Numpy广播操作的理解
1.首先检查两个矩阵维数是否相同,若不同,对维数少的补一.注意这里的维数不是指n行d列中的n和d的值,对于这种情况维数就是2.若一个两维的矩阵(n,d)和一个一维的数组(m,)相乘,补一操作就是将那个 ...
- Winsock网络编程笔记(2)----基于TCP的server和client
今天抽空看了一些简单的东西,主要是对服务器server和客户端client的简单实现. 面向连接的server和client,其工作流程如下图所示: 服务器和客户端将按照这个流程就行开发..(个人觉得 ...
- Windows环境下多线程编程原理与应用读书笔记(7)————事件及其应用
<一>事件 事件主要用于线程间传递消息,通过事件来控制一个线程是处于执行状态还是处于挂起状态. 事件和互斥量之间的差别: 事件主要用于协调两个或者多个线程之间的动作,使其协调一致,符合逻辑 ...
- HDU 6047 Maximum Sequence
Maximum Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 一款超好用轻量级JS框架——Zepto.js(上)
前 言 絮叨絮叨 之前我们介绍过JQuery怎么自定义一个插件,但没有详细介绍过JQuery,那么今天呢....我们还是不说JQuery,哈哈哈哈 但是今天我们介绍一款和JQuery超级像的一 ...
- absolute元素 text-align属性
text-align属性的元素可以有效作用于inline/inline-block水平的子元素,但是,text-align属性对应用了position:absloute/fixed声明的元素无效! ...
- 验证Oracle处理速度
(这是2009年写的东西了,在网上看到有人对数据库批量操作的'速度'比较关注,于是就把这篇老文章整理了一下) 一.环境及前提 在244上(一台稍好一些的机器,做了RAID,机械硬盘,Raid几忘了), ...
- 和为S的两个数
题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 思考 注 ...
- [转载] 使用Redis的Java客户端Jedis
转载自http://aofengblog.blog.163.com/blog/static/631702120147298317919/ 在实际的项目开发中,各种语言是使用Redis的客户端库来与Re ...
- 【转】Entity Framework 5.0系列之自动生成Code First代码
在前面的文章中我们提到Entity Framework的“Code First”模式也同样可以基于现有数据库进行开发.今天就让我们一起看一下使用Entity Framework Power Tools ...