1. 程式人生 > >SpringCloud-Eureka 的自我保護模式

SpringCloud-Eureka 的自我保護模式

概述

    訪問Eureka主頁時,如果看到這樣一段大紅色的句子:
    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的 自我保護模式(self-preservation mode) 被啟動了,當 Eureka Server 節點在短時間內丟失了過多例項的連線時(比如網路故障或頻繁的啟動關閉客戶端),那麼這個節點就會進入自我保護模式,一旦進入到該模式,Eureka server 就會保護服務登錄檔中的資訊,不再刪除服務登錄檔中的資料(即不會登出任何微服務),當網路故障恢復後,該 Ereaka Server 節點就會自動退出自我保護模式


解決方法


解決這種情況的方法主要有幾種方式:

1)等待 Eureka Server 自動恢復

    正常的情況下,等待網路恢復(或者沒有頻繁的啟動與關閉例項)後,等待一段時間 Eureka Server 會自動關閉自我保護模式,但是如果它遲遲沒有關閉該模式,那麼便可以嘗試手動關閉,如下。

2)重啟 Eureka Server

    通常而言,PRD 環境建議對 Eureka Server 做負載均衡,這樣在依次關閉並開啟 Eureka Server 後,無效的例項會被清除,並且不會對正常的使用照成影響。

3)關閉 Eureka 的自我保護模式

在yml配置檔案中新增如下配置:
eureka:
  server:
    enable-self-preservation: false            #設為false,關閉自我保護主要
    eviction-interval-timer-in-ms: 4000        # This is not required 清理間隔(單位毫秒,預設是60*1000)
從根源解決問題,但是並不推薦在PRD環境中使用;


開發環境中

    對於開發環境的 Eureka Server,個人更建議關閉它的自我保護模式,因為你可能需要不斷的開啟與關閉例項,如果並未關閉自我保護模式,那麼很容易就會觸發自我保護模式,此時對除錯會相對比較麻煩。

    但是關閉自我保護模式,會有另外一個可能的問題,即隔一段時間後,可能會發生例項並未關閉,卻無法通過閘道器訪問了,此時很可能是由於網路問題,導致例項(或閘道器)與 Eureka Server 斷開了連線,Eureka Server 已經將其登出(網路恢復後,例項並不會再次註冊),此時重啟 Eureka Server 節點或例項,並等待一小段時間即可。

==============================

QQ群:143522604

歡迎和大家一起學習、交流、提升!

==============================