V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jackge0323
V2EX  ›  程序员

consul 遇到个问题,求教高手

  •  
  •   jackge0323 · 2023-07-16 21:08:04 +08:00 · 1139 次点击
    这是一个创建于 524 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是用 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 ,导致注销失败。

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

    5 条回复    2023-07-25 07:58:46 +08:00
    rrfeng
        1
    rrfeng  
       2023-07-16 21:35:27 +08:00 via Android
    你这三个 consul 不是一个集群???
    jackge0323
        2
    jackge0323  
    OP
       2023-07-16 23:05:25 +08:00
    @rrfeng 是一个集群,都是 server 模式,其中一个是 leader
    julyclyde
        3
    julyclyde  
       2023-07-19 12:18:58 +08:00
    @jackge0323 既然是同一个集群,在哪儿注销有什么区别?
    jackge0323
        4
    jackge0323  
    OP
       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
        5
    julyclyde  
       2023-07-25 07:58:46 +08:00
    @jackge0323 consul 这么弱??多个之间居然不是功能等价的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2670 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:22 · PVG 19:22 · LAX 03:22 · JFK 06:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.