分布式算力集群故障节点自动剔除机制

分布式算力集群里,节点掉线、GPU 卡死或网络抖动都会拖慢整体任务。故障节点自动剔除机制的核心,就是让集群定期探测每个节点状态,一旦确认异常就自动把它从调度列表里摘掉,避免任务继续派发。
下面按零基础可执行的方式,讲清准备、配置、避坑和验证。

先确认你的集群用什么调度和探测方式

不同集群的剔除入口不一样,动手前先确认三点:

  • 调度器是 Slurm、Kubernetes 还是自研调度,决定节点状态写在哪。
  • 健康检查走 SSH、HTTP 接口还是心跳上报,决定脚本怎么写。
  • 节点异常后是临时摘除还是彻底下线,决定要不要保留恢复逻辑。

本文以最常见的 Linux + Slurm 环境举例,思路同样适用于其他调度器。

环境与前置准备

准备一台管理节点,能免密登录所有算力节点。
检查 SSH 连通性:

for ip in 10.0.0.11 10.0.0.12 10.0.0.13; do
  ssh -o ConnectTimeout=3 root@$ip "nvidia-smi -L" && echo "$ip OK" || echo "$ip FAIL"
done

确认 sinfo 和 scontrol 命令可用,这是后续摘除节点的关键工具:

sinfo -N -o "%N %T %C"

如果管理节点没装 Slurm 客户端,先安装 slurm-client 或对应软件包,否则无法执行剔除命令。

写一个可落地的健康检查脚本

在管理节点创建 /opt/health_check/check_nodes.sh,思路是:探测失败连续达到阈值才剔除,避免网络抖动误伤。

#!/bin/bash
NODES="node01 node02 node03"
THRESHOLD=3
LOG=/var/log/node_health.log

for node in $NODES; do
  fail=0
  for i in 1 2 3; do
    timeout 5 ssh -o ConnectTimeout=3 $node "nvidia-smi" >/dev/null 2>&1 || fail=$((fail+1))
    sleep 2
  done

  if [ $fail -ge $THRESHOLD ]; then
    scontrol update NodeName=$node State=DRAIN Reason="health_check_fail"
    echo "$(date) $node DRAIN" >> $LOG
  else
    scontrol update NodeName=$node State=RESUME 2>/dev/null
    echo "$(date) $node OK" >> $LOG
  fi
done

赋予执行权限:

chmod +x /opt/health_check/check_nodes.sh

关键点: DRAIN 表示不再向该节点派发新任务,但保留正在运行的任务;RESUME 用于节点恢复后重新纳入调度。

用定时任务驱动自动剔除

编辑 crontab,让脚本每分钟执行一次:

crontab -e

加入:

* * * * * /opt/health_check/check_nodes.sh

保存后确认任务已生效:

crontab -l | grep check_nodes

这样故障节点被发现后,会在一个检查周期内自动进入 DRAIN 状态,达到自动剔除的效果。

避坑与注意事项

  • 阈值不要设太低。 单次探测失败就剔除,容易因瞬时网络抖动误伤正常节点,建议连续 3 次失败再处理。
  • 区分 DRAIN 和 DOWN。 DOWN 会直接导致节点上任务失败,除非节点彻底离线,否则优先用 DRAIN。
  • 脚本要防止并发。 如果检查耗时超过一分钟,可能出现多个脚本同时运行,可在脚本开头加锁:
[ -f /tmp/check_nodes.lock ] && exit 0
touch /tmp/check_nodes.lock
trap "rm -f /tmp/check_nodes.lock" EXIT
  • 恢复逻辑要谨慎。 节点恢复后自动 RESUME 前,最好再确认一次 GPU 和网络正常,避免反复上下线。
  • 日志要保留。 出问题时靠 /var/log/node_health.log 回溯哪次检查误判或漏判。

验证剔除是否真的生效

手动模拟一个节点故障,比如在 node01 上停掉相关服务或断网,然后等待一个检查周期,执行:

sinfo -N -o "%N %T %E"

预期看到 node01 状态变为 drain,Reason 显示 health_check_fail。
恢复节点后再次查看,状态应回到 idle 或 mixed。

再提交一个测试任务,确认它不会被派发到已 DRAIN 的节点:

srun -N1 hostname

如果任务只落在健康节点上,说明自动剔除链路已经跑通。

几个常见疑问

每个检查周期多久合适? 算力集群任务通常较长,一分钟一次比较平衡;
节点多时可适当放宽到两分钟,减少管理节点压力。

脚本探测方式只能用 SSH 吗? 不一定。
如果你的节点暴露了 HTTP 健康接口,用 curl 探测更轻量,替换脚本里的 SSH 命令即可。

节点恢复后能自动重新加入吗? 可以,但建议先人工确认硬件正常,再让脚本执行 RESUME,避免故障节点反复被纳入调度。

把健康检查、连续失败阈值和 DRAIN 摘除这三步组合起来,分布式算力集群的故障节点自动剔除机制就能稳定运行。
建议先在测试节点上验证一轮,再推广到整个集群。

分享到:
上一篇
大模型微调算力需求测算,训练最低显存
下一篇
算力机电源冗余配置,双电源防止断电宕机
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意