尤里卡的自我保护模式永远不会恢复

时间:2015-10-15 14:19:21

标签: spring-cloud netflix-eureka

我目前正面临一个问题,即Eureka从未清除因虚拟机意外停机而变得陈旧的服务实例。可以理解的是,Eureka的自我保护模式已经启动,因为服务续订/心跳请求有大幅下降(低于阈值)。然而,15个多小时后,死亡的实例仍在Eureka注册。这是一个主要问题,因为服务请求继续被定向到死实例,只是为了返回错误。

我的希望是门槛不断调整,经过一段时间后,尤里卡的门槛将处于新的标准水平,自我保护模式将被重置。我们在镜像设置中使用Eureka,我们的配置不是很复杂。

我们的设置:

Eureka通过spring-boot-starter-parent 1.2.5.RELEASE

eureka:
  dashboard:
    path: services
    enabled: false
  instance:
    hostname: localhost
    leaseRenewalIntervalInSeconds: 3
    metadataMap:
      managementPath: /admin
      instanceId: discoveryPrimary
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    waitTimeInMsWhenSyncEmpty: 0

是否可以调整Eureka配置以重置自我保存模式(停止清除实例的位置)并允许它在服务停止5分钟后清除服务注册表?

3 个答案:

答案 0 :(得分:4)

如果您只有少数几个服务实例,那么每次服务失败都会自动保存,因为默认情况下renewalPercentThreshold0.85

因此,如果只有84%的实例更新了他们的租约,尤里卡“开启”自我保护。

这意味着如果您有3个实例且其中一个失败,则只有66%的人续订了他们的许可证,因此没有一个会被取消注册。您可以调整服务器属性中的renewalPercentThreshold以适应部署。

eureka:
  server:
    renewalPercentThreshold: 0.49

有了这个,如果你有2个实例,1个失败,你仍然很好。

答案 1 :(得分:1)

即使是一个古老的问题,这也是我的两分钱。

  

我希望门槛不断调整,经过一段时间后   一段时间内,尤里卡的门槛将达到新的标准水平   自我保护模式将被重置。

不正确的假设。 Eureka自我保护永不过期,阈值不会动态调整。您必须恢复虚拟机/客户端(以便总体上> 85%的客户端都处于启动状态)才能远离此状态。

我认为关闭它是有道理的 - 看看conclusions here和类似的question here

答案 2 :(得分:0)

按照@Fahim Farook的回答建议禁用此模式后,为避免丢失一个心跳情况注册表,可以通过配置以下属性来缩短可接受的心跳持续时间:

eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=180