前言
上一章Spring Cloud(Greenwich版)-02-服務註冊與服務發現-Eureka入門,我們實現了將User和Goods微服務都註冊到了Eureka上,那麼在生產環境中爲了達到高可用的目的,Eureka Service是集羣部署的,那麼接下來編寫一個多節點Eureka Server集羣。如下圖所示:
編寫多節點Eureka Server
第一步:設置主機名
因爲是在本機部署兩個節點,所以要修改系統**/etc/hosts** 文件。
vim /etc/hosts
# 添加節點
127.0.0.1 eurekaService1 eurekaService2
備註:windows系統hosts文件路徑爲:C:\windows\system32\drivers\etc\hosts,名字可以隨便起,只要不重複即可。
第二步:添加Eureka Service配置
在可以copy上一篇microservice-discovery-eureka項目。
spring:
application:
name: microservice-discovery-eureka-ha
---
spring:
profiles: eurekaService1
server:
port: 8761
eureka:
instance:
hostname: eurekaService1
client:
service-url:
defaultZone: http://eurekaService2:8762/eureka/ # 將自己註冊到eurekaService2這個Eureka上面去
---
spring:
profiles: eurekaService2
server:
port: 8762
eureka:
instance:
hostname: eurekaService2
client:
service-url:
defaultZone: http://eurekaService1:8761/eureka/
設置兩個profile:eurekaService1、eurekaService2。兩個Profile下各有一個Eureka Server,通過相互註冊的方式,構建了Eureka Server集羣。
第三步:啓動
將microservice-discovery-eureka-ha項目打成jar包,通過命令進行啓動。
java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=eurekaService1
java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=eurekaService2
如果啓動第一個實例報錯不要着急,這是正常的,因爲在啓動過程中eurekaService1嘗試連接eurekaService2,但是eurekaService2並沒有啓動,所以會報連接異常。
備註:本文演示的是兩個Eureka Server實例在一臺機器上啓動,所以必須配置hosts。
第四步:訪問測試
分別在瀏覽器訪問鏈接:http://127.0.0.1:8761/
和http://127.0.0.1:8762/,如下圖所示:
如上圖所示:eurekaService1和eurekaService2進行了相互註冊。
將user微服務註冊到Eureka Server集羣上
第一步:修改配置
eureka:
client:
service-url:
# eureka server的通訊地址,注意路徑
# defaultZone: http://127.0.0.1:8761/eureka/
defaultZone: http://eurekaService1:8761/eureka/,http://eurekaService2:8762/eureka/
對的,你沒有看錯,就這麼簡單。
第二部:啓動測試
如上圖所示,將user微服務註冊到了Eureka Server集羣上了,大家也可以將goods微服務也註冊上去看看效果。
瞭解一下Eureka 自我保護模式
1. 什麼是自我保護模式
默認情況下,如果Eureka Server在一定時間內沒有接收到某個微服務實例的心跳,Eureka Server將會註銷該實例(默認90秒)。但是當網絡分區故障發生時,微服務與Eureka Server之間無法正常通信,以上行爲可能變得非常危險了——因爲微服務本身其實是健康的,此時本不應該註銷這個微服務。
一旦進入該模式,Eureka Server就會保護服務註冊表中的信息,不再刪除服務註冊表中的數據(也就是不會註銷任何微服務)。當網絡故障恢復後,該Eureka Server節點會自動退出自我保護模式。
2. 禁用自我保護模式
增加如下配置:
eureka.server.enable-self-preservation = false
配套代碼
主代碼庫:https://github.com/yundianzixun/spring-cloud-study
Eureka Service 集羣:https://github.com/yundianzixun/spring-cloud-study/tree/master/microservice-discovery-eureka-ha