1. 程式人生 > >Eureka的自我保護模式、多網絡卡環境下的IP選擇和健康檢查

Eureka的自我保護模式、多網絡卡環境下的IP選擇和健康檢查

Eureka的自我保護模式

禁用自我保護模式:
eureka.server.enable-self-preservation = false

多網絡卡環境下的IP選擇

對於多網絡卡的伺服器,各個微服務註冊到Eureka Server上的IP要如何指定呢?

指定IP在某些場合下很有用。例如某臺伺服器有eth0、eth1、eth2三塊網絡卡,但是
只有eth1可以被其他的伺服器訪問:如果Eureka Client將eth0或者eth2註冊到Eureka
Server上,其它微服務就無法通過這個IP呼叫該微服務的介面。

1.忽略指定名稱的網絡卡

例如:
spring:
cloud:
inetutils:
ignored-interfaces:
- docker0
- veth.*
eureka:
instance:
prefer-ip-address: true

這樣就能忽略docker0網絡卡以及所有以veth開頭的網絡卡。

2.使用正則表示式,指定使用的網路地址

示例:
spring:
cloud:
inetutils:
preferredNetworks:
- 192.168
- 10.0
eureka:
instance:
prefer-ip-address: true

3.只是用站點本地地址

示例:
spring:
cloud:
inetutils:
useOnlySiteLocalInterfaces: true
eureka:
instance:
prefer-ip-address: true

這樣就可強制使用站點本地地址

4.手動指定IP地址

在某些極端場景下,可以手動指定註冊到Eureka Serever的微服務IP。示例:

eureka:
instance:
prefer-ip-address:true
ip-address:127.0.0.1

Eureka的健康檢查

Eureka Server與Eureka Client之間使用心跳機制來確定Eureka Client的狀態,
預設情況下,伺服器端與客戶端的心跳保持正常,應用程式就會始終保持"UP"狀態。
以上機制並不能完全反映應用程式的狀態。舉個例子,微服務與Eureka Server之間的
心跳正常,Eureka Server認為該微服務“UP”;然而,該微服務的資料資料來源發生了問題
(例如網路抖動,連不上資料來源),根本無法正常工作。

要實現這一點,只需啟動Eureka的健康檢查。這樣,應用程式就會將自己的健康狀態傳播到
Eureka Server。開啟的方法非常簡單,只須為微服務配置一下內容,就可以開啟健康檢查。

eureka:
client:
healthcheck:
enabled:true

注意:

  1. eureka.client.healthcheck.enabled=true只能配置在application.yml中,如果配置在
    bootstrap.yml(後文有詳解)中,可能會導致一些不良的副作用,例如應用註冊到Eureka
    Server上的狀態是 UNKNOWN。
  2. 當eureka.client.healthcheck.enabled=true 時,/pause端點(該端點由Spring Boot
    Actuator提供,用於暫停應用)無法正常工作。經筆者測試,發現當eureka.client.
    healthcheck.enabled=true 時,請求/pause端點無法將應用在Eureka Server上的狀態標
    記為DOWN。(該bug還未修復)

本文大部分內容轉載自周立的《Spring Cloud與Docker微服務架構實戰》