4. Ignition高可用架构设计

Ignition 在单机模式下已经能覆盖大多数中小型项目,但当系统进入企业级生产环境,停机窗口往往以“分钟损失”计算。高可用架构的目标不是让故障永不发生,而是让故障发生时,操作员几乎无感、数据不丢、控制不中断。本章围绕冗余网关、负载均衡、数据库高可用、历史数据同步与故障转移五个关键点,构建一套可落地的 Ignition 高可用方案。

一、核心原理:高可用不是“多装一套”

Ignition 的高可用本质上是把“单点”拆成“可切换的成对组件”。网关负责客户端连接、项目运行、标签提供与历史存储;数据库负责历史与配置持久化;客户端与设备通过统一入口访问。高可用设计要回答三个问题:谁在对外提供服务、谁在后台保持同步、故障时谁接管。

冗余网关通常采用“主备”或“双活”模式。主备模式下,主网关承担全部客户端与设备通信,备网关通过冗余同步保持项目、标签与历史缓存一致;双活模式下,两台网关同时服务不同客户端,但需要共享数据库与历史存储,避免历史数据分裂。企业部署中,主备更易保证一致性,双活更强调负载与容量。

关键原则:冗余网关必须共享同一套数据库或历史存储,否则故障转移后历史数据会出现“断档”或“重复”。网关之间的项目版本、标签定义、安全策略必须保持同步,任何手工修改都要通过版本控制或同步机制下发。

二、冗余网关与负载均衡的配合

负载均衡层位于客户端与网关之间,常见做法是使用 F5、Nginx、HAProxy 或 Windows NLB。负载均衡器对外暴露一个虚拟 IP(VIP),客户端连接 VIP,由负载均衡器转发到主网关。当主网关故障时,负载均衡器将流量切换到备网关,客户端只需重连 VIP,无需修改项目配置。

负载均衡策略建议采用“主备 + 健康检查”而非简单轮询。轮询会把客户端分散到两台网关,若两台网关未共享会话与历史,操作员可能看到不一致的标签值。健康检查应探测网关的 8088 端口与项目运行状态,而不仅是 TCP 连通性。

# HAProxy 主备健康检查示例
backend ignition_gateway
    mode tcp
    option tcp-check
    balance first
    server ign-master 10.10.20.11:8088 check inter 3s fall 2 rise 2
    server ign-standby 10.10.20.12:8088 check inter 3s fall 2 rise 2 backup

上述配置中,balance first 表示优先使用第一台可用服务器,backup 标记备机。当主机健康检查失败两次后,流量自动切到备机。切换时间通常在 6~10 秒内,操作员会经历一次短暂重连。

三、数据库高可用与历史数据同步

Ignition 的历史数据、报警记录、审计日志通常存放在 SQL Server、PostgreSQL 或 MySQL 中。数据库高可用可采用 AlwaysOn 可用性组、流复制或共享存储集群。核心要求是:数据库故障切换后,Ignition 能自动重连到新的主库,且历史数据不丢失。

历史数据同步有两种典型路径:一是数据库层同步,由数据库自身的主从复制完成;二是 Ignition 层同步,通过远程历史提供者(Remote History Provider)将历史写入中央数据库。企业部署推荐“数据库层同步 + Ignition 远程历史”组合,既保证数据库高可用,又避免网关本地历史与中央历史不一致。

组件高可用方式切换时间数据一致性
冗余网关主备 + 负载均衡 VIP6~10 秒项目与标签同步
数据库AlwaysOn / 流复制10~30 秒同步提交不丢数据
历史存储远程历史提供者 + 中央库随数据库切换集中写入,避免分裂
客户端连接 VIP,自动重连用户无感会话重建

四、故障转移机制与实操要点

故障转移不是“切过去就完事”,需要验证切换后标签值、报警状态、历史趋势是否连续。建议在测试环境模拟主网关断电、数据库主库宕机、网络分区三种场景,记录切换时间与数据缺口。

  1. 主网关故障:负载均衡器健康检查失败,流量切到备网关;备网关从共享数据库读取项目与历史,继续提供服务。
  2. 数据库主库故障:数据库集群自动切换主库,Ignition 通过连接字符串中的 MultiSubnetFailover=True 快速重连。
  3. 网络分区:网关与数据库之间断链时,Ignition 应缓存历史到本地磁盘,恢复后补传,避免数据丢失。
常见误区:只做网关冗余,不做数据库冗余。主网关切换后,备网关连不上数据库,历史与报警全部失效。另一个误区是使用轮询负载均衡,导致两台网关同时写历史,出现重复记录。务必确保同一时刻只有一个历史写入主节点。
Ignition 高可用架构:冗余网关 + 负载均衡 + 数据库高可用 操作员客户端 Perspective / Vision 工程师客户端 Designer / 项目发布 移动端 / 报表 Web / API 访问 负载均衡 / VIP 10.10.20.10 HAProxy / F5 / NLB · 健康检查 8088 主网关 Master 10.10.20.11 · 项目运行 · 标签提供 历史缓存 · 报警引擎 备网关 Standby 10.10.20.12 · 项目同步 · 标签同步 待命接管 · 历史补传 数据库主库 Primary SQL Server AlwaysOn / PostgreSQL 历史 · 报警 · 审计 · 配置 数据库备库 Secondary 同步复制 · 自动故障转移 只读报表 · 历史备份 项目/标签同步 数据同步复制 故障时流量切换

五、案例与复盘:某水厂高可用改造

某水厂原有单台 Ignition 网关,一次工控机硬盘故障导致全厂监控中断 40 分钟。改造后采用两台网关主备、SQL Server AlwaysOn 双副本、HAProxy 提供 VIP。改造后模拟主网关断电,负载均衡器在 8 秒内切换,操作员仅需重新登录;数据库主库切换耗时 15 秒,历史趋势无断点。复盘发现两个改进点:一是备网关的项目版本需通过自动同步而非手工复制;二是历史缓存目录要放在共享存储或配置远程历史,避免备网关接管后本地历史为空。

落地建议:先做数据库高可用,再做网关冗余,最后接入负载均衡。顺序反了会导致切换后数据不一致,排查成本极高。每次变更后,用“拔线测试”验证真实切换时间,并记录到运维手册。

高可用架构的最终检验标准是:任意单点故障时,操作员仍能看见关键画面、历史趋势连续、报警不丢失、控制指令可下发。围绕冗余网关、负载均衡、数据库高可用、历史同步与故障转移五个环节逐项验证,才能把 Ignition 从“能跑”提升到“敢停”。