【问题标题】:Eureka detect service statusEureka 检测服务状态
【发布时间】:2016-12-31 20:37:22
【问题描述】:

上下文

我们使用 Spring Cloud Netflix 和 Eureka 作为服务发现,并使用 Zuul 来代理服务并对其进行负载平衡。

微服务使用 NodeJS 实现,并使用 NPM 模块 eureka-js-client 在 Eureka 注册,中间的自定义层处理所有微服务通用的配置和内容。


问题

问题在于 Eureka 无法识别一项服务是否出现故障。这是一个问题,因为我们有一个具有自动部署功能的开发基础架构,它每次都在不同端口上重新部署和重新启动微服务,而无需重新启动 Eureka(和 Zuul)。

因此,一段时间后,我们有十个或更多的一个微服务实例,其中只有一个启动但所有实例都被识别为beeing UP。


解决方法

  1. 我尝试将客户端上的heartbeatInterval 设置得更小,但这没有帮助。

  2. 我尝试将服务器上的renewalThresholdUpdateIntervalMs 设置得更小,但这也无济于事。

  3. 更多令人沮丧、无助的财产尝试……


问题

如何配置 Eureka 以驱逐实例或将状态设置为 DOWN 在合理的时间内(不是 30 分钟左右)未发送心跳的实例?


代码片段

服务器本身不包含可提及的代码(只是使用 Spring Cloud Starter 启动 Eureka 服务器的一些注释)。

Eureka 服务器的配置(我已经删除了所有不工作的尝试):

server:
  port: 8761

spring:
  cloud:
    client:
      hostname: localhost

eureka:
  instance:
    address: 127.0.0.1
    hostname: ${spring.cloud.client.hostname}

发送到服务器的客户端配置(使用eureka-js-client):

{
    instance : {
        instanceId : `${CONFIG.instance.address}:${CONFIG.instance.name}:${CONFIG.instance.port}`,
        app : CONFIG.instance.name,
        hostName : CONFIG.instance.host,
        ipAddr : CONFIG.instance.address,
        port : {
            '$' : CONFIG.instance.port,
            '@enabled' : true
        },
        homePageUrl : `http://${CONFIG.instance.host}:${CONFIG.instance.port}/`,
        statusPageUrl : `http://${CONFIG.instance.host}:${CONFIG.instance.port}/info`,
        healthCheckUrl : `http://${CONFIG.instance.host}:${CONFIG.instance.port}/health`,
        vipAddress : CONFIG.instance.name,
        secureVipAddress : CONFIG.instance.name,
        dataCenterInfo : {
            '@class' : 'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo',
            name : 'MyOwn'
        }
    },
    eureka : {
        host : CONFIG.eureka.host,
        port : CONFIG.eureka.port,
        servicePath : CONFIG.eureka.servicePath || '/eureka/apps/',
        healthCheckInterval : 5000
    }
}

【问题讨论】:

    标签: java node.js spring spring-cloud netflix-eureka


    【解决方案1】:

    一段时间后,我们有十个或更多的一个微服务实例,其中 只有一个启动,但所有都被识别为正在启动。

    Eureka 具有“自我保护”模式。如果少于 85% 的实例心跳正在注册,它不会驱逐任何实例。您应该能够在 eureka 仪表板上看到警告。

    【讨论】:

    • 好的,当我打开自我保存模式时,服务被正确驱逐。是否可以加快驱逐速度?目前,驱逐服务大约需要 2-3 分钟。另外:是否可以关闭自我保存模式禁用的警告?
    • 你可以调整驱逐时间,不能告诉你财产,在我的手机上。无法禁用警告。
    • 我现在已将eureka.leaseInfo.renewalIntervalInSecs 更改为10 和eureka.leaseInfo.durationInSecs 更改为20 并将心跳间隔更改为5 秒。这加快了服务驱逐的速度。 - 感谢您的支持!
    猜你喜欢
    • 1970-01-01
    • 2016-06-30
    • 2021-11-11
    • 1970-01-01
    • 2023-03-30
    • 2015-08-02
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    相关资源
    最近更新 更多