数据同步机制说明及配置指导
更新时间: 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

属性名属性类型取值说明
IdentifierU8CAN设备标识,用于标识在CAN协议传输时的消息来源和目的标识,在CAN设备管理域内唯一
ChannelsU8[]CAN设备管理的可用总线集合,数组中每个元素都表征一个可用的CAN设备总线通道,如:0就表示CAN0通道可用
EnabledBooleanCAN设备管理的使能标识,表征当前环境是否要使能CAN。true:使能;false:禁用

3.2 DataSync

属性名属性类型取值说明
CommunicationTypeU8数据同步的通信类型 0: CAN-FD 1: TCP

3.3 TCPMgmt

属性名属性类型取值说明
EnabledBoolean当前TCP同步功能的使能状态。true:使能;false:禁用
SyncRoleU8数据同步角色,仅用于TCP通信 0:接收者,仅接受其他节点的数据 1:发送者,允许向其他节点同步,同时接受其他节点的数据
IdentifierU8BMC节点标识,用于标识在TCP协议传输时的消息来源和目的标识,需要保持唯一
AddressString当前BMC节点的通信地址
PortU16当前BMC节点的通信端口

模型说明

  1. 节点标识通常同步槽位号等属性,用于接收者判断发送的BMC节点
  2. 使能状态与同步都支持运行中调整

3.4 PropertySync

属性名属性类型取值说明
SyncModeU8属性同步的模式 0:实时同步 1:周期性同步
SyncIntervalU8同步间隔,仅周期性同步时使用,单位:秒,取值范围:5~60,超过时取边界值,如3->5,70->60
TTLU32当前同步的数据老化时限,此时间内没有数据更新会更新标记,查询时返回此数据是否已老化,单位:秒,0:表示不限制
SyncObjectNameString目标同步对象名,需要引用关联对象即可
SyncObjectItems结构体数组,其中结构体定义如下方所示目标同步对象信息,表征需要同步那些数据,支持同步多个接口
结构体属性名属性类型取值说明
InterfaceString目标同步对象的接口
PropertiesString[]目标同步对象接口下需要同步的属性

模型说明

  1. 同步周期应当小于老化时间,否则默认将老化时间调整至同步周期的3倍,同时也建议按照此倍率进行配置
  2. 对象名直接引用目标对象,名称由组件进行解析
  3. 所有属性直接访问资源协作接口,所以不支持同步私有属性
  4. 如果选择实时同步,对应的资源需要支持发送信号

3.5 SyncDestination

属性名属性类型取值说明
AddressString目标节点的地址
PortU16目标节点的端口
DestinationFilterU8目标节点地址的用途 0:同步文件和属性 1: 仅同步属性 2:仅同步文件

模型说明

  1. 地址与端口通常不是配置死的固定值,所以涉及到CSR引用语法
  2. 语法当前仅支持点对点,无法支持配置列表类型,即一个属性中的包含的多个地址端口配置为引用,所以只能单独配置
  3. 同步属性和文件的目标地址可以不同,所以作如上设计,如果后续考虑新增冗余地址设计,也可以直接拓展

3.6 FileSync

属性名属性类型取值说明
SyncFileListString[]需要同步的文件列表
SyncModeU8属性同步的模式 0:实时同步 1:周期性同步
SyncIntervalU8同步间隔,仅周期性同步时使用,单位:秒,取值范围:5~60
SyncTypeU8文件同步的类型 0:自动覆盖,即同步完成后直接覆盖原文件 1:回调通知模式,即同步后通过广播信号的方式告知订阅组件相关文件已同步

模型说明

  1. 与属性同步相同,同步周期应当小于老化时间,否则默认将老化时间调整至同步周期的3倍
  2. 同步后直接覆盖的模式应当用于低风险文件,避免如账户信息等关键文件被替换导致异常,或者使用回调通知模式,由业务组件保证文件操作的安全性
  3. 由于传输过程不会对文件的内容进行加密等操作,所以传输的文件内容本身应当考虑安全性,例如按需进行加密