开发者
资源

发现原理

节点故障的发现主要通过MindCluster NodeDMindCluster Volcano组件实现。MindCluster NodeD需要部署在每个有NPU的计算节点上。节点故障包括节点心跳丢失和节点硬件故障,详细说明如下:

  • 节点心跳丢失

    针对导致节点宕机或重启的故障,MindCluster NodeD通过心跳机制不断向MindCluster Volcano发送节点心跳,当宕机或重启时节点心跳丢失,从而发现该节点故障。

  • 节点硬件故障

    针对节点硬件故障,MindCluster NodeD通过IPMI驱动向iBMC发送故障查询请求,iBMC将当前硬件告警信息响应给MindCluster NodeDMindCluster NodeD收集硬件告警信息后将节点硬件状态上报给MindCluster Volcano

图1 节点故障上报
  • MindCluster NodeD每隔5秒(默认)会更新本节点的node-Info-cm内容,其中字段说明见表1
  • MindCluster NodeD每隔60秒(默认)会从iBMC查询当前节点的硬件故障信息,随着节点心跳更新时一起上报到node-Info-cm中。
表1 字段说明

值类型

说明

FaultDevList

故障节点结构体数组,故障节点结构体包含DeviceType、DeviceId、FaultCode、FaultLevel几个字段

表示当前所有的节点硬件故障信息

DeviceType

string

表示故障设备的类型

DeviceId

int

表示故障设备的ID

FaultCode

string数组

表述故障设备当前的故障类型对应的故障码

FaultLevel

string

表示故障节点的故障级别,取值如下

  • NotHandleFault
  • PreSeparateFault
  • SeparateFault

HeartbeatInterval

int

表示心跳发送间隔时间,单位为秒,默认值为5。

可参见配置MindCluster NodeD中的步骤2修改取值,并重启MindCluster NodeD后修改生效。

HeartbeatTime

数值范围支持64位的int类型,单位为秒,如:1703836707。

表示当前节点的心跳时间,是自1970年1月1日开始(UTC)所经过的秒数。

NodeStatus

string

表示当前节点的健康状态,通过本节点硬件故障的最高故障级别判断。取值如下:

  • Healthy
  • SubHealthy
  • Unhealthy
说明:
  • 节点状态为Healthy时,该节点的硬件只存在NotHandleFault级别故障。
  • 节点状态为SubHealthy时,该节点的硬件存在最高级别为PreSeparateFault的故障。
  • 节点状态为Unhealthy时,该节点的硬件存在最高级别为SeparateFault的故障。

MindCluster Volcano通过计算发现MindCluster NodeD最近一次上报心跳之后的一段时间内未再次上报心跳(大于两次心跳上报间隔的阈值)时,MindCluster Volcano会认为MindCluster NodeD所在节点故障,后续任务不会调度到该节点。如果已有任务在该节点且任务配置了重调度开关,则任务会被自动调度到健康节点;当两次心跳上报间隔小于或等于阈值时,MindCluster Volcano认为MindCluster NodeD所在节点恢复正常可重新调度任务到该节点。

计算公式两次心跳上报间隔的阈值 = 心跳发送间隔时间 x 3,其中3表示MindCluster Volcano会固定重试3次。