
# 开始使用
![](https://support.huaweicloud.com/dshpccs-high-tech/public_sys-resources/note_3.0-zh-cn.png)
- 有关Slurm详细使用指导请参考[Slurm产品文档](https://slurm.schedmd.com/archive/slurm-22.05.3/)。
- 该解决方案默认使用的Slurm版本：22.05.3，部署的Java版本：jdk1.8.0_202。
- 已在Slurm内默认创建了名为**cluster**的集群。
- 该解决方案涉及的业务端口均默认配置了同一子网可访问，如果另有需要，需根据实际情况修改安全组规则。
- 涉及到的Slurm业务端口如下：
  - 6817：Slurm管理节点的业务面端口。
  
  - 6818：Slurm计算节点的业务面端口。
   
- 后续文档将展开Slurm的基础使用说明。
 
#### 安全组修改（可选）
安全组实际是网络流量访问策略，包括网络流量入方向规则和出方向规则，通过这些规则为安全组内具有相同保护需求并且相互信任的云服务器、云容器、云数据库等实例提供安全保护。
如果您的实例关联的安全组策略无法满足使用需求，比如需要添加、修改、删除某个TCP端口，请参考以下内容进行修改。
- 添加安全组规则：根据业务使用需求需要开放某个TCP端口，请参考**[添加安全组规则](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0030969470.html)**添加入方向规则，打开指定的TCP端口。
- 修改安全组规则：安全组规则设置不当会造成严重的安全隐患。您可以参考**[修改安全组规则](https://support.huaweicloud.com/usermanual-vpc/vpc_SecurityGroup_0005.html)**，来修改安全组中不合理的规则，保证云服务器等实例的网络安全。
- 删除安全组规则：当安全组规则入方向、出方向源地址/目的地址有变化时，或者不需要开放某个端口时，您可以参考**[删除安全组规则](https://support.huaweicloud.com/usermanual-vpc/vpc_SecurityGroup_0006.html)**进行安全组规则删除。
 
#### 查看节点状态
1. 在调度节点(master)上查看Slurm软件运行状态，执行如下命令查看munge服务和Slurmctld服务是否运行正常。 
   ```
   #查看munge服务运行状态
   systemctl status munge
   #查看Slurmctld服务运行状态
   systemctl status slurmctld
   ```
   图1munge服务正常运行   
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002542110117.png)
   图2Slurmctld服务正常运行
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002510510152.png)
   如果munge没有启动，执行：
   ```
   systemctl start munge
   ```
   如果Slurmctld没有启动，执行：
   ```
   systemctl start slurmctld
   ```
   ![](https://support.huaweicloud.com/dshpccs-high-tech/public_sys-resources/caution_3.0-zh-cn.png)
   每次调度节点服务器重启后，需登录调度节点(master)云服务器，输入用户名root以及密码进入云服务器，输入以上命令启动服务。
   
   
2. 查看集群内节点状态。 
   使用如下命令查看集群内节点状态
   ```
   sinfo
   ```
   图3集群内节点状态为drain   
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002626378492.png)
   如果集群内节点状态为drain（Gearbox启动后会将没有计算任务的节点设为"drain"状态，此状态拒绝新作业），则使用时要重新激活（idle状态为正常可用节点），命令如下：
   ```
   scontrol update NodeName={NODELIST下节点名称} State=idle
   ```
   图4激活计算节点
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002626539296.png)
   ![](https://support.huaweicloud.com/dshpccs-high-tech/public_sys-resources/caution_3.0-zh-cn.png)
   如果NODELIST中无节点，可登录到计算节点上开启Slurmd服务。命令如下：
   ```
   ssh 192.168.0.2
   systemctl start slurmd
   exit
   ```
   
   
3. 在调度节点(master)上查看Gearbox运行状态，执行如下命令查看Gearbox服务是否正常运行。 
   ```
   #查看 Gearbox 服务当前运行状态
   systemctl status gearbox
   #查看 Gearbox 运行日志
   journalctl -u gearbox
   ```
   图5Gearbox状态正常运行
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002511877108.png)
   图6Gearbox日志查看   
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002543476755.png)
   
   
 #### 创建node节点镜像
