跳到主要内容

网关冗余

功能概述

双机热备用于在两台 GatewayRuntime 网关之间接管采集和业务工作。正常稳定运行时,一台处于“当前工作”状态,执行采集、数据转发、报警和规则引擎任务;另一台处于“待机”状态,接收同步数据,并在满足接管条件后启动这些任务。

配置的主备身份与当前由谁工作是两个概念。原主机恢复后是否自动回切,取决于共享仲裁配置和双方工作状态,不能统一理解为“主机恢复就一定接回工作”。

功能入口与状态检查

登录 GatewayRuntime Web,进入“系统管理 → 系统设置”,点击左侧“双机热备”。页面提供“编辑配置”“立即同步到对端”“切换主备”和刷新操作。

双机热备页面

区域重点检查
当前节点本机是当前工作、待机、正在接管、需要处理还是切换失败;采集、数据转发、报警和规则引擎四类任务是否与本机角色一致。
对端连接每条链路的传输状态、完整健康状态、连续失败次数、识别到的对端节点和对端角色。只有建立连接并通过组名、节点身份、角色和安全校验后,链路才是完整健康。
工作授权配置共享仲裁后,确认授权由且仅由当前工作节点持有,并检查授权到期时间、主备切换序号和最近切换错误。
历史数据保护查看受保护目标、待同步到对端、待写入数据库、Journal 和数据库写入授权状态。

主备身份与工作状态

以下以 A 为配置主机、B 为配置备机说明。

概念说明
配置主机 A“连接方式”选择“等待对端连接”,负责监听冗余连接。
配置备机 B“连接方式”选择“主动连接对端”,负责连接配置主机。
当前工作节点实际执行采集、数据转发、报警和规则引擎任务的网关,可以是 A,也可以是 B。
待机节点停止上述四类任务,保持冗余通信并接收工作节点的同步数据。

自动接管和“切换主备”只改变当前工作节点,不会修改两台网关的“连接方式”。判断哪台正在工作,应查看“本机角色”和四类任务状态,不能仅凭它原先被称为主机还是备机判断。

正常运行与数据同步

当 A 为当前工作节点、B 为待机节点时,两台网关的分工如下;B 接管后分工相反。

功能当前工作节点 A待机节点 B
连接现场设备并采集数据执行已启用的采集任务不主动采集现场设备
业务转发执行已启用的转发组和转发目标不启动业务转发
报警计算、规则引擎执行已配置并启用的任务停止执行
显示采集变量和设备状态显示本机采集结果显示从 A 同步来的结果
冗余连接、数据同步和历史补偿通信保持运行保持运行

待机节点上的采集数据显示依赖两端配置一致、冗余链路正常和数据同步成功。同步按“数据同步间隔”执行,默认 1000 毫秒,因此两端显示存在同步和网络延迟。内存变量不属于这一路采集实时值镜像范围,不能把待机页面理解为工作节点全部运行状态的完整复制。

“立即同步到对端”应在当前工作节点操作,用于将业务配置同步到待机节点,并推进历史补偿。执行前确认同步方向和两端配置备份;该操作会更新待机节点的业务配置。采集实时值仍按同步周期更新。两端各自的节点身份、网络设置和证书需要分别配置,业务配置同步不等于整机备份。

故障接管与主机恢复

当前工作节点宕机、关机或重启后,待机节点在所有已配置冗余链路连续探测失败达到“断线判定次数”时尝试接管。启用双网时,只要仍有一条完整健康的链路,就不会仅因另一条链路断开而判定对端失联。配置共享仲裁时,待机节点还必须取得工作授权,才能启动采集、数据转发、报警和规则引擎任务。

接管需要故障检测、工作授权和任务启动时间,不保证零中断。单个 PLC 或采集设备通信失败,不等同于整台网关失联;设备级冗余应在采集配置中单独设置。

假设 A 故障后 B 已接管,A 随后重新启动:

