数据同步机制说明及配置指导
更新时间: 2026/04/16
在Gitcode上查看源码前言
什么是数据同步
如框式设备等场景涉及多个BMC的互相通信,每个BMC作为一个节点,可以发送自身的数据给其他节点,或者接收其他节点的数据
例如查询所有节点数据
或者主备场景
bmc_datasync组件主要负责不同的BMC设备实体之间的数据同步功能。当前组件支持的不同的BMC设备实体之间数据同步通信的方式有:
- 基于 TCP-IP 的设备内部以太网络通信同步
- 基于 CAN-FD 的设备内部总线通信同步
怎么使用
1 基于 TCP-IP 方式同步
1.1 通信机制介绍
节点通信基于dophi创建客户端和服务端,实现2个节点间的通信。
对于需要发送数据的节点需要配置对端节点的IP信息,用于创建客户端发送本节点的数据。
对应的需要接收数据的节点则需要通过本节点的IP信息创建服务端。
1.2 配置示例
json
"DataSync_1": {
"CommunicationType": 1 // TCP同步
},
"TCPMgmt_1": {
"Enabled": true, // 开启TCP同步
"Identifier": 1, // 本机标识
"Address": "xx.xx.xx.x", // 本机地址
"Port": 1, // 本机端口
"SyncRole": 1 // 同步角色为发送者
},
"PropertySync_1": {
"SyncMode": 1, // 当前节点时周期性同步
"SyncInterval": 3, // 每3秒同步一次
"TTL": 20, // 20秒不更新数据即老化
"SyncObjectName": "#/Component_BMC", // 需要同步的对象
// 同步的接口与属性
"SyncObjectItems": [
{
"Interface": "bmc.kepler.Systems.Component",
"Properties": [
"Health",
"Presence"
]
}
],
"ServiceName": "bmc.kepler.frudata" // 目标同步对象所在的服务
},
// 目标同步对象(举例)
"Component_BMC": {
"FruId": 255,
"Name": "BMC",
"Type": 26
},
// 其他节点的IP信息
"ServiceDestination_1": {
"Address": "xx.xx.xx.y",
"Port": 1,
"DestinationFilter": 0 // 本地址用于属性同步和文件同步
},
"ServiceDestination_2": {
"Address": "xx.xx.xx.z",
"Port": 1,
"DestinationFilter": 1 // 本地址仅用于属性同步
},
"FileSync_1": {
"SyncFileList": [ // 同步的文件列表
"/dev/shm/a.txt"
],
"SyncMode": 1, // 周期性同步
"SyncInterval": 5, // 同步周期5s
"SyncType": 0 // 当前的文件可以直接覆盖远端节点
}1.3 属性同步机制
1.4 文件同步机制
2 基于 CAN-FD 方式同步
2.1 CAN-FD 总线介绍
在不同的设备之间有一条 CAN-FD 总线,每个BMC设备相当于挂接在这个总线上的设备,可以从总线获取或者向总线发布数据。如下图:
2.2 CAN-FD 总线应用框架
2.2.1 CAN-FD 总线应用框架处理流程总览
2.2.2 CAN-FD 配置示例
json
"CANMgmt_1": {
"Identifier": 1, // CAN标识
"Channels": [1, 2], // 通道号
"Enabled": true // CAN使能
},
"DataSync_1": {
"CommunicationType": 0, // CAN同步
},
"PropertySync_1": {
"SyncMode": 1, // 当前节点时周期性同步
"SyncInterval": 3, // 每3秒同步一次
"TTL": 20, // 20秒不更新数据即老化
"SyncObjectName": "#/Component_BMC", // 需要同步的对象
// 同步的接口与属性
"SyncObjectItems": [
{
"Interface": "bmc.kepler.Systems.Component",
"Properties": [
"Health",
"Presence"
]
}
],
"ServiceName": "bmc.kepler.frudata" // 目标同步对象所在的服务
},
// 目标同步对象
"Component_BMC": {
"FruId": 255,
"Name": "BMC",
"Type": 26
}3 配置详解
3.1 CANMgmt
| 属性名 | 属性类型 | 取值说明 |
|---|---|---|
| Identifier | U8 | CAN设备标识,用于标识在CAN协议传输时的消息来源和目的标识,在CAN设备管理域内唯一 |
| Channels | U8[] | CAN设备管理的可用总线集合,数组中每个元素都表征一个可用的CAN设备总线通道,如:0就表示CAN0通道可用 |
| Enabled | Boolean | CAN设备管理的使能标识,表征当前环境是否要使能CAN。true:使能;false:禁用 |
3.2 DataSync
| 属性名 | 属性类型 | 取值说明 |
|---|---|---|
| CommunicationType | U8 | 数据同步的通信类型 0: CAN-FD 1: TCP |
3.3 TCPMgmt
| 属性名 | 属性类型 | 取值说明 |
|---|---|---|
| Enabled | Boolean | 当前TCP同步功能的使能状态。true:使能;false:禁用 |
| SyncRole | U8 | 数据同步角色,仅用于TCP通信 0:接收者,仅接受其他节点的数据 1:发送者,允许向其他节点同步,同时接受其他节点的数据 |
| Identifier | U8 | BMC节点标识,用于标识在TCP协议传输时的消息来源和目的标识,需要保持唯一 |
| Address | String | 当前BMC节点的通信地址 |
| Port | U16 | 当前BMC节点的通信端口 |
模型说明
- 节点标识通常同步槽位号等属性,用于接收者判断发送的BMC节点
- 使能状态与同步都支持运行中调整
3.4 PropertySync
| 属性名 | 属性类型 | 取值说明 |
|---|---|---|
| SyncMode | U8 | 属性同步的模式 0:实时同步 1:周期性同步 |
| SyncInterval | U8 | 同步间隔,仅周期性同步时使用,单位:秒,取值范围:5~60,超过时取边界值,如3->5,70->60 |
| TTL | U32 | 当前同步的数据老化时限,此时间内没有数据更新会更新标记,查询时返回此数据是否已老化,单位:秒,0:表示不限制 |
| SyncObjectName | String | 目标同步对象名,需要引用关联对象即可 |
| SyncObjectItems | 结构体数组,其中结构体定义如下方所示 | 目标同步对象信息,表征需要同步那些数据,支持同步多个接口 |
| 结构体属性名 | 属性类型 | 取值说明 |
|---|---|---|
| Interface | String | 目标同步对象的接口 |
| Properties | String[] | 目标同步对象接口下需要同步的属性 |
模型说明
- 同步周期应当小于老化时间,否则默认将老化时间调整至同步周期的3倍,同时也建议按照此倍率进行配置
- 对象名直接引用目标对象,名称由组件进行解析
- 所有属性直接访问资源协作接口,所以不支持同步私有属性
- 如果选择实时同步,对应的资源需要支持发送信号
3.5 SyncDestination
| 属性名 | 属性类型 | 取值说明 |
|---|---|---|
| Address | String | 目标节点的地址 |
| Port | U16 | 目标节点的端口 |
| DestinationFilter | U8 | 目标节点地址的用途 0:同步文件和属性 1: 仅同步属性 2:仅同步文件 |
模型说明
- 地址与端口通常不是配置死的固定值,所以涉及到CSR引用语法
- 语法当前仅支持点对点,无法支持配置列表类型,即一个属性中的包含的多个地址端口配置为引用,所以只能单独配置
- 同步属性和文件的目标地址可以不同,所以作如上设计,如果后续考虑新增冗余地址设计,也可以直接拓展
3.6 FileSync
| 属性名 | 属性类型 | 取值说明 |
|---|---|---|
| SyncFileList | String[] | 需要同步的文件列表 |
| SyncMode | U8 | 属性同步的模式 0:实时同步 1:周期性同步 |
| SyncInterval | U8 | 同步间隔,仅周期性同步时使用,单位:秒,取值范围:5~60 |
| SyncType | U8 | 文件同步的类型 0:自动覆盖,即同步完成后直接覆盖原文件 1:回调通知模式,即同步后通过广播信号的方式告知订阅组件相关文件已同步 |
模型说明
- 与属性同步相同,同步周期应当小于老化时间,否则默认将老化时间调整至同步周期的3倍
- 同步后直接覆盖的模式应当用于低风险文件,避免如账户信息等关键文件被替换导致异常,或者使用回调通知模式,由业务组件保证文件操作的安全性
- 由于传输过程不会对文件的内容进行加密等操作,所以传输的文件内容本身应当考虑安全性,例如按需进行加密