1. 程式人生 > >SpringCloud Eureka 高可用

SpringCloud Eureka 高可用

文章目錄

Spring Cloud Eureka 高可用

Eureka和Zookeeper對比
Eureka在高可用方面好一點;Zookeeper在一致性上強一點

高可用客戶端(HA Client)

多用於生產環境,客戶端應用關聯或配置註冊中心伺服器叢集,避免註冊中心單點故障

常見配置手段

  • 多註冊中心主機
  • 註冊中心DNS
  • 廣播(Dubbo)

Spring Cloud Eureka Client

如果Eureka客戶端應用配置多個Eureka註冊伺服器,那麼預設情況只有第一臺可用的伺服器存在註冊資訊。如果第一臺可用的Eureka伺服器Down掉了,那麼Eureka客戶端應用將會選擇下一臺可用的Eureka伺服器。

配置方式:

eureka.client.serviceUrl.defaultZone=http://${eureka.server1.host}:${eureka.server1.port}/
eureka,${eureka.server2.host}:${eureka.server2.port}/eureka

應用元資訊

# 調整獲取所有應用元資訊間隔時間
eureka.client.registryFetchIntervalSeconds = 5

# 調整應用元資訊間隔時間
eureka.client.instanceInfoReplicationIntervalSeconds = 5

這個時間調的越小的話,資訊一致性越強,CPU消耗也越高

例項

客戶端配置

# 客戶端應用名稱
spring.application.name=spring-cloud-eureka-client

# 客戶端服務埠,隨機可用
server.port=0

# 管理埠安全關閉
management.security.enabled=false

# 客戶端註冊到Eureka伺服器,配置多個註冊中心,以","分隔
eureka.client.serviceUrl.defaultZone = http://localhost:9090/eureka,http://localhost:9091/eureka

伺服器配置

# 伺服器應用名稱
spring.application.name=spring-cloud-eureka-server

# 伺服器服務埠
server.port=9090

# 管理埠安全關閉
management.security.enabled=false

## Eureka 伺服器作為註冊中心,不需要再註冊到其中註冊中心去
## 同時也不需要獲取客戶端資訊

##  取消向註冊中心註冊
eureka.client.register-with-eureka=false

## 取消向註冊中心獲取註冊資訊(服務、例項資訊)
eureka.client.fetch-registry=false

為了啟動多個註冊中心,我們可以通過啟動引數指定不同的埠,這裡我們多指定一個9091

在這裡插入圖片描述

這裡我們注意不能勾選單例啟動模式

然後啟動客戶端,我們會發現兩個註冊中心中只有一有註冊資訊

當我們關掉9090埠的伺服器(有註冊資訊),過一會後,客戶端會註冊到9091埠的伺服器上,並且該伺服器會有註冊資訊。

高可用註冊中心(HA Registry Center)

高可用註冊中心不但需要提供叢集環境,解決單點故障的問題。同時,也優雅地處理註冊中心之間資訊同步的問題。

配置方式:

eureka.server.host1 : eureka.client.serviceUrl.defaultZone=http://${eureka.server2.host}:${eureka.server2.port}/eureka

eureka.server.host2 : eureka.client.serviceUrl.defaultZone=http://${eureka.server1.host}:${eureka.server1.port}/eureka

例項

在這裡插入圖片描述

由客戶端高可用轉變為 伺服器高可用

伺服器配置

在server工程中修改application.properties,並新增application-peer1.properties和application-peer2.properties

  • application.properties:
## peer1和peer2公用配置

## 定義 應用名稱
spring.applicaiton.name = spring-cloud-eureka-server

## 管理端安全失效
management.security.enabled = false

## 公用 Eureka 配置
### 向註冊中心註冊
eureka.client.register-with-eureka = true
### 向獲取註冊資訊(服務、例項資訊)
eureka.client.fetch-registry = true

application.properties是它們的公共配置資訊

  • application-peer1.properties
## peer1配置

## peer1 埠 9091
## peer2 埠 9092
## 伺服器服務埠
server.port=9091

eureka.instance.hostname=peer1

## peer2主機: peer2,埠: 9092
peer2.server.host = peer2
peer2.server.port = 9092

## 向 peer2 註冊中心註冊
eureka.client.serviceUrl.defaultZone = http://${peer2.server.host}:${peer2.server.port}/eureka
  • application-peer2.properties
## peer2配置

## peer1 埠 9091
## peer2 埠 9092
## 伺服器服務埠
server.port=9092

eureka.instance.hostname=peer2

## peer1主機: peer1,埠: 9091
peer1.server.host = peer1
peer1.server.port = 9091

## 向 peer1 註冊中心註冊
eureka.client.serviceUrl.defaultZone = http://${peer1.server.host}:${peer1.server.port}/eureka

這裡面的peer1和peer2指的是高可用系統中的兩臺主機,它們之間可以同步資訊。
同時需要修改hosts檔案 新增 127.0.0.1 peer1 127.0.0.2 peer2
這裡向註冊中心註冊的地址不能是localhost,不然available-replicas中無值

  • 啟動peer1 Eureka伺服器

通過啟動引數-spring.profiles.active=peer1,這樣會讀取application.propertiesapplication-peer1.properties

在這裡插入圖片描述

同理,啟動peer2

peer1看到的頁面:

在這裡插入圖片描述

peer2看到的頁面:

在這裡插入圖片描述

客戶端配置

# 客戶端應用名稱
spring.application.name=spring-cloud-eureka-client

# 客戶端服務埠,隨機可用
server.port=0

# 管理埠安全關閉
management.security.enabled=false

# 客戶端註冊到Eureka伺服器,配置多個註冊中心,以","分隔
eureka.client.serviceUrl.defaultZone = http://localhost:9091/eureka,http://localhost:9092/eureka

客戶端主要改下注冊中心地址就好了

專案地址

https://gitee.com/safika/springcloud-learn