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

res*_*asy 7 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
Run Code Online (Sandbox Code Playgroud)

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

Áko*_*tku 4

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

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

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

eureka:
  server:
    renewalPercentThreshold: 0.49
Run Code Online (Sandbox Code Playgroud)

这样,即使您有 2 个实例,其中 1 个实例失败,您仍然可以正常工作。