冗余模式原主机 A 恢复后的行为
已配置共享仲裁B 正常工作并持有有效授权时,A 保持待机,接收 B 的同步数据,不会仅凭配置主机身份抢回工作。如需交回 A,待双方连接和同步恢复后执行“切换主备”。
未配置共享仲裁,仅链路模式A 重新启动时会尝试开始工作。双方恢复通信后,如果两台都在工作,配置主机 A 具有优先权,系统会尝试让 B 转为待机。这一过程不能保证没有短暂的双机同时工作。

如果只是冗余链路恢复,双方已处于一台工作、一台待机的稳定状态,系统会保持现有分工,不会单凭配置主机身份发起回切。需要更换工作节点时,使用“切换主备”。

共享仲裁与双机同时工作

仅链路模式无法可靠区分“对端宕机”和“两端之间网络中断”,网络分区时可能出现两台同时采集、同时转发。需要防止双机同时工作时,应让两台网关访问共享存储上的同一个仲裁文件,并确认共享存储支持读写和文件锁;分别放在两台机器上的同名本地文件不能提供共享仲裁。工作节点无法维持有效授权时会停止业务任务,另一台也无法取得授权时,可能两台都保持停用。

配置操作步骤

配置前,确认两台网关均能访问需要接管的现场设备和转发目标,并准备各自使用的插件、证书和运行环境。在两端分别下载配置备份,选定首次承担工作的节点。

  1. 在两台网关分别点击“编辑配置”,填写相同的“冗余组名称”和“两端连接密钥”。
  2. 为两端填写不同的“本机节点名称”,并将“对端节点名称”填写为另一台的名称。
  3. 在 A 选择“等待对端连接”,在 B 选择“主动连接对端”,按下方参数表填写地址和两端证书。
  4. 按现场要求配置共享仲裁和第二链路。使用共享仲裁时,两端必须指向同一个共享文件。
  5. 打开“启用双机热备”,在两端分别点击“保存”并确认,等待连接和角色状态稳定。
  6. 确认只有一台处于“当前工作”状态;在该节点核对业务配置,然后点击“立即同步到对端”。
  7. 在待机节点核对采集变量值和设备状态,确认采集、数据转发、报警和规则引擎四类任务均已停止,再按后文完成切换验收。

参数说明

点击“编辑配置”可维护以下参数。

配置项说明
启用双机热备开启后参与双机协同和工作节点切换。关闭后本机独立运行,不参与对端连接和仲裁。不要用关闭此开关代替“切换主备”,否则可能与另一台同时工作。
冗余组名称两台网关必须填写同一个非空名称。名称不一致的节点不能建立控制关系。
本机节点名称当前网关的稳定唯一名称。启用双机热备时必填,两台网关不能使用相同名称。
对端节点名称当前网关期望连接的另一台节点名称。启用时必填,并应与对端的“本机节点名称”完全一致,避免错误节点接入。
连接方式配置主机选择“等待对端连接”,配置备机选择“主动连接对端”;两端必须互补。此项确定连接身份,不代表本机始终是当前工作节点。
对端地址第一条控制链路地址,通常为 IP:端口,不包含 http://https://。等待连接端填写本机监听地址,主动连接端填写可访问的对端地址。
启用双网 / 第二链路地址第二链路启用后地址必填,且不能与第一链路相同。建议两条链路使用不同网卡、交换机或网段;任一完整健康链路可维持对端在线判断。
两端连接密钥两台网关必须填写相同的复杂字符串,用于控制链路身份校验。它不等同于链路加密。
本机连接证书 / 信任的根证书启用双机热备时必填的双向 TLS 配置,两项必须全部填写。等待对端连接的主节点选择服务器证书,主动连接对端的备用节点选择客户端证书;每台网关信任签发对端证书的根证书。
加密协议 / 检查证书是否已撤销使用 TLS 时设置允许的协议版本和吊销检查策略;无特殊要求使用系统安全默认值。
双机共享仲裁文件可选增强项。两台网关如指向共享存储上的同一个 SQLite 文件,系统通过文件锁和短租约只允许一台取得工作授权。留空时仍可使用 mTLS 链路模式,但网络分区时无法提供防双活保护。配置时应确认两端都具备读写和文件锁能力。
工作授权时长共享仲裁租约有效期,单位毫秒,最小 3000,默认 15000。
工作授权续期租约续期周期,单位毫秒,最小 500,且不能超过授权时长的三分之一;默认 3000。
切换安全余量节点必须提前停止生产任务的安全窗口,单位毫秒,最小 500;与续期周期之和必须小于授权时长,默认 2000。
连接检查间隔冗余链路连接维护参数,影响重连检查和空闲连接清理,单位毫秒,最小 1000,默认 60000。它不等于完整接管耗时,不能直接用此值乘以“断线判定次数”作为切换时间保证。
断线判定次数所有已配置链路连续失败达到该次数后进入故障处理,范围 1 到 100,默认 3。配置共享仲裁时,节点仍必须取得工作授权才能激活生产任务。
数据同步间隔当前工作节点向待机节点同步采集变量值和设备状态的周期,单位毫秒,最小 1000,默认 1000。业务配置需要同步时,在当前工作节点执行“立即同步到对端”。
历史数据/报警补偿开启后,支持的历史目标先写本地可靠 Journal,再同步到对端,并在切换或数据库恢复后补写。该能力默认开启,与目标自身的双库镜像相互独立。
历史保护参数可调整单次同步条数、对端确认超时、本地待同步上限、数据库写入授权时长与续期、失败重试间隔。按断网时长、历史写入量、网络延迟、数据库负载和磁盘容量设置。

