一、问题描述

测试同学反馈:测试环境 APP 的数据全都消失了,并且系统表现异常。初步诊断网关层,发现大量接口突发 503 服务不可用 响应。这意味着请求无法正确转发到后端服务,用户体验严重受影响。
从日志可以看出,网关无法定位可用的 app 实例,导致请求失败。
notion image
 

二、初步检查:服务部署与 Kubernetes 资源

为排除“服务部署中”或“K8s 压力大”导致不可用的可能性,逐项排查确认:
1、Rancher 节点运行正常,没有正在滚动重启或失联的容器。
notion image
 
2、Kubernetes 告警清零,主要监控项(网络、内存、磁盘、PID、节点 Ready 状态)均正常:
3、node 资源使用情况良好
这些信息确认,服务层不会因为部署中断或资源饱和导致节点不可达。
 

三、核心问题定位:服务实例在 Nacos 中丢失

接下来重点检查 Nacos 注册中心:
  • 在 Nacos Dashboard 中,app 服务在测试时刻并未注册活跃节点,意味着 Heartbeat 心跳上报失败,服务被移除。
  • 网关日志显示服务实例重复注册与注销:
    • notion image
“一会注册,一会 remove 掉”,说明服务实例未持续注册。
  • app 服务日志也存在异常,暗示可能网络连接不稳或心跳异常中断。
    • notion image
 
这暗示服务内部发生了网络抖动或连接中断,导致客户端与 Nacos 注册中心心跳失联,从而触发自动清理机制。
 

四、深入分析 Nacos 服务端日志

重点查看 naming-server.log,定位心跳周期相关异常:
1. 客户端频繁断开
 
日志显示,Nacos 捕捉到 client connection … disconnect, remove instances and subscribers 异常,出现频率约为每隔 60 秒一次,为 Nacos 默认心跳失效周期。多次断连 IP 位于 10.20.162.25 段。
2. 服务自动清理
出现多次类似:
说明因心跳丢失,Nacos 已执行实例下线清理机制 。
3. 原因为 Kubernetes 网络异常
根据时间对齐分析,断线时段正值集群中网络短暂波动,导致 TCP 长连接中断,进而触发 Nacos 客户端反复断连。
 

五、解决方案与改进建议

  1. 增强服务注册弹性
      • 在关键服务 Pod 上增加副本:将 app 副本从 1 个扩容为 2~3 个,避免单点失联引发全链路不可用。 在该问题中,临时解决处理也是先增加节点数,快速让服务可用。
  1. 优化心跳配置
      • 根据实际网络不稳定情况,微调 Nacos 客户端心跳间隔、超时,如延长:
        • 这样即使短暂断连,Nacos 不会立刻清理实例。
    1. 监控与告警增强
        • 在 Nacos 上启用 trace 插件,监听 DEREGISTER_INSTANCE_TRACE_EVENT,实时捕获实例掉线事件。
        • 配合 Prometheus + Grafana 监控 Nacos 客户端连接数与异常率。
     
     
    从零搭建 GitLab + Runner:完整自建 CI/CD 环境实战指南一次奇怪的 Dubbo RPC 字段丢失问题
    Loading...