更新时间:2024-07-24 GMT+08:00
分享

开始使用

  • 有关Slurm详细使用指导请参考Slurm产品文档
  • 该解决方案默认使用的Slurm版本:22.05.3,部署的Java版本:jdk1.8.0_202
  • 已在Slurm内默认创建了名为cluster的集群名
  • 该解决方案涉及的所有的业务端口均默认配置了同一子网可访问,如果另有需要,需根据实际情况修改安全组规则
  • 涉及到的Slurm业务端口如下:
    • 6817:Slurm管理节点的业务面端口
    • 6818: Slurm计算节点的业务面端口
  • 后续文档将展开Slurm的基础使用说明

安全组修改(可选)

安全组实际是网络流量访问策略,包括网络流量入方向规则和出方向规则,通过这些规则为安全组内具有相同保护需求并且相互信任的云服务器、云容器、云数据库等实例提供安全保护。

如果您的实例关联的安全组策略无法满足使用需求,比如需要添加、修改、删除某个TCP端口,请参考以下内容进行修改。

  • 添加安全组规则:根据业务使用需求需要开放某个TCP端口,请参考添加安全组规则添加入方向规则,打开指定的TCP端口。
  • 修改安全组规则:安全组规则设置不当会造成严重的安全隐患。您可以参考修改安全组规则,来修改安全组中不合理的规则,保证云服务器等实例的网络安全。
  • 删除安全组规则:当安全组规则入方向、出方向源地址/目的地址有变化时,或者不需要开放某个端口时,您可以参考删除安全组规则进行安全组规则删除。
  1. 修改初始密码。打开华为云服务器控制台,勾选以云服务器名称为前缀的三台云服务器,单击“关机”,关机成功后,单击“重置密码”,根据提示重置密码,单击“确定”后,开机即可正常使用。

    图1 重置密码

查看节点状态

  1. 在调度节点({ecs_name}-00)上查看slurm软件运行状态,执行systemctl status munge命令和systemctl status slurmctld命令查看munge服务和slurmctld服务是否运行正常。

    systemctl status munge
    systemctl status slurmctld
    图2 munge服务正常运行
    图3 Slurmctld服务正常运行

  2. 如果munge没有启动,执行:

    systemctl start munge

  3. 如果slurmctld没有启动,执行:

     systemctl start slurmctld
    #查看集群内节点状态
     sinfo

  4. 每次调度节点服务器重启后,需登录调度节点({ecs_name}-00)云服务器,输入用户名root以及密码进入云服务器,输入以上命令启动服务。

    图4 Slurm配置成功

  5. 如果NODELIST中无节点,可登录到计算节点上开启slurmd服务。命令如下:

    #开启node1节点slurmd服务

    ssh 172.16.0.11
    systemctl start slurmd
    exit

    #开启node2节点slurmd服务

    ssh 172.16.0.12
    systemctl start slurmd
    exit

  6. 在调度节点({ecs_name}-00)上运行Gearbox程序。

    进入gearbox程序包所在目录下(默认为/usr/local/),启动Gearbox程序:
    nohup java -jar gearbox-0.0.1-SNAPSHOT.jar --spring.config.name=gearboxConfig > /dev/null 2>&1  &

  7. 在调度节点({ecs_name}-00)上查看Gearbox运行状态,执行ps aux|grep gearbox查看Gearbox服务是否正常运行。

    # 查看Gearbox程序状态:

    ps aux|grep gearbox
    图5 Gearbox服务正常运行

  8. 设置Slurm root用户配额,此配额与弹性伸缩的ECS数量相关。

    #修改配额
    sacctmgr modify user root set GrpTRES="node={用户所需的配额数量}"
    #查看配额信息
    sacctmgr list ass

    注:gearbox启动后会将没有计算任务的节点设为drain状态,使用时要重新激活。命令如下:

    scontrol update NodeName={节点名称} State=idle
    图6 节点状态为drain