建议使用同一张 CA 分别签发主节点服务器证书和备用节点客户端证书。将 CA 公钥证书导入两端并选为信任根,将各自带私钥的连接证书导入对应节点;不要只凭 CN 判断是否为同一张 CA,应以证书指纹为准。

保存前检查

两台网关都要填写冗余组、本机节点和对端节点名称,连接方式必须互补、两端密钥必须一致,并完整填写两项 mTLS 证书;共享仲裁文件按现场条件选择,留空时会以链路模式运行且不具备分区防双活保护。保存后确认对端身份、链路完整健康、授权状态和四类生产任务状态,再在维护窗口进行切换演练。

手动切换操作与验证

“切换主备”用于主动更换当前工作节点,例如将工作从已接管的 B 交回恢复后的 A。它不会修改两台网关的连接身份。

  1. 确认两端冗余连接健康,目标节点可访问现场设备和转发目标,页面没有未处理的切换错误。
  2. 在当前工作节点点击“立即同步到对端”,等待成功提示,并核对待机节点的业务配置和采集数据显示。
  3. 在当前工作节点点击“切换主备”,确认“确定要切换当前工作的网关吗?”。
  4. 等待两端状态稳定,确认原工作节点变为“待机”,目标节点变为“当前工作”。
  5. 确认新工作节点恢复采集和业务转发,原工作节点的四类任务均已停止;配置共享仲裁时,核对工作授权已由新工作节点持有。
  6. 在接收端确认转发数据持续更新;使用历史补偿时,检查“历史数据保护”中待处理记录是否逐步减少。

如果提示未切换或“切换失败”,先刷新两端页面,核对实际工作节点和“最近切换错误”,再检查对端连接、工作授权和任务启动条件。不要连续反复点击切换,也不要通过关闭冗余强行启动另一台。

故障演练与验收

在允许业务短时中断的维护窗口进行下列操作。每个场景完成后,先恢复链路和稳定工作状态,再进行下一项。

演练场景通过标准
正常运行一台“当前工作”、另一台“待机”;待机端能够看到同步采集值,但不采集设备、不启动业务转发。
停止当前工作节点的软件或关闭其主机另一台在满足接管条件后开始采集和转发;接收端恢复更新。记录现场实际中断时间。
恢复原主机配置共享仲裁时,持有有效授权的接管节点继续工作,恢复节点待机;仅链路模式按“故障接管与主机恢复”所述规则检查最终角色。
手动交回原主机切换后仅原主机工作,另一台待机,采集和接收端转发均正常。
双网中断开一条链路另一条完整健康链路可用时,保持现有工作节点。
中断全部冗余链路,或共享存储不可用配置共享仲裁时,不允许两台同时持有工作授权;授权无法维持的节点停止业务,无法取得授权的节点不启动业务。

