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

eureka同步到nacos,暂停同步后,服务依然注册在nacos上,没有注销 #173

Closed
zhaoli2333 opened this issue Sep 23, 2020 · 4 comments
Assignees

Comments

@zhaoli2333
Copy link

zhaoli2333 commented Sep 23, 2020

产生

部署了多个nacos-sync实例,把注册的服务从eureka同步到nacos。然后,在nacos-sync后台对某个服务点击暂停同步。


期望

被同步到nacos的服务在nacos下线。


实际

没有下线,依然注册。


原因

nacos-sync通过nacos-client把从eureka读到的服务注册到nacos,本地维护一个注册列表,nacos-sync要代理列表里的真实服务和nacos建立心跳(实际上是代替真实的服务节点和nacos建立的心跳)。


另外nacos-sync同时也从nacos订阅了这个服务,本地还有另一个订阅列表。暂停同步的逻辑是从订阅列表获取服务,再去注册列表里面解除心跳。


当用户从后台点击暂停同步,实际上nacos-sync是从订阅列表把服务实例取出来,在一个一个的取消注册,断开心跳。


nacos-sync-A注销了注册实例后,nacos把最新变动推送到nacos-sync-B,nacos-sync-B从本地订阅列表把原有的服务实例删除。然后B执行了和A一样的定时任务(暂停同步的任务),这时B本地取不到订阅列表了,也就无法断开和nacos的心跳。nacos收到心跳后又重新把服务给注册上了。即服务在nacos无法下线。

@paderlol
Copy link
Contributor

我明白你的意思了,你是说因为Nacos通过事件已经删除了,但是本地未进行移除,导致注册数据会在另外一个集群继续保持,是这个意思吗?

@paderlol paderlol self-assigned this Sep 24, 2020
@zhaoli2333
Copy link
Author

zhaoli2333 commented Sep 24, 2020

我明白你的意思了,你是说因为Nacos通过事件已经删除了,但是本地未进行移除,导致注册数据会在另外一个集群继续保持,是这个意思吗?

是的,本质上是多nacos-sync实例部署环境下,nacos-client的注册列表和订阅列表不一致的问题。

@paderlol
Copy link
Contributor

paderlol commented Oct 2, 2020

这个问题实际上不是nacos client的问题,应该是暂停同步时,需要从Eureka本身的实例来进行移除,就可以了。

@paderlol
Copy link
Contributor

paderlol commented Oct 2, 2020

我来修复下这个问题,感谢你发现的问题

paderlol added a commit to paderlol/nacos-sync that referenced this issue Oct 2, 2020
@paderlol paderlol mentioned this issue Oct 2, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants