Eureka 客户端有时会注册错误的主机名

时间:2021-07-07 03:14:05

标签: cluster-computing spring-cloud netflix-eureka

我有一个关于尤里卡的问题,但这个问题的解决方案根本没有帮助。在此处查看类似问题: Another similar issue

好吧,在我的问题中,我正在尝试基于 eureka 构建一个优雅的发布模块。通过在实际关闭之前拉下 eureka 中的任何服务,以确保在关闭指定应用程序时没有负载平衡异常。

我已经测试了将 eureka.instance.preferIpAddress 设置为 false 和 true 的情况。

eureka.instance.preferIpAddress=false 时,ribbon 将无法识别那些使用机器名称注册的应用程序,并且会抛出无负载均衡器异常。

eureka.instance.preferIpAddress=false 时,ribbon 将识别那些使用机器名称注册的应用程序,并且一切正常。这意味着,ribbon 可以获取这些应用程序的真实 IP 地址。

这是我的情况,我不仅需要弄清楚为什么在这两种情况下,eureka 中应用程序的 instanceId 仍然会显示机器名称,而且同一个应用程序也会 即使在简单重启后也有机会获得不同的 instanceId!

这是我观察到的:

服务器 IP 为 192.168.24.201,主机将其名称设置为 localhost

多次重启同一个应用可以看出,有时这个应用的instanceId会在localhost:applicationName:8005192.168.24.201:applicationName:8005之间变化。

但是两个 instanceId 都有相同的 IP 地址。这意味着它们都不会导致负载平衡异常。它只会让我手动控制尤里卡服务器更加困难。这也是可以接受的。

最大的问题是,有时不同服务器的instanceId会是localhost:applicationName:8005,这会导致冲突!通过重新启动应用程序,情况会偶然解决,但并非总是如此!因此,如果我将 eureka 用作多个服务器的集群,则无法确保我的应用程序正确注册到 eureka!



这是application8005的eureka客户端设置:

eureka:
  instance:
    lease-renewal-interval-in-seconds: ${my-config.eureka.instance.heartbeatInterval:5}
    lease-expiration-duration-in-seconds: ${my-config.eureka.instance.deadInterval:15}
    preferIpAddress: true
  client:
    service-url:
      defaultZone: http://192.168.24.201:8008/eureka/
    registry-fetch-interval-seconds: ${my-config.eureka.client.fetchRegistryInterval:20}

下面是 EurekaServer 的 eureka 服务器设置:
eureka:
  server:
    eviction-interval-timer-in-ms: ${my-config.eureka.server.refreshInterval:5000}
    enable-self-preservation: false
    responseCacheUpdateIntervalMs: 5000

我不知道为什么应用程序的 instanceId 有时不使用 IP 作为起始字符串,而是使用 localhost。


1 个答案:

答案 0 :(得分:0)

使用prefer-ip-address: true 和instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} 解决了问题: ${spring.cloud.nacos.config.group} 我已经规定每台服务器只能运行一个相同的应用程序。 在这种情况下,每个实例都会以这种方式拥有自己的唯一 ID。