7. 边缘运维与设备替换(Gossip 分布式配置同步)

7.1 阶段目标

  • 建立基于 Gossip 的本地网络配置一致性机制。
  • 每个节点将本机与最近邻节点配置增量同步到本机 bbolt DB。
  • 支持设备替换与离线缓存,网络恢复后自动补同步。
  • 提供冲突检测与自动合并,冲突全过程审计可追溯。

7.2 同步数据模型

  • device_uuid:Base58 编码,默认基于 LAN 口 MAC 生成;支持手动指定。
  • config_content:配置文件完整内容(文本或二进制编码)。
  • sync_timestamp:最近一次同步时间戳(UTC,毫秒精度)。
  • config_sha256:配置内容 SHA-256 哈希。
  • source_node:来源节点 UUID。
  • version_vector:可选向量时钟,用于高级冲突定位。

7.3 UUID 规则

  • 默认生成uuid = Base58(SHA-256(lan_mac))[0:22]
  • 手工指定:写入本地设备标识配置,重启后生效且优先级高于默认生成。
  • 替换场景:新设备可继承旧 UUID,确保邻居节点将其识别为同一逻辑节点。

7.4 架构组件

  • Gossip 通讯模块:节点发现、成员心跳、增量反熵同步。
  • bbolt 持久化层:桶设计包括 configssync_metaoffline_queueconflict_logs
  • 冲突解决引擎:时间戳最新优先(Last-Write-Wins)策略,保留审计轨迹。
  • 离线补同步队列:断网时写入队列,恢复后按时间顺序重放并去重确认。
  • 运维工具与监控 API:UUID 管理、同步状态监控、冲突处理。

7.5 同步流程

  1. 本地配置变更后计算 SHA-256 并写入 bbolt。
  2. Gossip 广播摘要;邻居比对后按需请求缺失配置内容。
  3. 接收端执行冲突检测,按最新时间戳合并并记录审计日志。
  4. 合并结果写入 configs 并更新时间戳,触发二次扩散。
  5. 离线节点恢复后,自动从邻居拉取缺失版本并补齐。

7.6 异常与恢复策略

  • 网络分区:分区内局部一致,合区后执行冲突归并与去重扩散。
  • 设备掉线:节点状态标记为 suspect/down,保留其最近有效配置快照。
  • 配置回滚:支持指定 config_sha256 或时间点回滚,并通过 Gossip 广播回滚版本。
  • 时钟漂移:启用 NTP 校时;漂移超阈值时标记低可信并告警。

7.7 监控 API

  • GET /api/v1/ops/sync/nodes:节点在线状态与最近同步时间。
  • GET /api/v1/ops/sync/status:全局同步进度、队列长度、补同步耗时。
  • GET /api/v1/ops/sync/conflicts:冲突列表、处理结果、责任节点。
  • POST /api/v1/ops/sync/reconcile:触发手动补同步与重算。
  • POST /api/v1/ops/uuid/assign:手工设置设备 UUID(重启后生效)。