一次深夜生产事故教会我们的事:高可用不是配置出来的

一次深夜生产事故教会我们的事:高可用不是配置出来的

凌晨两点,一家制造客户的排产系统全盘告警。我们以为“做了主从、开了哨兵”就高可用了,直到那次事故把三个被忽略的盲区一起点亮:脑裂、监控盲区、没人敢拍板的流程。复盘不是为了追责,而是把教训变成下一次的护栏。

有些课,只有生产环境在凌晨两点给你上。

下面这件事,发生在我们交付的一家大型制造客户身上。为了保护对方,细节做了脱敏,但教训是百分之百真实的。


事故时间线

23:47 客户夜班班长来电:排产系统全盘告警,车间大屏空白。

23:50 我们远程接入。主数据库心跳丢失,从库没自动接管——本该发生的“高可用切换”没有发生。

00:20 排查发现:主从之间的网络抖动触发了哨兵误判,哨兵把主库标记下线,却又因配置冲突没敢提升从库。系统卡在“主已死、从未立”的半死状态。

01:05 手动强制提升从库,业务恢复写能力。但部分在抖动期间写入主库、尚未同步的数据,需要人工核对。

02:30 数据核对完成,系统完全恢复。前后 2 小时 43 分。


三个被我们忽略的盲区

复盘会开得很安静。问题不在“没做高可用”,而在我们认为“做了就等于有了”。

盲区一:高可用组件本身也会误判。
哨兵、keepalived 这些“保命工具”,本质是另一个会出 bug 的软件。我们配了,却从没演练过“它误判时怎么办”。那晚它真的误判了,我们才发现自己对它的信任过头了。

盲区二:监控有死角。
我们监控了“数据库是否存活”,却没监控“主从数据延迟是否超过阈值”。结果故障前一个小时,从库就已经落后主库十几分钟,而没人看见。等切换发生时,这十几分钟成了必须人工修补的窟窿。

盲区三:出事了,没人敢拍板。
最耗时的不是修,而是“谁来决定强制提升从库”。流程文档里写的是“升级到值班经理”,可那晚经理在飞机上。我们卡在等待授权里,白白耗掉半小时。


我们把教训变成了三条护栏

复盘不是追责,是给下一次装护栏。

  1. 高可用要演练,不是配置。 现在每个关键系统上线前,我们强制做一次“拔网线演练”:真的把主库网络掐断,看从库能不能在约定时间内干净接管。演练发现的 bug,比线上事故温柔一万倍。

  2. 监控要盯“差距”,不只盯“生死”。 主从延迟、队列积压、磁盘剩余——这些“还活着但快不行”的指标,比心跳线重要得多。我们把它们全部纳入告警,且分了三级,避免半夜狼来了。

  3. 决策权要前置授权。 我们和客户重新签了一份“应急授权书”:达到某些明确阈值时,一线工程师有权直接执行强制切换,事后补报。把“等批准”从关键路径上拿掉。


写在最后

高可用从来不是买几个组件、勾几个选项就能兑现的承诺。它是可演练的流程、可观测的指标、以及有人在凌晨两点敢担责的系统工程。

那晚之后,我们内部多了一句口头禅:“配了”不等于“有了”,演练过才算。

金兰信息——专注为大中型企事业单位、科研院所及高端制造业提供定制化信息系统与智能解决方案。我们做的不只是能跑的系统,更是半夜不会把你丢下的系统。

留下您的需求

填写后我们将尽快与您联系