配置弹性伸缩

  1. 打开节点注入文件nodeset.sh,输入master服务器密码:参数说明ecs_password,输入sfs turbo共享文件挂载目录:打开弹性文件服务控制台,复制共享路径,保存文件。

    图7 获取sfs turbo共享文件挂载目录

    图8 配置模板,选择使用已有云服务器规格为模板

  2. 登录华为云弹性伸缩AS控制台,单击创建伸缩配置,在弹窗中,配置模板,选择使用已有云服务器规格为模板,选择云服务器,选择密钥对登录,密钥对选择表1keypair_name,高级配置,选择以文件注入,注入文件获取参考上一步骤,单击“确定”创建新的弹性伸缩配置。

    图9 配置模板,选择使用已有云服务器规格为模板

    图10 选择云服务器

    图11 选择密钥对登录,高级配置选择以文件注入数据,并勾选相应选项。

  3. 打开弹性伸缩组列表,选择该方案创建的弹性伸缩组(名称以as_name参数值为前缀),单击右侧“更多>更换弹性伸缩配置”,在弹窗中选择上一步骤创建的弹性伸缩配置,单击确定。

    图12 更换弹性伸缩配置

  4. 登录华为云弹性伸缩AS控制台,查看该方案创建的弹性伸缩组。

    图13 弹性伸缩实例

  5. 单击弹性伸缩组名称,进入伸缩组详情界面,增加新的伸缩策略。单击"添加伸缩策略”,选择“告警策略”。根据业务需求配置相应的区间范围(1条伸缩策略最大支持添加10个策略区间),配置完成后单击确定。

    图14 添加伸缩策略

  6. 当策略区间增加的服务器数量不满足业务需要时,可以添加多个伸缩策略,单击“添加伸缩策略”。

    图15 添加策略

  7. 安装业务软件,安装业务需要的软件到共享文件目录/data下面。安装完成后即可使用集群进行作业。

    Slurm作业管理系统:

    • Slurmd、Slurmdbd、Slurmctld日志文件目录:/var/log
    • Slurmdbd服务的配置文件:/etc/slurm/slurmdbd.conf
    • Slurmctld、Slurmd服务的配置文件:/etc/slurm/slurm.conf

      详细使用参考Slurm使用参考,常用命令如下:

    图16 Slurm常用命令

Gearbox程序工作流程介绍

