天天看點

springCloud(6):Eureka的自我保護模式、多網卡下的IP選擇、Eureka的健康檢查

一、Eureka的自我保護模式

進入自我保護模式最直覺的展現就是Eureka Server首頁的警告,如下圖:

springCloud(6):Eureka的自我保護模式、多網卡下的IP選擇、Eureka的健康檢查

 預設情況下,如果Eureka Server在一定時間内沒有接收到某個微服務執行個體的心跳,Eureka Server将會登出該執行個體(預設90秒)。但是當網絡分區故障發生時,微服務與Eureka Server之間無法正常通信,這就可能變得非常危險了----因為微服務本身是健康的,此時本不應該登出這個微服務。

  Eureka Server通過“自我保護模式”來解決這個問題----當Eureka Server節點在短時間内丢失過多用戶端時(可能發生了網絡分區故障),那麼這個節點就會進入自我保護模式。一旦進入該模式,Eureka Server就會保護服務系統資料庫中的資訊,不再删除服務系統資料庫中的資料(也就是不會登出任何微服務)。當網絡故障恢複後,該Eureka Server節點會自動退出自我保護模式。

  自我保護模式是一種對網絡異常的安全保護措施。使用自我保護模式,而已讓Eureka叢集更加的健壯、穩定。

在Spring Cloud中,可以使用eureka.server.enable-self-preservation=false來禁用自我保護模式,當然也可以使用顯示指定IP位址來解決:

eureka.instance.instance-id: ${spring.cloud.client.ipAddress}:${server.port}      

二、多網卡環境下的IP選擇

2.1、簡介

指定IP在某些場景下很有用,如某台伺服器有eth0、eth1和eth2三塊網卡,但是eth1可以被其它的伺服器通路;如果Eureka Client将eth0或者eth2注冊到Eureka Server上,其它微服務就無法通過這個IP調用該微服務的接口。

Spring Cloud提供了按需選擇IP的能力,進而避免以上的問題。

2.2、操作

方案1、忽略指定名稱的網卡

#忽略eth0,支援正規表達式
spring.cloud.inetutils.ignored-interfaces[0]=eth0
#注冊時使用ip而不是主機名
eureka.instance.prefer-ip-address=true      

方案2、隻使用站點本地位址

#隻使用站點本地位址
spring.cloud.inetutils.use-only-site-local-interfaces=true
#注冊時使用ip而不是主機名
eureka.instance.prefer-ip-address=true      

方案3、手動指定IP位址

#手動指定IP位址
spring.cloud.inetutils.default-ip-address=127.0.0.1
#注冊時使用ip而不是主機名
eureka.instance.prefer-ip-address=true      

三、Eureka的健康檢查

先看下圖:

springCloud(6):Eureka的自我保護模式、多網卡下的IP選擇、Eureka的健康檢查

說明:在Status欄顯示着UP,表示應用程式狀态正常。其它取值DOWN、OUT_OF_SERVICE、UNKNOWN等,隻有UP的微服務會被請求。

由于Eureka Server與Eureka Client之間使用心跳機制來确定Eureka Client的狀态,預設情況下,伺服器端與用戶端的心跳保持正常,應用程式就會始終保持“UP”狀态,是以微服務的UP并不能完全反應應用程式的狀态。

#開啟健康檢查(需要spring-boot-starter-actuator依賴)
eureka.client.healthcheck.enabled = true      

繼續閱讀