本节摘要:可用性不是"少坏"而是"坏了不停"。本节按设备、链路、网关、数据四层给出冗余设计,重点推演网关主备切换的完整状态机与数据不丢的落盘策略,并给一套切换演练的实施方法。
先讲一次真实的事故。某厂的采集网关主机在台风夜断电重启,重启本身只花了两分钟,但整个采集系统停摆了一个多小时——重启后 UA 订阅全部要客户端重建、点表映射配置里有两处手工改动没有备份、恢复过程中工程师又误把测试点表当生产配置发布,来回折腾。事故报告里写的原因是"雷雨断电",但真正的问题是三个:**系统没有备机、配置没有版本管理、恢复没有演练过。**可用性设计的全部内容,几乎都是对这三句话的回答。
把可用性目标先定量化。工程上常用"年度可用率"表述,但对采集系统更贴切的指标是两个:单次故障的最长数据中断时长(决定丢多少数据、画面黑多久)与恢复是否需要人工介入(决定半夜要不要叫人)。本章的所有设计,都围绕把这两个指标压进可接受范围展开。
阅读完本节,你应当能够:
沿数据流从下往上数,每层都有单点风险,逐层给对策。
设备层:总线上的每台从站都是潜在的离线点。对策不是冗余设备(不经济),而是 4.1 讲过的质量戳传递——从站离线时上游立刻知道"这里的数不可信",坏数据可标注就比静默错数强得多。链路层:RS-485 主干被挖断则整条总线消失。对策是环网或双总线的关键区段设计,非关键区段接受离线加告警。网关层:整个采集系统的咽喉,本节的主角,下一节专讲。数据层:网关收到但尚未发布的值,在断电时会丢。对策是本地落盘与断点续传,本节第三部分展开。
四层里最容易漏检的是"隐性单点":供电(网关与交换机谁在给它供电)、时钟源(NTP 服务器只有一台,它挂了证书校验跟着出问题)、配置存储(配置只存在网关本机,机器坏了配置也就没了)。找单点的正确姿势是沿数据流画一张图,把每个节点追问一句"它坏了会怎样、多久发现、怎么恢复"——三问问到答不上来,那里就是欠账。
主备冗余的标准形态:两台网关挂同一条串行总线与同一网络,生产者与消费者都配置两个可达地址,同一时刻只有一台作为 Modbus 主站轮询(否则两个主站打架,总线轮询翻倍还互相干扰),另一台热备。
切换的关键不是"备机顶上"这一瞬间,而是备机怎么知道该顶上、顶上后怎么不撞车。工程上靠三种机制配合:健康探测(备机定期探测主机心跳,连续丢失则接管)、仲裁(两机通过共享的仲裁通道确认唯一主站身份,防止双主)、回切策略(主机恢复后是自动夺回还是保持备机为生产者——推荐后者,避免故障反复时系统来回震荡,回切安排在维护窗口手动执行)。
推演一遍双主竞态:主机假死(网络抖动但进程还活着),备机心跳超时发起接管,仲裁通道里主机仍有响应,仲裁判主机存活,备机放弃接管退回待命——一次抖动没有造成双主。再推演真死:主机断电,备机仲裁无人应答,接管成功,两秒量级内顶上,订阅方靠客户端的重连机制自动切到备机地址。两个剧本走通,冗余才算成立。仲裁通道本身不能是单点——它通常是一条独立的网络路径,与业务网络物理分开,否则"网络抖动"会同时打掉心跳与仲裁,系统行为就不可预测了。

切换期间与故障期间的总线数据,网关应当先落盘再发布:轮询得到的值写入本地持久化队列(带采集时刻),发布层按序消费;发布失败或消费者离线时,队列保留数据,待链路恢复后按时刻补发。这套机制把"故障期间的数据"从"永久丢失"变成"延迟到达",对计量与能耗类应用是质变——统计口径不再因一次断电而出现豁口。
落盘设计有三个参数要权衡:队列容量(断多久的数据要兜得住,按最坏恢复时长乘数据速率估)、写入策略(每条落盘太伤存储寿命,批量落盘要在掉电窗口内保证不丢超过一批)、补发顺序(严格按采集时刻,消费者按时刻戳去重)。备机接管后的续传要处理"两机数据合并":备机从接管时刻起继续落盘,主机修复后其队列中接管时刻之后的数据应废弃(避免重复),之前的正常数据照常补发——时刻戳是合并的唯一裁判。
冗余设计完成只是纸面可靠,只有演练过的切换才是真切换。演练按脚本走四步:拔主机电源,记录备机接管耗时与订阅方表现;恢复主机,确认其回备位、不夺权;模拟仲裁通道故障,确认系统行为可预期(退化为单机而不是双主);双机同时断电再恢复,确认角色协商结果确定、数据队列无重复。每步记录实测时间线,产出演练报告。
⚠️ 常见坑:演练只在验收前做一次。系统在此后的变更(固件升级、参数调整、网络改造)都可能悄悄破坏切换逻辑,把切换演练列入半年度运维计划,每次演练都对着上次的报告核对指标有没有退化。
高可用设计讲了不少,退一步同样重要:**冗余是有成本的,不是所有系统都值得上主备。**判断依据还是本章开头的两个指标——如果业务能容忍的数据中断是分钟级(比如汇总统计类采集),单机加快速恢复预案(自动化重启脚本加配置备份)就够了,主备的采购与运维成本省下来;如果消费方是控制相关的显示与告警,中断以秒计价,主备才是刚需。
一个折中形态也值得知道:温备——备机不常驻运行,配置同步但平时关机,故障时人工或脚本开机接管。切换以分钟计,换来的是备机零老化、零日常维护。对中断容忍在十分钟级的场景,温备是性价比之王。可用性设计的成熟标志,不是"什么都双机",而是每一层冗余都有明确的中断容忍度作依据。
演练记录的归档给个最小集:触发方式、切换耗时、丢数据量、恢复动作、异常清单五项。有这五项,两次演练才可比,冗余能力才谈得上被度量——度量不了的冗余与没有一样,区别只是花了两倍的钱。另外,切换成功后别急着收工,把主节点手动加回来再演一次回切:半数切换故障发生在回切路上,只演"切过去"不演"切回来"的演练,覆盖了一半都不到。
冗余与安全都布防完了,下一节把全部措施收拢成一张可以贴墙的清单。