1. 确认调度集群正常后，进入[弹性云服务器](https://console.huaweicloud.com/ecm/?locale=zh-cn&region=cn-north-4#/ecs/manager/vmList)控制台。
2. 找到node节点（私有IP为192.168.0.2），单击右侧更多按钮创建镜像。 
   图7创建镜像   
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002542110109.png)
   
   
3. 镜像类型选择系统盘镜像，配置信息中名称可自行命名，本示例中名称为hpc-image（注意名称不要带有下划线"_"，否则后续弹性伸缩时无法自动删除实例），单击"下一步"。 
   图8选择系统盘镜像
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002628764414.png)
   图9配置信息填写
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002521617476.png)
   
   
4. 确认资源详情后，单击提交。 
   图10资源详情
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002628605128.png)
   
   
5. 单击提交后会跳转到[镜像服务](https://console.huaweicloud.com/ecm/?agencyId=66b48c4f5b8345abb343baccdefd464f&region=cn-east-3&locale=zh-cn#/ims/manager/imageList/selfImage)控制台，可查看镜像创建进度。
   
   图11镜像创建中
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002510510160.png)
   图12镜像创建完成
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002542110127.png)
   
   
#### 配置弹性伸缩
1. 打开华为云镜像服务控制台，确认镜像创建成功。
2. 登录华为云弹性伸缩AS控制台，选择该方案创建的[弹性伸缩配置](https://console.huaweicloud.com/ecm/?locale=zh-cn&region=cn-north-4#/as/manager/groupConfigInfo/configList)，单击右侧"复制"。
   
   图13复制弹性伸缩配置
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002626544104.png)
   
   
3. 在弹窗中，填写相关信息后，单击"确定"创建新的弹性伸缩配置。 
   - 镜像：在私有镜像中选择[创建node节点镜像]中创建的镜像
   
   - 安全组：选择一键部署创建的安全组
   
   - 秘钥对：本示例中密钥对名称为HPC-TEST（密钥对名称以[创建访问密钥](https://support.huaweicloud.com/dshpccs-high-tech/dshpccs_04.html#dshpccs_04__section22081071593)中创建的密钥对名称为准），并勾选相应选项
     图14选择镜像与安全组   
     ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002510550150.png)
     图15选择密钥对   
     ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002510510166.png) 
   
   
   
   
