天天看點

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

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

前言

上一章Spring Cloud(Greenwich版)-02-服務注冊與服務發現-Eureka入門,我們實作了将User和Goods微服務都注冊到了Eureka上,那麼在生産環境中為了達到高可用的目的,Eureka Service是叢集部署的,那麼接下來編寫一個多節點Eureka Server叢集。如下圖所示:

Spring Cloud(Greenwich版)-03-編寫高可用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/,如下圖所示:

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

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

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

第二部:啟動測試
Spring Cloud(Greenwich版)-03-編寫高可用Eureka Server(叢集)
Spring Cloud(Greenwich版)-03-編寫高可用Eureka Server(叢集)

如上圖所示,将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

繼續閱讀