开始使用
- 有关Slurm详细使用指导请参考Slurm产品文档。
- 该解决方案默认使用的Slurm版本:22.05.3,部署的Java版本:jdk1.8.0_202
- 已在Slurm内默认创建了名为cluster的集群名
- 该解决方案涉及的所有的业务端口均默认配置了同一子网可访问,如果另有需要,需根据实际情况修改安全组规则
- 涉及到的Slurm业务端口如下:
- 6817:Slurm管理节点的业务面端口
- 6818:Slurm计算节点的业务面端口
- 后续文档将展开Slurm的基础使用说明
安全组修改(可选)
- 修改初始密码。打开华为云服务器控制台,勾选以弹性云服务器名称为前缀的两台弹性云服务器,单击“关机”,关机成功后,单击“重置密码”,根据提示重置密码,单击“确定”后,开机即可正常使用。(建议分别设置不同的密码,以master为后缀名服务器为调度控制节点,用于管理员登录使用;以node为后缀名服务器为计算节点,用于非管理员的其他用户提交作业。)
图1 重置密码
查看节点状态
- 在调度节点(master)上查看slurm软件运行状态,执行systemctl status munge命令和systemctl status slurmctld命令查看munge服务和slurmctld服务是否运行正常。
图2 munge服务正常运行
图3 Slurmctld服务正常运行
- 如果munge没有启动,执行:
systemctl start munge
- 如果slurmctld没有启动,执行:
systemctl start slurmctld #查看集群内节点状态 sinfo
- 每次调度节点服务器重启后,需登录调度节点(master)云服务器,输入用户名root以及密码进入云服务器,输入以上命令启动服务。注:Gearbox启动后会将没有计算任务的节点设为“drain”状态,使用时要重新激活,命令如下:
scontrol update NodeName={NODELIST下节点名称} State=idle图4 Slurm配置成功
- 如果NODELIST中无节点,可登录到计算节点上开启slurmd服务。命令如下:
#开启node1节点slurmd服务
ssh 192.168.0.2 systemctl start slurmd exit
- 在调度节点(master)上查看Gearbox运行状态,执行journalctl -u gearbox、systemctl status gearbox查看Gearbox服务是否正常运行。
journalctl -u gearbox systemctl status gearbox
图5 Gearboxh状态正常运行
图6 Gearboxh日志查看
- 设置Slurm root用户配额,此配额与弹性伸缩的ECS数量相关。
#查看配额信息 sacctmgr list ass

创建node节点镜像
- 确认调度集群正常后,在控制台搜索弹性云服务器,单击进入弹性云服务器控制台。
- 找到node节点(私有IP为192.168.0.2),单击右侧更多按钮创建镜像。
图7 创建镜像
- 镜像类型选择系统盘镜像,配置信息中名称可自行命名,本示例中名称为hpc-image,单击立即创建。
图8 选择系统盘镜像
图9 配置信息填写,单击下一步。
图10 确认资源,单击提交。
- 单击立即创建后跳转到镜像服务控制台,可查看镜像创建进度。
图11 镜像创建中
图12 镜像创建完成
配置弹性伸缩
- 打开华为云镜像服务控制台,确认镜像创建成功。
- 登录华为云弹性伸缩AS控制台,选择该方案创建的弹性伸缩配置,单击右侧复制。在弹窗中,选择私有镜像,选择前面步骤4中创建的镜像,注意修改名称(名称不能带有下划线“_”,否则无法自动删除实例),单击“确定”创建新的弹性伸缩配置。
图13 复制创建新的弹性伸缩配置,安全组选用一键部署创建的安全组
图14 选择密钥对登录,本示例中密钥对名称为HPC-TEST(密钥对名称以3.1准备工作中创建的密钥对名称为准),并勾选相应选项。
- 打开弹性伸缩组列表,选择该方案创建的弹性伸缩组,单击右侧“更多>更换弹性伸缩配置”,在弹窗中选择上一步骤创建的弹性伸缩配置,单击确定。
图15 更换弹性伸缩配置

