
11-02 下午生产接口全部中断 43 分钟:发生了什么、为什么、以后怎么防。
15:49 到 16:32,小程序和后台的业务接口全部打不开,约 43 分钟没有一笔新订单。
直接原因是 ShenYu 网关内存里的路由表丢了:后台数据库里的路由一直完好,但网关不认了,所有请求被拒。故障开始前 1 分钟内,有人用共用的管理员账号在网关后台手工改了路由(新建又删除了 /payment、/settlement 分组),删除 /payment 后 2 秒订单就断了,所以这些手工改动最可能是起点,但它为什么会波及全部四个服务,还要看网关日志才能定论。我们先推送配置没救回来,最后重启网关恢复;重启时网关被起了两次,中间多出几分钟 502。
首版写的「今天没人改过网关配置」不对。当时只看了现存路由的修改时间,被删掉的分组不会留下修改时间;网关后台的「操作记录」显示今天 15:43–16:10 有 12 次手工改动。
网关查一张内存路由表决定请求交给哪个服务;路由由后台经 ZooKeeper 推过来。
北京时间;后台操作记录的时间原样是 UTC,已加 8 小时换算。
| 14:45 | 结算相关代码合入主分支(lianer-back !299、admin-next !26) |
| 14:47–15:48 | 结算服务生产发布 3 次(14:47、15:16、15:44),新后台发布 1 次,均成功 |
| 15:43:28 | 网关后台:新建规则 /payment/back/getCards,10 秒后删除 |
| 15:45:54 | 网关后台:修改 /settlement 分组的转发目标 |
| 15:48:03 | 网关后台:新建 /settlement 分组,18 秒后删除 |
| 15:48:33 | 网关后台:新建 /payment 分组 |
| 15:48:50 | 网关后台:删除 /payment 分组 |
| 15:48:52 | 最后一笔订单;之后 43 分钟零订单 |
| 15:53–15:54 | 网关后台:/settlement 分组改名为 /settlement1 又改回 |
| 16:00–16:06 | payment 服务生产发布(另一位同事),没有恢复 |
| 16:09–16:10 | 网关后台:删除 /settlement 分组、20 条规则、20 条接口登记 |
| 16:16 | William 报告线上全崩,开始排查 |
| 16:19 | 只读探测:/user 报 -107,/payment 报 -102;后台路由数据完整 |
| 约 16:25 | 经 William 同意,后台推送全部配置,接口全报成功,网关没变化 |
| 16:27 / 16:28 | 生产机上先后起了两个网关进程,入口变成 502 |
| 约 16:30 | 停掉两个进程,只起一个 |
| 16:32:39 | 第一笔新订单,业务恢复 |
| 17:02 | 复测 user、payment 正常 |
| 18:41 | 复测四个服务均正常;/settlement 仍不通(分组已被删) |
把能证实的、高度吻合但没证实的、完全不知道的分开写。
业务接口全断 43 分钟;人脸开门不走网关,一直正常。
| 时长 | 15:49 到 16:32,约 43 分钟 |
| 范围 | 小程序(会员、教练、店长)和新后台的全部业务接口 |
| 订单 | 中断期间 0 笔;前一小时约每 10 分钟 7–22 笔。恢复后 16:30–17:00 共 57 笔,有补单 |
| 未受影响 | 门店人脸开门(期间每 10 分钟仍有 2–5 次成功开门)、数据库、各服务进程 |
| 遗留 | 结算管理相关接口目前仍不通,因为 /settlement 分组在 16:10 被删除 |
先只读定位,再推送配置,最后重启;中间有两处弯路。
| 16:19 | 只读查后台:插件、分组、规则都在,判断是网关内存和后台不同步 |
| 约 16:25 | 经同意推送 10 个插件配置、接口登记和全量数据:全报成功但无效 |
| 16:27 | 给出重启命令;第一版用了旧手册路径,与生产实际不符,按现场修正 |
| 16:29 | 发现两个网关进程,指导停掉两个只起一个 |
| 16:32 | 恢复;17:02、18:41 两次复测 |
先只读、不乱改;动生产前征得同意;恢复后用真实接口逐个复测。
一是只看了现存路由的修改时间,漏掉了后台「操作记录」,误判为没人改过;二是重启手册路径过时、没有进程数检查,导致网关被起了两次。
四条规矩,写进值班手册。
网关后台的一次删除就可能让全站停摆。改之前在群里说,改完马上用真实接口验证,发现异常立刻回退。
网关后台首页的「操作记录」能直接看到谁、几点、改了什么(时间要加 8 小时)。这次漏看,多绕了半小时判断。
后台只保证写出去了,网关收没收到要用真实接口验证。
启停走固定脚本,启动前检查进程数,不为 0 就拒绝。
状态截至 2026-11-02 18:45;负责人按角色写,具体人选待 William 指定。
| P0 已完成 | 恢复生产路由(单进程网关);出迁移方案并发到文档站 |
| P0 今天 | 结算负责人:确认 16:10 删除 /settlement 是否有意;若不是,按代码恢复结算路由(需 William 同意) |
| P0 今天 | 运维值班:保存网关、ZooKeeper、nginx 15:30–16:40 的日志,防止被清理 |
| P0 本周 | 后端负责人:与当时操作后台的同事核对 15:43–16:10 每一步的目的 |
| P1 本周 | 运维值班:网关启停做成固定脚本或 Jenkins 任务,带进程数检查;更新手册路径 |
| P1 本周 | 运维值班:每分钟真实接口探测 + 订单量骤降告警,发企微群 |
| P1 本周 | 后端负责人:网关后台改个人账号,改路由需第二人确认;每天只读导出路由进 Git |
| P2 本周 | 后端负责人:只读审计网关鉴权(身份字段透传),待 William 批准 |
| P2 双11 后 | William:按迁移方案逐步下线 ShenYu;ZooKeeper 保留 |
给技术同学核对用;不含地址和密钥。
| 后台操作记录 | 网关后台首页「操作记录」,共 12 条,全是今天,操作人均为共用 admin |
| 后台现状 | 4 个 dubbo 分组;规则 /payment 587、/user 207、/ground 68、/coach 66;接口登记 929 条 |
| 网关返回 | 16:19 /user -107、/payment -102;16:29 前后 502;17:02 起 user、payment 正常;18:41 四个服务正常,/settlement -107 |
| 生产进程 | William 贴出:两个网关进程分别 16:27、16:28 启动;后台与 ZooKeeper 自 2025 年运行 |
| Jenkins | 今日生产发布:结算 14:47、15:16、15:44,新后台 14:47,payment 16:00,均成功 |
| GitLab | 今日合入:lianer-back !299、admin-next !26(14:45,结算数据同步) |
| 生产库 | 订单与开门记录按 10 分钟统计 |
操作记录显示 07:43–08:10,按 UTC 加 8 小时为 15:43–16:10。依据:15:48:50 删除与 15:48:52 停单衔接;15:43 的改动在 15:44 结算发布前 1 分钟;网关后台服务的报错时间也是 UTC。