Spring Cloud(Greenwich版)-03-編寫高可用Eureka Server(集群)

編寫高可用Eureka Server(集群)

前言

上一章Spring Cloud(Greenwich版)-02-服務注冊與服務發(fā)現(xiàn)-Eureka入門,我們實現(xiàn)了將User和Goods微服務都注冊到了Eureka上,那么在生產環(huán)境中為了達到高可用的目的,Eureka Service是集群部署的,那么接下來編寫一個多節(jié)點Eureka Server集群。如下圖所示:

Eureka集群

編寫多節(jié)點Eureka Server

第一步:設置主機名

因為是在本機部署兩個節(jié)點,所以要修改系統(tǒng)/etc/hosts 文件。

vim /etc/hosts
# 添加節(jié)點
127.0.0.1 eurekaService1 eurekaService2

備注:windows系統(tǒng)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.jpg

eurekaService2.jpg

如上圖所示: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/

對的,你沒有看錯,就這么簡單。

第二部:啟動測試
eurekaService1.jpg
eurekaService1.jpg

如上圖所示,將user微服務注冊到了Eureka Server集群上了,大家也可以將goods微服務也注冊上去看看效果。

了解一下Eureka 自我保護模式

1. 什么是自我保護模式

默認情況下,如果Eureka Server在一定時間內沒有接收到某個微服務實例的心跳,Eureka Server將會注銷該實例(默認90秒)。但是當網(wǎng)絡分區(qū)故障發(fā)生時,微服務與Eureka Server之間無法正常通信,以上行為可能變得非常危險了——因為微服務本身其實是健康的,此時本不應該注銷這個微服務。
一旦進入該模式,Eureka Server就會保護服務注冊表中的信息,不再刪除服務注冊表中的數(shù)據(jù)(也就是不會注銷任何微服務)。當網(wǎng)絡故障恢復后,該Eureka Server節(jié)點會自動退出自我保護模式。

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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容