- 登录华为云弹性伸缩AS控制台,查看该方案创建的弹性伸缩组。
图16 弹性伸缩实例
- 单击弹性伸缩组名称,进入伸缩组详情界面,增加新的伸缩策略。单击“添加伸缩策略”,选择“告警策略”。注意:根据业务需求配置相应的区间范围(1条伸缩策略最大支持添加10个策略区间),配置完成后单击确定。
图17 添加伸缩策略
- 当策略区间增加的服务器数量不满足业务需要时,可以添加多个伸缩策略,单击“添加伸缩策略”。
图18 添加策略
- 安装业务软件,安装业务需要的软件到共享文件目录/data下面。
Slurm作业管理系统:
- Slurmd、Slurmdbd、Slurmctld日志文件目录:/var/log
- Slurmdbd服务的配置文件:/etc/slurm/slurmdbd.conf
- Slurmctld、Slurmd服务的配置文件:/etc/slurm/slurm.conf
详细使用参考Slurm产品文档,常用命令如下:
图19 Slurm常用命令
Gearbox程序工作流程介绍
本方案以批任务为示例,演示Gearbox程序如何自动进行Slurm集群弹性扩缩容。
- gearbox程序启动后,设置Slurm root用户配额。
#查看配额信息 sacctmgr list ass
图20 查看用户配额信息
- 提交批处理任务(仅供参考)。
# 提交批处理任务 sbatch myscript
图21 sbatch提交slurm任务
- 查看云监控告警状态。当作业状态为“queued”时,代表作业job在排队中,当前集群计算节点资源不足。此时查看自定义监控中workload值>=1,将通知弹性伸缩实例进行自动扩容。
图22 workload值变化状态
- 登录弹性伸缩AS控制台,单击打开该方案创建的弹性伸缩组,查看弹性伸缩正在创建实例。
图23 触发弹性扩容
- 弹性扩容的ECS实例,登录方式为3.3步骤1中修改的密码,使用固定资源池中计算节点镜像创建,登录创建好的实例,并运行Slurmd程序即可被纳管进入Slurm集群,参与作业。
图24 弹性扩容的ECS实例
- 被纳入Slurm集群的可用ECS计算节点实例,Slurm调度节点(master)将会下发作业任务给这些实例。
图25 扩容出的实例执行作业任务
- Gearbox将周期检查Slurm集群中计算节点node状态。检查空闲的node节点并node状态设置为DRAIN;检查集群中状态为DRAIN的node,是否还有任务正在该计算节点运行,如果没有,将该实例删除(成功后,node状态将变为DOWN);检查集群中状态为DOWN或DRAIN的node,将node记录从Slurm集群移除。
(参数说明:drain(节点故障),alloc(节点在用),idle(节点可用),down(节点下线),mix(节点部分占用,但仍有剩余资源)图26 将空闲实例状态修改为drain
- 登录弹性伸缩AS控制台,单击打开该方案创建的弹性伸缩组,查看弹性伸缩已删除实例。
图27 空闲实例被移出
gearbox配置文件示例
下面内容为gearbox配置文件示例,请存放在gearbox安装目录下。配置gearboxconfig.yaml文件时,请删除示例中的所有注释。
user: # console帐号的AK ak: # console帐号的SK sk: # 用户所在region的项目ID project-id: # 代理地址,端口,用户名密码等,无需代理可不配置 proxy-address: proxy-port: proxy-user-name: proxy-password: as: # AS服务在待使用局点的终端节点域名 endpoint: as.cn-east-3.myhuaweicloud.com # 预置伸缩组资源的伸缩组ID group: # 查询伸缩实例时单页最大返回数量,默认100可不修改 list-instance-limit: 100 # 删除伸缩实例时最大数量限制,AS服务最大支持50,可不修改 delete-instance-limit: 50 ecs: # ECS服务在待使用局点的终端节点域名 endpoint: ecs.cn-east-3.myhuaweicloud.com metric: # 自定义监控指标命名空间,可不修改 namespace: gearbox.HPC # 自定义指标的指标名 name: workload # 自定义指标维度名,可不修改 dimension-name: autoscaling_group # 自定义指标维度ID,配置成伸缩组的ID dimension-id: # 指标上报的TTL参数,可不修改 report-ttl: 172800 # CES服务在待使用局点的终端节点域名 metric-report-endpoint: ces.cn-east-3.myhuaweicloud.com task: # 节点状态检查周期,单位 秒 health-audit-period: 30 # 自定义指标上报周期,单位 秒 metric-report-period: 30 # 检测是否需要缩容的周期,单位 秒 scale-in-period: 120 # 自动删除待缩容节点周期,单位 秒 delete-instance-period: 10 # 新扩容节点自发现周期 discover-instance-period: 20 # 对比伸缩组与slurm节点数量周期,单位 秒 diff-instance-and-node-period: 60 # 内部缓存刷新周期,单位 秒 refresh-cache-period: 100 system: # deadline/slurm type: slurm # 稳定节点的Node名称,多节点英文逗号分割 stable-nodes: master # 稳定节点所在的分区 stable-partition: p1 #不稳定节点所在的分区 variable-partition: p1 # 空闲时间阈值,空间时间超过该值的节点将被缩容,单位 秒 scale-in-time: 1 # 判断job是否属于排队状态的时间限制条件,排队时间超过该值的job被认为是在排队并参与指标计算,建议为0 job-wait-time: 1 # 新节点注册的超时时间,超过该时间依然未注册成功将被AS删除,单位:分钟,建议为10 register-timeout-minutes: 10 # 弹性节点使用的cpu核数 cpu: 1 # 弹性节点使用的内存大小,该字段为预留字段,可设置为任意大于0的数值 memory: 100