【轉載】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

相關文章
相關標籤/搜索