大千世界,茫茫人海,相識就是一種緣分。若此篇文章對您有幫助,點個贊或點個關注唄!
一、Eureka控制檯介紹
✍ 1、進入Eureka控制檯,首先查看HOME頁的頭部
- Environment : 環境,默認爲test, 該參數在實際使用過程中,可以不用更改;
- Data center : 數據中心,使用的是默認的是 “MyOwn”;
- Current time: 當前的系統時間;
- Uptime: 當前Eureka服務已運行的時間;
- Lease expiration enabled: 是否啓用租約過期 , 自我保護機制關閉時,該值默認是true, 自我保護機制開啓之後爲false;
- Renews threshold: 每分鐘最少續約數;
- Renews (last min): 最後一分鐘的續約數量(不含當前,1分鐘更新一次)。
✍ 2、DS Replicas與Instances currently registered with Eureka
- DS Replicas: Eureka Server服務集羣搭建,顯示application配置文件配置Eureka.instance.hostname的服務名稱;(如果無法理解字面意思,我找了一篇博主的文章,圖解的很詳細,可以點擊進一步瞭解)
- Instances currently registered with Eureka: 顯示已註冊到該註冊中心的微服務實例信息
✍ 3、General Info
- total-avail-memory: 總共可用內存;
- environment: 環境名稱,默認test
- num-of-cpus: CPU個數
- current-memory-usage : 當前已使用內存所佔百分比
- server-uptime : 服務正常運行時間
- registered-replicas : 相鄰集羣複製節點
- unavailable-replicas : 不可用的集羣複製節點,如何檢測節點不可用。 若server1 向 server2發送接口查詢自身的註冊信息,若查詢不到,則默認該節點爲不可用 , 也就是說如果Eureka Server自身不作爲客戶端註冊到上面去,則相鄰節點都會顯示爲不可用。
- available-replicas : 可用的相鄰集羣複製節點
✍ 4、Instance Info
- ipAddr: eureka服務端IP地址
- status: eureka服務端狀態(DOWN表示端口處於關閉狀態,UP則是打開狀態。)
✍ 5、Last 1000 since startup
- Last 1000 cancelled leases: 最後1000個取消的租約
- Last 1000 newly registered leases: 最後1000個新註冊的租約
✍ 6、三類預警狀態
- 在配置上,自我保護機制關閉
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- 自我保護機制開啓
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE- 在配置上,自我保護機制關閉了,但是一分鐘內的續約數沒有達到85% , 可能發生了網絡分區,會有如下提示
THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS
二、Eureka自我保護機制
server:
port: 8888
# Eureka註冊中心
eureka:
instance:
hostname: 127.0.0.1
instance-id: ${spring.application.name}:${eureka.instance.hostname}:${server.port}
#無心跳淘汰時間10s
lease-expiration-duration-in-seconds: 10
#心跳間隔時間10s
lease-renewal-interval-in-seconds: 10000
client:
service-url:
defaultZone: http://127.0.0.1:8100/bureka/eureka/
register-with-eureka: true
fetch-registry: true
server:
enable-self-preservation: false #關閉自我保護機制
默認情況下,如果Eureka Server在一定時間內(默認90秒)沒有接收到某個微服務實例的心跳,Eureka Server將會移除該實例。但是當網絡分區故障發生時,微服務與Eureka Server之間無法正常通信,而微服務本身是正常運行的,此時不應該移除這個微服務,所以引入了自我保護機制。
- 自我保護模式正是一種針對網絡異常波動的安全保護措施,使用自我保護模式能使Eureka集羣更加的健壯、穩定的運行。
- 自我保護機制的工作機制是如果在15分鐘內超過85%的客戶端節點都沒有正常的心跳,那麼Eureka就認爲客戶端與註冊中心出現了網絡故障,Eureka Server自動進入自我保護機制
比如在開發測試時,需要頻繁地重啓微服務實例,但是我們很少會把eureka server一起重啓(因爲在開發過程中不會修改eureka註冊中心),當一分鐘內收到的心跳數大量減少時,會觸發該保護機制。可以在eureka管理界面看到Renews threshold和Renews(last min),當後者(最後一分鐘收到的心跳數)小於前者(心跳閾值)的時候,觸發保護機制,會出現紅色的警告:
該保護機制的目的是避免網絡連接故障,在發生網絡故障時,微服務和註冊中心之間無法正常通信,但服務本身是健康的,不應該註銷該服務。 如果eureka因網絡故障而把微服務誤刪了,那即使網絡恢復了,該微服務也不會重新註冊到eureka server了,因爲只有在微服務啓動的時候纔會發起註冊請求,後面只會發送心跳和服務列表請求,這樣的話,該實例雖然是運行着,但永遠不會被其它服務所感知。 所以,eureka server在短時間內丟失過多的客戶端心跳時,會進入自我保護模式,該模式下,eureka會保護註冊表中的信息,不在註銷任何微服務,當網絡故障恢復後,eureka會自動退出保護模式。自我保護模式可以讓集羣更加健壯。
但是我們在開發測試階段,需要頻繁地重啓發布,如果觸發了保護機制,則舊的服務實例沒有被刪除,這時請求有可能跑到舊的實例中,而該實例已經關閉了,這就導致請求錯誤,影響開發測試。所以,在開發測試階段,我們可以把自我保護模式關閉,只需在eureka server配置文件中加上如下配置即可:
eureka.server.enable-self-preservation=false
但在生產環境,不會頻繁重啓,所以,一定要把自我保護機制打開,否則網絡一旦終端,就無法恢復。