Spring cloud 尤里卡';s的自我保护模式永远不会恢复

Spring cloud 尤里卡';s的自我保护模式永远不会恢复,spring-cloud,netflix-eureka,Spring Cloud,Netflix Eureka,我目前面临一个问题,Eureka从未清除由于VM意外停机而变得过时的服务实例。可以理解的是,Eureka的自我保护模式开始了,因为服务续订/心跳请求大幅下降(低于阈值)。然而,15个多小时后,死亡实例仍在Eureka中注册。这是一个主要问题,因为服务请求继续被定向到死实例,只返回错误 我希望门槛能不断调整,经过一段时间后,尤里卡的门槛将达到新的标准水平,自我保护模式将被重置。我们在镜像设置中使用Eureka,我们的配置不是很复杂 我们的设置: Eureka via spring boot sta

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

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

我们的设置:

Eureka via spring boot starter母版1.2.5.1版本

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分钟以上时清除服务注册表

如果您的服务只有几个实例,每次它们中的任何一个失败时,自我保护就会启动,因为默认情况下,
renewalPercentThreshold
0.85

因此,如果您的实例中只有84%续订租约,eureka将“开启”自我保护

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

eureka:
  server:
    renewalPercentThreshold: 0.49

有了这一点,如果你有两个例子,但有一个失败了,你仍然是好的。

即使是一个很难回答的老问题,这是我的两分钱

我的希望是,门槛会不断调整,并在经过一些调整之后 在一段时间内,Eureka的阈值将处于新的标准水平,并且 自我保护模式将被重置

错误的假设。Eureka self-preservation永不过期,且不会动态调整阈值。为了摆脱这种状态,您必须恢复停止的VM/客户机(这样总体上超过85%的客户机处于启动状态)


我认为关闭它是有意义的-看看和类似的东西。

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

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

调整
renewalPercentThreshold
将通过延迟自我保护模式来解决问题。我们可以通过设置
eureka.server.enableSelfPreservation=false
来实现同样的功能,但如果触发了自我保护,并且这些实例再也没有出现,那么这仍然无法解决问题。不,如果您的网络正常,或者您的实例不是每分钟都来来去去,那么它不会延迟自我保护模式。它只是针对较小的基础设施进行配置。您可以使用
renewalThresholdUpdateIntervalMs
对其进行进一步调整,这样自我保护的时间窗口将更小。如果您要关闭它,只需不使用Eureka的弹性功能。我们的目标是尝试使用Eureka的所有弹性功能,包括自我保护模式。但是,通过将阈值设置得更低,它只会避免启用自我保护模式,一旦启用,15个多小时后仍无法清除死实例。基于上述原因,我不认为门槛是问题所在。是否有其他一些配置允许自保护模式重置并最终清除死实例?不建议在生产中禁用自保护模式。从注册表中删除一个丢失的心跳和一个正常的实例。这不是个好主意。你是不对的@narendra choudhary。一次错过的心跳不会逐出实例。如果心跳失败,客户端将以2倍的倍数以指数方式退出,直到出现最大延迟。然后返回到服务器列表中的下一个服务器,服务器复制注册表信息。