zoukankan      html  css  js  c++  java
  • 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

    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-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一些具体的功能做测试

  • 相关阅读:
    数组排序 -- 冒泡排序
    数组自带的函数(方法)
    京东官网轮播图的实现
    鼠标单击元素输出对应元素的索引号
    JavaScript中获取HTML元素的方式
    JavaScript数组的2种定义方式
    this关键字
    JavaScript中对象的3种定义方式
    Hadoop完整搭建过程(三):完全分布模式(虚拟机)
    Hadoop完整搭建过程(二):伪分布模式
  • 原文地址:https://www.cnblogs.com/liwanliangblog/p/8051853.html
Copyright © 2011-2022 走看看