7

我目前面临一个问题,即 Eureka 永远不会清除由于 VM 意外停机而变得陈旧的服务实例。可以理解的是,Eureka 的自我保护模式启动了,因为服务更新/心跳请求大幅下降(低于阈值)。然而,15 个多小时后,死亡的实例仍然在 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 分钟以上时允许它清除服务注册表?

4

3 回答 3

4

如果您只有几个服务实例,则每次其中任何一个实例失败时,自我保护都会启动,因为默认情况下renewalPercentThreshold0.85.

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

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

eureka:
  server:
    renewalPercentThreshold: 0.49

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

于 2015-10-15T14:37:43.413 回答
1

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

我希望阈值不断调整,一段时间后,尤里卡的阈值将处于新的规范水平,自我保护模式将被重置。

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

我相信关闭它是有意义的 - 看看这里的结论和类似的问题

于 2017-12-10T05:13:57.450 回答
0

按照@Fahim Farook 的回答建议禁用此模式后,为避免丢失一个心跳导致注册表被删除,您可以通过配置以下属性来调整可接受的丢失心跳持续时间:

eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=180
于 2019-11-22T01:36:27.590 回答