本方案以批任务为示例,演示Gearbox程序如何自动进行Slurm集群弹性扩缩容。

  1. gearbox程序启动后,设置Slurm root用户配额。

    #修改配额
    sacctmgr modify user root set GrpTRES="node={用户所需的配额数量}"
    #查看配额信息
    sacctmgr list ass
    图17 查看用户配额信息

  2. 提交批处理任务(仅供参考)。

    图18 sbatch提交slurm任务

    执行 vim myscript,编辑如下内容

    执行 sbatch myscript提交slurm任务

  3. 查看云监控告警状态。当作业状态为“queued”时,代表作业job在排队中,当前集群计算节点资源不足。此时查看自定义监控中workload值>=1,将通知弹性伸缩实例进行自动扩容。

    图19 workload值变化状态

  4. 登录弹性伸缩AS控制台,单击打开该方案创建的弹性伸缩组,查看弹性伸缩正在创建实例。

    图20 触发弹性扩容

  5. 弹性扩容的ECS实例,登录方式为配置弹性伸缩 步骤2中的密码对,登录创建好的实例,查看Slurmd程序运行状态,确保被纳管进入Slurm集群,参与作业。

    图21 弹性扩容的ECS实例
    图22 密钥对方式登录弹性扩容的ECS实例

    图23 查看Slurmd程序运行状态

  6. 被纳入Slurm集群的可用ECS计算节点实例,Slurm调度节点(master)将会下发作业任务给这些实例。

    图24 扩容出的实例执行作业任务

  7. Gearbox将周期检查Slurm集群中计算节点node状态。检查空闲的node节点并node状态设置为DRAIN;检查集群中状态为DRAIN的node,是否还有任务正在该计算节点运行,如果没有,将该实例删除(成功后,node状态将变为DOWN);检查集群中状态为DOWN或DRAIN的node,将node记录从Slurm集群移除。

    (参数说明:drain(节点故障),alloc(节点在用),idle(节点可用),down(节点下线),mix(节点部分占用,但仍有剩余资源)
    图25 将空闲实例状态修改为drain

  8. 登录弹性伸缩AS控制台,单击打开该方案创建的弹性伸缩组,查看弹性伸缩已删除实例。

    图26 空闲实例被移出

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-north-4.myhuaweicloud.com
  # 预置伸缩组资源的伸缩组ID
  group: 
  # 查询伸缩实例时单页最大返回数量,默认100可不修改
  list-instance-limit: 100
  # 删除伸缩实例时最大数量限制,AS服务最大支持50,可不修改
  delete-instance-limit: 50
ecs:
  # ECS服务在待使用局点的终端节点域名
  endpoint: ecs.cn-north-4.myhuaweicloud.com
metric:
  # 自定义监控指标命名空间,可不修改
  namespace: test.HPC
  # 自定义指标的指标名
  name: workload
  # 自定义指标维度名,可不修改
  dimension-name: autoscaling_group
  # 自定义指标维度ID,配置成伸缩组的ID  dimension-id: 
  # 指标上报的TTL参数,可不修改
  report-ttl: 172800
  # CES服务在待使用局点的终端节点域名
  metric-report-endpoint: ces.cn-north-4.myhuaweicloud.com
task:
  # 节点状态检查周期,单位 秒
  health-audit-period: 30
  # 自定义指标上报周期,单位 秒
  metric-report-period: 60
  # 检测是否需要缩容的周期,单位 秒
  scale-in-period: 5
  # 自动删除待缩容节点周期,单位 秒
  delete-instance-period: 5
  # 新扩容节点自发现周期
  discover-instance-period: 20
  # 对比伸缩组与slurm节点数量周期,单位 秒
  diff-instance-and-node-period: 60
  # 内部缓存刷新周期,单位 秒
  refresh-cache-period: 100
  # 配置检查任务运行周期,单位 秒
  configuration-check-period: 300
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: 4
  # 弹性节点使用的内存大小,该字段为预留字段,可设置为任意大于0的数值
  memory: 12600
  gpu: 1
  # 仅slurm集群配置有效,默认是true,在计算Workload时忽略含有GPU需求作业中的CPU需求量
  ignore-cpu-request-of-gpu-job: true
  # 是否使用powershell执行指令,只有windows环境下生效
  use-powershell-executor: true
# 支持多分区资源协同
partition:
  # 特性整体开发,默认值为false,对接系统为slurm且该配置开启后后续配置生效;
  multi-partition-scaling: false
  # 提交到多个分区的作业负载,在多个分区上的映射策略 MAPPING_TO_FIRST_PARTITION,仅累积到第一个分区中,其余分区不计算(默认); MAPPING_BY_WEIGHT,按照各分区的权重计算负载的映射;
  load-mapping-policy: MAPPING_TO_FIRST_PARTITION
  # 分区配置列表
  partition-configuration-list:
    -
      # 分区名
      name: partition1
      # 分区中节点资源类型,支持CPU、GPU二选一;
      type: CPU
      # 分区在负载映射中的计算权重,整数,取值范围[0,100];
      weight: 10
      # 分区对应的租户id
      project-id:
      # 分区对应的伸缩组id,伸缩组与分区需要一一对应
      scaling-group-id: XXX
      #节点的资源规格,当资源类型为CPU时可填节点CPU和内存规格,当节点资源类型为GPU时可填节点规格为GPU数量;
      node-spec:
        # 节点CPU数量
        cpu: 4
        # 节点内存容量,单位GB;
        mem: 8
        # 加速卡数量
        gpu: 2
      # 空闲一定时间后触发缩容,单位秒,未配置时使用全局配置,配置后针对本分区覆盖全局空闲缩容时间;
      scale-in-after-idle-time: 100
      # 自定义指标维度名
      dimension-name: autoscaling_group
      # 自定义指标维度ID
      dimension-id: 
      # 云端API调用的地址端点列表,未配置时使用全局配置
      ecs-endpoint: ecs.cn-north-4.myhuaweicloud.com
      as-endpoint: as.cn-north-4.myhuaweicloud.com
      ces-endpoint: ces.cn-north-4.myhuaweicloud.com

相关文档