4. 打开弹性伸缩组列表，选择该方案创建的弹性伸缩组，单击右侧"更多\>更换弹性伸缩配置"。 
   图16更换弹性伸缩配置   
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002626544896.png)
   
   
5. 在弹窗中选择上一步骤创建的弹性伸缩配置，单击"确定"。 
   图17选择弹性伸缩配置
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002512077368.png)
   
   
6. 登录华为云弹性伸缩AS控制台，在该方案创建的弹性伸缩组后单击"查看伸缩策略"。 
   图18弹性伸缩实例   
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002542030135.png)
   
   
7. 进入伸缩策略页面后。单击"添加伸缩策略"。 
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002656784385.png)
   
   
8. 选择"告警策略"。配置完相关信息后单击"确定"。 
   图19添加伸缩策略
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002626385566.png)
   ![](https://support.huaweicloud.com/dshpccs-high-tech/public_sys-resources/caution_3.0-zh-cn.png)
   告警策略类型如果选择区间策略时，1条伸缩策略最大支持添加10个区间策略，如果数量不满足业务需要时，可以添加多个伸缩策略。
   
   
#### Gearbox程序工作流程介绍
本方案以Slurm批处理脚本"myscript"为例，演示[Gearbox程序](https://gitee.com/HuaweiCloudDeveloper/huaweicloud-solution-gearbox)如何自动进行Slurm集群弹性扩缩容。实际业务所需软件程序、运行依赖等统一安装至集群共享目录 /data，切勿安装至单节点本地路径，避免调度至其他节点时找不到程序运行报错。
**Slurm核心文件路径：**
- Slurmd、Slurmdbd、Slurmctld日志文件目录：/var/log
- Slurmdbd服务（记账数据库配置）的配置文件：/etc/slurm/slurmdbd.conf
- Slurmctld、Slurmd服务（调度 / 计算节点）的配置文件：/etc/slurm/slurm.conf
**Slurm常用命令如下：**
图20Slurm常用命令   
![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002658550539.png)
详细使用参考[Slurm产品文档](https://slurm.schedmd.com/documentation.html)。
1. Gearbox程序启动后，在调度节点(master)上通过如下命令查看Slurm root用户配额，该配额和弹性伸缩 ECS 数量强关联，配额不足会导致扩容节点无法加入集群。 
   ```
   #查看配额信息
   sacctmgr list ass
   ```
   图21查看用户配额信息
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002543693385.png)
   常用修改参考命令（按需调整）：
   ```
   #限制 root 最多用 200 节点示例命令
   sacctmgr modify user root set GrpTRES=node=200
   #清空节点限制
   sacctmgr modify user root setGrpTRES=
   ```
   
   
2. 提交批处理任务（仅供参考）。 
   - 编辑测试脚本
     ```
     #!/bin/bash 
     #提交单个作业 
     #SBATCH --job-name=test 
     #SBATCH -p p1 
     #SBATCH --nodes=5 
     #SBATCH --output=/root/log/slurm-%A-%a.out  
     echo "job start....." 
     sleep 10 
     echo "job finished..."
     ```
     图22测试脚本   
     ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002628302258.png) 
   
   - 提交批处理任务
     ```
     # 提交批处理任务
     sbatch myscript
     ```
     
   
   
   
   
3. 查看[云监控服务-自定义监控](https://console.huaweicloud.com/ces/?locale=zh-cn&region=cn-north-4#/clouds/customList?namespace=gearbox.HPC)。通过squeue命令查看作业状态，当作业ST字段为PD(PENDING)时，代表作业在排队中，当前集群计算节点资源不足。此时查看自定义监控中workload值\>=1，将通知弹性伸缩实例进行自动扩容。
   
   图23workload值变化状态   
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002512092950.png)
   
   
4. 登录[弹性伸缩AS控制台](https://console.huaweicloud.com/ecm/?locale=zh-cn&region=cn-north-4#/as/manager/groupConfigInfo/groupList)，单击打开该方案创建的弹性伸缩组，查看弹性伸缩扩容的实例。
   
   图24触发弹性扩容
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002658932043.png)
   
   
5. 监控作业状态。被纳入Slurm集群的可用ECS计算节点实例，Slurm调度节点(master)将会下发作业任务给这些实例。可以通过以下命令观察作业状态。 
   ```
   # 监控作业状态
   watch -n 1 squeue
   ```
   图25监控作业状态
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002628408380.png)
   
   
6. 监控集群状态。可以通过以下命令监控集群节点状态。 
   ```
   # 监控集群状态
   watch -n 1 sinfo
   ```
   图26查看集群状态
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002658933503.png)
   ![](https://support.huaweicloud.com/dshpccs-high-tech/public_sys-resources/note_3.0-zh-cn.png)
   状态说明：drain(节点故障)，alloc(节点在用)，idle(节点可用)，down(节点下线)，mix(节点部分占用，但仍有剩余资源）
   
   
7. 查看空闲节点自动缩容。 
   **空闲节点自动缩容流程**
   - Gearbox 周期性巡检所有计算节点；
   
   - 识别长期状态为idle的空闲节点，将其状态改为 drain（禁止接收新作业）；
   
   - 检查 drain 节点：若无正在运行的作业，通知 AS删除该 ECS 实例；
   
   - 节点删除后，Slurm 中节点状态变为down，Gearbox 从集群中清理该节点记录。
   
   
   **查看弹性伸缩已删除实例**
   - 可以登录[弹性伸缩AS控制台](https://console.huaweicloud.com/ecm/?locale=zh-cn&region=cn-east-3#/as/manager/groupConfigInfo/groupList)，单击打开该方案创建的弹性伸缩组，查看弹性伸缩已删除实例。
     图27空闲实例被移出 
   
   
   ![](https://support.huaweicloud.com/dshpccs-high-tech/zh-cn_image_0000002628409944.png)
   
   
#### Gearbox配置文件示例
下面内容为Gearbox配置文件示例，路径为/usr/local/gearboxConfig.yaml。配置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
```
