Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

客户端断电,管理台一直能查到实例 #12095

Closed
daifang-code opened this issue May 14, 2024 · 7 comments
Closed

客户端断电,管理台一直能查到实例 #12095

daifang-code opened this issue May 14, 2024 · 7 comments

Comments

@daifang-code
Copy link

nacos-client:1.4.0,2.0.3,2.2.3,nacos-server:2.2.3

nacos2.x版本使用长连接维持实例信息,项目测试容灾,服务器断电,发现实例在管理台上一直存在

期间测试nacos-cleint版本,1.4.0版本不会存在该问题,2.0.3以及2.2.3都存在该问题

通过长连接维护实例信息没问题,但如果发生服务器断电,该长连接应该已经断开,为什么还会一直能查到实例信息呢。

该问题很好复现,只要服务器断电,就能100%复现

@busishe
Copy link

busishe commented May 14, 2024

和楼主遇到同样的问题,我们用的是2.3.2的server,2.2.0的java client。
我们微服务搭在私有K8S中,刚开始发现,有服务误注册的现象,即A服务下的应用(假设地址为10.10.10.10),注册到了B服务中。
仔细排查发现,其实是10.10.10.10这个IP,曾经分配给过B服务下的容器,但是B容器启停后,可能IP变成了10.10.10.11,此时B服务中会同时注册10.10.10.10和10.10.10.11,这个无效的IP并没有被清除。
我推测,从nacos1升级到2以后,探活机制发生改变,容器异常终止时,某些资源未被释放,导致注册中心误以为应用还存活。

@busishe
Copy link

busishe commented May 14, 2024

#11258

似乎2.3.0BETA版本后修复了这个问题,明天我们试下

@KomachiSion
Copy link
Collaborator

2.2.X版本应该有这个问题,其他版本应该都没有这个问题,tcp连接断开会让数据同时移除,如果是tcp连接假死,连接心跳也会主动移除连接(2.2.X版本心跳移除有bug)。

如果是1.X的客户端,那和长连接就无关,单纯就是心跳还在续约。如果可以打开naming-event日志的debug级别, 检索下这个服务的ip的心跳是否还在一直发起。

@q710245300
Copy link

q710245300 commented May 15, 2024

2.2.X版本应该有这个问题,其他版本应该都没有这个问题,tcp连接断开会让数据同时移除,如果是tcp连接假死,连接心跳也会主动移除连接(2.2.X版本心跳移除有bug)。

如果是1.X的客户端,那和长连接就无关,单纯就是心跳还在续约。如果可以打开naming-event日志的debug级别, 检索下这个服务的ip的心跳是否还在一直发起。

@KomachiSion 请问

  1. 具体是server版本的问题,还是client版本的问题呢?
  2. 另外应用异常重启未关闭长连接会导致k8s internal ip 和应用监听端口一直保持嘛?
  3. 是否有稳定复现的方法呢?

@daifang-code
Copy link
Author

2.2.X版本应该有这个问题,其他版本应该都没有这个问题,tcp连接断开会让数据同时移除,如果是tcp连接假死,连接心跳也会主动移除连接(2.2.X版本心跳移除有bug)。

如果是1.X的客户端,那和长连接就无关,单纯就是心跳还在续约。如果可以打开naming-event日志的debug级别, 检索下这个服务的ip的心跳是否还在一直发起。

心跳移除有bug的问题,除了升级版本,是否有其他修复方案呢?我们这边升级不是很方便,有没有类似检测的参数能规避这个问题的

@KomachiSion
Copy link
Collaborator

2.2.X版本应该有这个问题,其他版本应该都没有这个问题,tcp连接断开会让数据同时移除,如果是tcp连接假死,连接心跳也会主动移除连接(2.2.X版本心跳移除有bug)。
如果是1.X的客户端,那和长连接就无关,单纯就是心跳还在续约。如果可以打开naming-event日志的debug级别, 检索下这个服务的ip的心跳是否还在一直发起。

心跳移除有bug的问题,除了升级版本,是否有其他修复方案呢?我们这边升级不是很方便,有没有类似检测的参数能规避这个问题的

自行修复编译打包:

  1. 找到你使用的这个版本的tag,以此为准拉取新分支
  2. 找到修复此问题的PR,cherry-pick到你的新分支
  3. 打包,部署到你的环境。

@KomachiSion
Copy link
Collaborator

No more response from author for a long time, and this problem seems new version has solved this problem.

@KomachiSion KomachiSion closed this as not planned Won't fix, can't repro, duplicate, stale May 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants