consul 遇到个问题,求教高手

2023-07-16 21:08:04 +08:00
 jackge0323

我是用 go sdk 连接的 consul 集群,问题出在注销服务的时候,情况如下:

consul 是通过 helm 部署在 kubernetes 集群上的,部署完有一个无头 Service ,其中包含三个 consul agent 的地址,go sdk 是通过完整的这个 Service 地址来访问 consul ,注册服务是没问题的,但是注销服务的时候出问题了。

无头 service 返回三个 agent 的地址,sdk 连接上之后会时不时的切换连接的地址,这时候就会导致比如我服务启动的时候是连接的 agent 0 ,注册服务也是在 agent 0 上注册的,结果注销的时候连接的是 agent 1 ,但是 agent 1 上并没有注册我当前的服务,找不到 Service Id ,导致注销失败。

研究了一圈没找到解决方案,求助大佬帮忙解惑。

1099 次点击
所在节点    程序员
5 条回复
rrfeng
2023-07-16 21:35:27 +08:00
你这三个 consul 不是一个集群???
jackge0323
2023-07-16 23:05:25 +08:00
@rrfeng 是一个集群,都是 server 模式,其中一个是 leader
julyclyde
2023-07-19 12:18:58 +08:00
@jackge0323 既然是同一个集群,在哪儿注销有什么区别?
jackge0323
2023-07-19 13:54:40 +08:00
@julyclyde 这就是问题所在,consul 的服务注册是通过 agent 注册的,你在 agent 0 上注册的,在 agent 1 上注销的话是找不到的,但是你在 agent 1 上是能查到这个服务的,但是如果你此时运行 consul services deregister id 这条命令注销的话,会提示你找不到 service id 。这个服务只能通过 agent 0 注销,通过 catalog 注销是可以注销,但是他这个同步是以 agent 为主,也就是说就算你通过 catalog 注销了,一会这个服务就又回来了,因为 agent 没注销。不明白他为什么要这样设定。
julyclyde
2023-07-25 07:58:46 +08:00
@jackge0323 consul 这么弱??多个之间居然不是功能等价的?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/957201

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX