本文主要描述如何基于openUBMC完成主备管理功能的配置。
openUBMC 主备管理用于对框式设备中的多个具备主从关系的节点进行管理,功能特性主要涉及节点间的主备关系切换,例如当前BMC发生致命告警等问题时不适合继续运行,需要将当前节点进行降备,再决策出另一个主BMC保障设备运行
以上功能通过对象配置承载,下面对这些配置进行详细介绍。
配置项 | 是否必须配置 | 配置说明 |
---|---|---|
本端 | 是 | 配置唯一标识以及通信地址等信息 |
远端 | 是 | 配置唯一标识以及通信地址等信息 |
切换条件 | 否 | 通过配置可以自定义主动进行主备切换的条件或者禁止进行切换的条件 |
主备服务配置 | 是 | 包含主备状态读取相关的一系列硬件信号以及辅助主备检测的属性 |
本端BMC配置 ActiveStandbyLocal
属性名称 | 属性类型 | 属性说明 |
---|---|---|
Id | U8 | 唯一标识 |
Presence | U8 | 在位状态 1:在位 0:不在位 |
Address | String | BMC节点通信的地址 |
Port | U16 | BMC节点通信的端口 |
配置解读
Id标识通常是使用槽位号,没有槽位号也可以自定义,此Id用于匹配默认的主BMC,也就是说希望某个节点为主,那么此节点就会先一步发送信号,参与到主备的仲裁当中。
本端BMC的地址端口号用于创建远程访问的服务端,因为对于其他节点来说,此BMC才是远端,端口需要保证未被使用。
在位信号不限制数据源,如CPLD,通过配置Accessor
读取,也可通过下级Connector
在位状态获取。
配置示例
"ActiveStandbyLocal_0":{
"Id": 1,
"Presence": "#/Object1.Presence",
"Address": "192.168.100.114",
"Port": 51000
}
远端BMC配置 ActiveStandbyRemote
配置与本端BMC相同,这里简单讲述配置类的区别。
远端BMC的资源协作接口由本端BMC更新,即通过配置的地址和端口创建远程访问客户端,访问远端节点创建的远程访问服务端。
配置示例
"ActiveStandbyLocal_0":{
"Id": 2,
"Presence": "#/Object2.Presence",
"Address": "192.168.100.115",
"Port": 51001
}
主备BMC切换条件 SwitchRule
属性名称 | 属性类型 | 属性说明 |
---|---|---|
RuleType | U8 | 切换条件类型 0:BMC主动切换的触发条件 1:BMC被动切换的禁止条件 |
Threshold | U32 | 当前主备切换条件的门限值 |
Reading | U32 | 当前主备切换条件的输入值 |
Enabled | Boolean | 是否使能当前主备切换条件 |
Operator | U8 | 当前主备切换条的运算符 1:小于 2:小于等于 3:大于 4:大于等于 5:等于 6:不等于 |
Direction | U8 | 切换条件为0时表示BMC主动切换的主备方向,配置为1时表示被动切换时被禁止的主备方向 0:降备 1:升主 |
Description | String | 主备条件命中之后的描述信息,表示BMC发生主动切换或者被动切换禁止的原因 |
配置解读
此配置支持两类场景:
满足特定条件需要立即切换主备,例如存在致命告警需要降备的情况,那么上述配置触发生效后会发送申请倒换的请求。
而像固件正在升级生效等场景不希望发生主备切换的,可以配置为禁止切换条件,触发门限后会检测是否存在生效的禁止条件
配置示例
"SwitchOverRule_0": {
"RuleType": 1,
"Threshold": 1,
"Reading": "<=/Scanner_CPLD1.Value",
"Operator": 5,
"Enabled": true,
"Direction": 0,
"Description": "CPLD Validating"
}
资源显示示例
> busctl --user tree bmc.kepler.active_standby_mgmt
...
├─/bmc/kepler/Managers
│ /bmc/kepler/Managers/1
│ /bmc/kepler/Managers/1/ActiveStandby
│ /bmc/kepler/Managers/1/ActiveStandby/Local # 本端BMC
│ /bmc/kepler/Managers/1/ActiveStandby/Remotes
│ /bmc/kepler/Managers/1/ActiveStandby/Remotes/ActiveStandbyRemote_0_01 # 远端BMC
│ /bmc/kepler/Managers/1/ActiveStandby/Remotes/ActiveStandbyRemote_1_01 # 远端BMC
│ /bmc/kepler/Managers/1/ActiveStandby/SwitchRules
│ /bmc/kepler/Managers/1/ActiveStandby/SwitchRules/SwitchRule_0 # 切换条件
│ /bmc/kepler/Managers/1/ActiveStandby/SwitchRules/SwitchRule_1 # 切换条件
...
主备服务管理 私有类 ActiveStandbyService
属性名称 | 属性类型 | 属性说明 |
---|---|---|
DefaultActiveId | U8 | 默认单板的标识,与主备对象的Id对应 |
StandbyToActiveWrite | U8 | 升主写入硬件信号对象 |
ActiveToStandbyWrite | U8 | 降备写入硬件信号对象 |
StandbyToActiveWriteProtect | U8 | 升主写保护硬件信号对象 |
ActiveToStandbyWriteProtect | U8 | 降备写保护硬件信号对象 |
HeartbeatWrite | U8 | 当前BMC主备心跳写入硬件信号对象 |
HealthStatusRead | U8 | 当前BMC健康状态读取硬件信号对象 0: Not Health 1: Health |
ActiveRead | U8 | 当前BMC主备状态读取硬件信号对象 0: Standby 1: Active |
BoardInRead | U8 | 单板插稳状态读取对象 0: 未插稳 1:已插稳 |
HeartbeatIntervalMS | U16 | 当前BMC主备心跳检测周期,单位:ms 取值范围:10~1000 默认值:300 |
HeartbeatTimeoutMS | U16 | 当前BMC主备心跳检测间隔的超时时间,单位:ms 取值范围:500~3000 默认值:3000 |
StatusIntervalMS | U16 | 当前BMC主备检测间隔,单位:ms 取值范围:50~300 默认值:200 |
配置解读
此类包含BMC主备服务需要读取主备管理相关的一系列硬件信号,以及辅助BMC主备服务需要的属性。
对于有默认值的配置项非必配项,例如心跳检测间隔等,有需要进行调整时可配置.
上述配置为支撑各产业使用,所以不一定具备所有硬件信号,例如读取类BoardInRead
如果没有配置必要,可以配死为1
。
写入类是通过写1
(写入)和0
(清除)的方式,简要流程为: 先打开写保护再写入升主/降备寄存器,最后读取ActiveRead
获取硬件信号判断主备状态。
因此如果不涉及写保护可以不配置。
配置示例
"ActiveStandbyService_0": {
"DefaultActiveId": 1, // 默认框内1号BMC为主BMC
"StandbyToActiveWrite": "#/Accessor_ToActive.Value",
"ActiveToStandbyWrite": "#/Accessor_ToStandby.Value",
"StandbyToActiveWriteProtect": "#/Accessor_ToActivePro.Value",
"ActiveToStandbyWriteProtect": "#/Accessor_ToStandbyPro.Value",
"HeartbeatWrite": "#/Accessor_Heartbeat.Value",
"HealthStatusRead": "#/Scanner_Health.Value",
"ActiveRead": "#/Scanner_Active.Value",
"BoardInRead": "#/Scanner_BoardIn.Value",
"HeartbeatIntervalMS": 300,
"HeartbeatTimeoutMS": 3000,
"StatusIntervalMS": 200
}
当然,配置示例中数据源来自于Accessor
,实际并未限定数据源一定是硬件寄存器,可根据产业自身业务进行适配。