RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

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.

Eureka server和client之間每隔30秒會進行一次心跳通信,告訴server,client還活着
在某一些時候註冊在Eureka的服務已經掛掉了,但是服務卻還留在Eureka的服務列表的情況
在這裏插入圖片描述
自我保護機制
默認情況下,如果Eureka Server在一定時間內(默認90秒)沒有接收到某個微服務實例的心跳,Eureka Server將會移除該實例。但是當網絡分區故障發生時,微服務與Eureka Server之間無法正常通信,而微服務本身是正常運行的,此時不應該移除這個微服務,所以引入了自我保護機制。

自我保護模式正是一種針對網絡異常波動的安全保護措施,使用自我保護模式能使Eureka集羣更加的健壯、穩定的運行。

自我保護機制的工作機制是如果在15分鐘內超過85%的客戶端節點都沒有正常的心跳,那麼Eureka就認爲客戶端與註冊中心出現了網絡故障,Eureka Server自動進入自我保護機制,

自我保護機制時會出現以下幾種情況:
1、Eureka Server不再從註冊列表中移除因爲長時間沒收到心跳而應該過期的服務。
2、Eureka Server仍然能夠接受新服務的註冊和查詢請求,但是不會被同步到其它節點上,保證當前節點依然可用。
3、當網絡穩定時,當前Eureka Server新的註冊信息會被同步到其它節點中

Eurake有一個配置參數eureka.server.renewalPercentThreshold,定義了renews 和renews threshold的比值,默認值爲0.85。當server在15分鐘內,比值低於percent,即少了15%的微服務心跳,server會進入自我保護狀態,Self-Preservation。在此狀態下,server不會刪除註冊信息,這就有可能導致在調用微服務時,實際上服務並不存在。

這種保護狀態實際上是考慮了client和server之間的心跳是因爲網絡問題,而非服務本身問題,不能簡單的刪除註冊信息

解決建議是:
1、在生產上可以開自注冊,部署兩個server
2、在本機器上測試的時候,可以把比值調低,比如0.49
3、簡單粗暴把自我保護模式關閉

eureka:
  server:
    #關閉自我保護模式(缺省爲打開)
    enable-self-preservation: false
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章