NACOS 服务实例信息未正常清理
2024-2-20
| 2024-2-21
字数 877阅读时长 3 分钟
type
Post
status
Published
date
Feb 20, 2024
slug
summary
遇到一个奇怪的问题, 服务明明下线了, 但是 nacos 里面注册信息还在, 然后开始填坑
tags
Arthas
Nacos
category
技术分享
icon
password
AI summary
Last edited time
Feb 21, 2024 01:25 AM
运维同事反馈, 线上某个 spring boot 应用服务挂了, 让我看看.
notion image
但是, 这个 188 节点机器上的我们之前就已经下线了, 怎么会告警?
排查链路, 我们的 prometheus 监控数据来源是从 nacos 自动获取的, 搜索一下 nacos 的服务注册信息, 确实还有这个节点的注册信息
notion image
尝试手动清理实例信息
结果发现服务实例还在, openapi 虽然返回 {"code":0,"message":"success","data":"ok"}, 但是实例注册信息还在
用 arthas 看看调用情况吧
查看调用链路
notion image
查看源码 com.alibaba.nacos.naming.core.InstanceOperatorClientImpl#removeInstance
可以判断命中了 if (!clientManager.contains(clientId)) 分支, 并没有执行下面的真实删除逻辑
查看一下这个 clientManager
ClientManager 负责管理所有接入客户端(包含服务端提供端/客户订阅端)的连接信息维护工作
notion image
查看源码com.alibaba.nacos.naming.core.v2.client.manager.ClientManagerDelegate
感觉通过 openapi 的方式注销实例的情况, 可能走不通了, 看一下com.alibaba.nacos.naming.core.v2.client.Client#removeServiceInstance方法还有哪些地方使用吧
notion image
notion image
com.alibaba.nacos.naming.healthcheck.heartbeat.ExpiredInstanceChecker 源码
ExpiredInstanceCheckerInstanceBeatCheckTaskClientBeatCheckTaskV2ClientBeatCheckTaskV2

问题的解决

最后, 发现根本原因是, 运维的流水线构建时, 没有考虑到 docker 镜像制作的工作空间问题, 并发了, 导致了两个原本应该使用不同 jar 包的 docker 镜像, 实际上制作出来的是同一个服务镜像, 恰好这个错误的镜像在 188 机器上运行

📎 参考文章

  • Arthas
  • Nacos
  • 阿里云 DTS java 客户端配置openwrt 上设置 zerotier 并打通局域网
    Loading...