Eureka控制檯相關介紹及自我保護機制解說
一、Eureka控制檯簡介
對於Eureka大家都有所瞭解,不懂請參考:https://blog.csdn.net/forezp/article/details/81040925
1.進入Eureka控制檯首頁,首先看HOME頁的頭部
【System Status】
- Environment : 環境,預設為test, 該引數在實際使用過程中,可以不用更改
- Data center : 資料中心,使用的是預設的是 “MyOwn”
- Current time:當前的系統時間
- Uptime : 已經運行了多少時間
- Lease expiration enabled :是否啟用租約過期 , 自我保護機制關閉時,該值預設是true, 自我保護機制開啟之後為false。
- Renews threshold : 每分鐘最少續約數
- Renews (last min) : 最後一分鐘的續約數量(不含當前,1分鐘更新一次)
2.【DS Replicas】和 【Instances currently registered with Eureka】
- DS Replicas
這裡表示這個地址是這個Eureka Server相鄰節點,互為一個叢集- Instances currently registered with Eureka
表示各個微服務註冊到這個服務上的例項資訊
2.1 系統在三種情況下會出現紅色加粗的字型提示:
- 1.在配置上,自我保護機制關閉
RENEWALS ARE LESSER THAN THE THRESHOLD. THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
- 2.自我保護機制開啟了
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.
- 3.在配置上,自我保護機制關閉了,但是一分鐘內的續約數沒有達到85% , 可能發生了網路分割槽,會有如下提示
THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
3.【General Info】
【General Info】
- total-avail-memory : 總共可用的記憶體
- environment : 環境名稱,預設test
- num-of-cpus : CPU的個數
- current-memory-usage : 當前已經使用記憶體的百分比
- server-uptime : 服務啟動時間
- registered-replicas : 相鄰叢集複製節點
- unavailable-replicas :不可用的叢集複製節點,如何確定不可用? 主要是server1 向 server2和server3 傳送介面查詢自身的註冊資訊,
如果查詢不到,則預設為不可用 , 也就是說如果Eureka Server自身不作為客戶端註冊到上面去,則相鄰節點都會顯示為不可用。- available-replicas :可用的相鄰叢集複製節點
4.【Last 1000 since startup】
- Last 1000 cancelled leases(最後1000個取消的租約)
- Last 1000 newly registered leases(最後1000個新註冊的租約)
二、Eureka自我保護機制
預設情況下,如果Eureka Server在一定時間內(預設90秒)沒有接收到某個微服務例項的心跳,Eureka Server將會移除該例項。但是當網路分割槽故障發生時,微服務與Eureka Server之間無法正常通訊,而微服務本身是正常執行的,此時不應該移除這個微服務,所以引入了自我保護機制。
-
自我保護模式正是一種針對網路異常波動的安全保護措施,使用自我保護模式能使Eureka叢集更加的健壯、穩定的執行。
-
自我保護機制的工作機制是如果在15分鐘內超過85%的客戶端節點都沒有正常的心跳,那麼Eureka就認為客戶端與註冊中心出現了網路故障,Eureka Server自動進入自我保護機制
比如在開發測試時,需要頻繁地重啟微服務例項,但是我們很少會把eureka server一起重啟(因為在開發過程中不會修改eureka註冊中心),當一分鐘內收到的心跳數大量減少時,會觸發該保護機制。可以在eureka管理介面看到Renews threshold和Renews(last min),當後者(最後一分鐘收到的心跳數)小於前者(心跳閾值)的時候,觸發保護機制,會出現紅色的警告:
我們可以看到,eureka認為雖然收不到例項的心跳,但它認為例項還是健康的,eureka會保護這些例項,不會把它們從登錄檔中刪掉。
注意:該保護機制的目的是避免網路連線故障,在發生網路故障時,微服務和註冊中心之間無法正常通訊,但服務本身是健康的,不應該登出該服務。 如果eureka因網路故障而把微服務誤刪了,那即使網路恢復了,該微服務也不會重新註冊到eureka server了,因為只有在微服務啟動的時候才會發起註冊請求,後面只會傳送心跳和服務列表請求,這樣的話,該例項雖然是執行著,但永遠不會被其它服務所感知。 所以,eureka server在短時間內丟失過多的客戶端心跳時,會進入自我保護模式,該模式下,eureka會保護登錄檔中的資訊,不在登出任何微服務,當網路故障恢復後,eureka會自動退出保護模式。自我保護模式可以讓叢集更加健壯。
但是我們在開發測試階段,需要頻繁地重啟發布,如果觸發了保護機制,則舊的服務例項沒有被刪除,這時請求有可能跑到舊的例項中,而該例項已經關閉了,這就導致請求錯誤,影響開發測試。所以,在開發測試階段,我們可以把自我保護模式關閉,只需在eureka server配置檔案中加上如下配置即可:
eureka.server.enable-self-preservation=false
但在生產環境,不會頻繁重啟,所以,一定要把自我保護機制開啟,否則網路一旦終端,就無法恢復。