我目前正面临一个问题,即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分钟后清除服务注册表?
答案 0 :(得分:4)
如果您只有少数几个服务实例,那么每次服务失败都会自动保存,因为默认情况下renewalPercentThreshold
为0.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