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 远程历史”组合,既保证数据库高可用,又避免网关本地历史与中央历史不一致。
| 组件 | 高可用方式 | 切换时间 | 数据一致性 |
|---|---|---|---|
| 冗余网关 | 主备 + 负载均衡 VIP | 6~10 秒 | 项目与标签同步 |
| 数据库 | AlwaysOn / 流复制 | 10~30 秒 | 同步提交不丢数据 |
| 历史存储 | 远程历史提供者 + 中央库 | 随数据库切换 | 集中写入,避免分裂 |
| 客户端 | 连接 VIP,自动重连 | 用户无感 | 会话重建 |
四、故障转移机制与实操要点
故障转移不是“切过去就完事”,需要验证切换后标签值、报警状态、历史趋势是否连续。建议在测试环境模拟主网关断电、数据库主库宕机、网络分区三种场景,记录切换时间与数据缺口。
- 主网关故障:负载均衡器健康检查失败,流量切到备网关;备网关从共享数据库读取项目与历史,继续提供服务。
- 数据库主库故障:数据库集群自动切换主库,Ignition 通过连接字符串中的
MultiSubnetFailover=True快速重连。 - 网络分区:网关与数据库之间断链时,Ignition 应缓存历史到本地磁盘,恢复后补传,避免数据丢失。
五、案例与复盘:某水厂高可用改造
某水厂原有单台 Ignition 网关,一次工控机硬盘故障导致全厂监控中断 40 分钟。改造后采用两台网关主备、SQL Server AlwaysOn 双副本、HAProxy 提供 VIP。改造后模拟主网关断电,负载均衡器在 8 秒内切换,操作员仅需重新登录;数据库主库切换耗时 15 秒,历史趋势无断点。复盘发现两个改进点:一是备网关的项目版本需通过自动同步而非手工复制;二是历史缓存目录要放在共享存储或配置远程历史,避免备网关接管后本地历史为空。
高可用架构的最终检验标准是:任意单点故障时,操作员仍能看见关键画面、历史趋势连续、报警不丢失、控制指令可下发。围绕冗余网关、负载均衡、数据库高可用、历史同步与故障转移五个环节逐项验证,才能把 Ignition 从“能跑”提升到“敢停”。