历史补偿只能重放已被保存且仍可访问的记录,不能补回停机期间从未采集到的数据,也不能保证所有业务转发协议都没有重复或丢失。应同时核对历史记录和实际接收端结果。

常见问题

现象检查与处理
备机能看到变量值,是否说明它也在采集?不一定。待机端显示的是同步值;以“本机角色”和“采集任务状态”判断是否在采集。
原主机恢复了,却仍由备机工作先检查共享仲裁。备机持有有效授权时,这是正常状态;需交回原主机时执行“切换主备”。仅链路模式已经处于一工作一待机时,也会保持现状。
待机节点数据不更新检查对端连接、两端变量配置和同步结果,在当前工作节点执行“立即同步到对端”后等待同步周期;内存变量不按采集实时值镜像同步。
备机没有接管检查是否所有链路均达到断线判定条件;配置共享仲裁时再检查共享文件访问和工作授权,最后查看“最近切换错误”及设备、转发目标启动条件。
两台都在采集或转发检查是否有一端关闭了冗余,以及是否仅链路模式发生网络分区。恢复冗余连接;需要防双活时配置同一个可靠共享仲裁文件,并重新验收。
网关已切换,但上位系统仍未恢复通信核对新工作节点的转发连接和接收端配置。主动连接网关服务的客户端,还应确认是否已连接到当前工作节点,并检查重连和地址切换配置。

历史数据与历史报警可靠性

双机热备启用后,历史数据和历史报警可使用主备历史补偿。该能力默认开启:系统会把历史事件先保存在本机 Journal 并同步到对端节点;节点取得工作授权并成为当前工作节点前,会先补写未完成入库的记录,写入标准 SQL 历史表时通过记录唯一键避免重复。因此,在主备切换、对端链路短时中断或运行时重启后,可补写仍在本地 Journal 或离线缓存中的历史记录,并避免已入库记录被重复写入。

项目说明
适用对象历史数据目标、历史报警目标。
前提条件启用双机热备,并保持“历史数据/报警补偿”开关开启。
适用数据库标准 SQL 写入链路:SqlServer、MySql、Sqlite、PostgreSql。
不适用范围QuestDB、TDengine、自定义 SQL 模式、历史表脚本、历史报警表脚本等自定义写入链路不纳入该去重与补写机制。
现场建议历史数据和历史报警目标建议同时开启离线缓存,并按断网时间、写入量、Journal 最大保留行数和缓存文件最大行数预留磁盘空间。上线前在维护窗口验证主备切换、断线、数据库短时不可用和重启恢复。

历史数据保护诊断

“历史数据保护”区域用于确认历史目标是否支持主备补偿、Journal 是否存在积压,以及当前节点是否持有目标库写入授权。启用双机热备并配置历史数据或历史报警目标后,建议在联调、切换演练和恢复后检查该区域。

区域说明
概览指标显示当前节点、最大序列、待同步到对端数量和待写入数据库数量。积压长时间大于 0 时,应检查双机链路、对端节点、目标数据库和离线缓存。
筛选条件可按 Journal 目标键、来源节点、记录类型、记录唯一键,以及是否待 Peer、待 DB 筛选事件。
目标支持列出历史数据目标和历史报警目标的可靠同步支持状态、插件名称、目标类型、不支持原因和 Journal 目标键。
Journal状态按目标键、来源节点和记录类型汇总最大序列、总行数、待 Peer、待 DB、最早积压时间和最新事件时间。
Epoch租约查看目标库租约的持有节点、租约到期时间和当前状态,用于判断当前节点是否具备补写权。
Journal事件查看单条历史事件的序列、来源节点、记录类型、记录唯一键、Peer/DB 标记和原始载荷,适合定位某个变量或报警为什么尚未补写。

保护支持状态为“不支持”时,常见原因包括启用自定义 SQL、启用历史表脚本、使用 QuestDB、TDengine 或其它非标准 SQL 写入链路。此类目标仍可使用自身离线缓存,但不纳入主备历史的幂等补写和诊断统计。

相关操作