【转载】SpringCloud-Eurek 心跳阈值说明

在使用eureka过程当中,查看监控界面,出现:html

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. 
RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.


Renews threshold:server指望在每分钟中收到的心跳次数 
Renews (last min):上一分钟内收到的心跳次数。
spring

 

自我保护机制的工做机制是若是在15分钟内超过15%(100%-85%)的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,服务器

Eureka Server自动进入自我保护机制网络

Eurake有一个配置参数eureka.server.renewalPercentThreshold,定义了renews 和renews threshold的比值,默认值为0.85。能够修改这个参数微服务

 

这里涉及三个方面:spa

1. Eureka server和client之间每隔30秒会进行一次心跳通讯,告诉server,client还活着。code

2. 默认状况下,若是Eureka Server在必定时间内(默认90秒)没有接收到某个微服务实例的心跳,Eureka Server将会移除该实例。server

3. 若是在15分钟内超过15%(100%-85%)的客户端节点都没有正常的心跳,则自动进入自我保护机制htm

 

 

 

自我保护机制时会出现如下几种状况:blog

 

一、Eureka Server再也不从注册列表中移除由于长时间没收到心跳而应该过时的服务。

 

二、Eureka Server仍然可以接受新服务的注册和查询请求,可是不会被同步到其它节点上,保证当前节点依然可用。

 

三、当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中

 

stackoverflow上看到一个解释的比较清楚的:
https://stackoverflow.com/questions/33921557/understanding-spring-cloud-eureka-server-self-preservation-and-renew-threshold#

每一个实例都须要将其租约更新到Eureka Server,频率为每30秒一次,能够在其中定义eureka.instance.leaseRenewalIntervalInSeconds。

续订(最后一分钟):表示在最后一分钟从Eureka实例收到的续订数量

续订阈值:Eureka服务器预期每分钟从Eureka实例收到的续订。

例如,若是registerWithEureka设置为false,eureka.instance.leaseRenewalIntervalInSeconds则设置为30并运行2 Eureka实例。两个Eureka实例每分钟将向Eureka服务器
发送4次更新,Eureka服务器最小阈值为1(用代码编写),所以阈值为5(这个数字将乘以一个因子eureka.server.renewalPercentThreshold,稍后将讨论)。
问题1: SELF PRESERVATION MODE旨在避免网络链接故障。Eureka实例A和B之间的链接很好,可是因为链接问题,B很难在短期内将租约更新到Eureka服务器,此时Eureka服务器不能简单地启动实例B.若是是,则实例尽管B可用,但没法从Eureka服务器得到注册服务。因此这就是SELF PRESERVATION MODE的目的,最好将其打开。 问题2: 最小阈值1写在代码中。registerWithEureka设置为false,所以没有Eureka实例寄存器,阈值将为1。 在生产环境中,一般咱们部署两个Eureka服务器并将registerWithEureka设置为true。因此门槛将是2,Eureka服务器将续租两次/分钟,因此RENEWALS ARE LESSER THAN THRESHOLD不会有问题。 问题3: 你是对的。eureka.instance.leaseRenewalIntervalInSeconds定义每分钟发送到服务器的续订次数,但它将乘以eureka.server.renewalPercentThreshold上面提到的因子,默认值为0.85。 问题4: 是的,这是正常的,由于阈值初始值设置为1.所以,若是registerWithEureka设置为false,则续订老是低于阈值。 我有两个建议: 部署两台Eureka服务器并启用registerWithEureka。 若是您只想在demo / dev环境中部署,则能够设置eureka.server.renewalPercentThreshold为0.49,所以当您单独启动Eureka服务器时,阈值将为0。

 

 

可参考文章:

http://www.cnblogs.com/bjlhx/p/8903006.html

相关文章
相关标签/搜索