簡介
爲了使 Eureka Server 實現高可用,我們需要爲它配置集羣。這樣當有一臺 Eureka Server 有故障時,集羣中的其他 Server 可以進行代替。Eureka 集羣之中的 Node 通過 P2P 通信的方式共享註冊表,以使得每個 Eureka Server 的註冊表保持一致。本教程將在本地開啓兩臺 Eureka Server 以測試集羣的搭建。
項目源碼
配置 Eureka Server
打開遠程 git 倉庫中的 eureka-server.yml
文件,添加如下配置:
---
spring:
profiles: peer1
server:
port: 8761
eureka:
instance:
hostname: peer1
client:
register-with-eureka: true
fetch-registry: true
serviceUrl:
defaultZone: http://peer2:8762/eureka
---
spring:
profiles: peer2
server:
port: 8762
eureka:
instance:
hostname: peer2
client:
register-with-eureka: true
fetch-registry: true
serviceUrl:
defaultZone: http://peer1:8761/eureka
三劃線用於區分兩個不同的 profile,使用 spring-boot 插件啓動項目時可通過命令行參數指定 profile。這兩個 profiles 分別指定了 profile 的名字,服務的端口號。ureka.instance.hostname
爲主機名,必須要和 eureka.client.serviceUrl.defaultZone
中的 Peer 主機名保持一致。例如,在 peer1
的 profile 中,把 peer2
作爲了集羣中另一個鏡像節點,那麼這個 http://peer2:8762/eureka
URL 中的 peer2
就要和 peer2
profile 中的 eureka.instance.hostname
保持一致。serviceUrl
是 eureka server 的註冊地址,defaultZone
想對於 AWS 的 availability zone,在本地測試可以用 defaultZone
或者其他名稱,以把 Eureka Server 部署在不同集羣。register-with-eureka
和 fetch-registry
之前設置爲了 false, 因爲只有一臺 Eureka Server,並不需要自己註冊自己,而現在有了集羣,可在集羣的其他節點中註冊本服務。
修改 hosts
修改 hosts 文件,以使 peer1 和 peer2 映射到 localhost,因爲 eureka server 的主機名必須不同纔可互相註冊,所以在本地需要模擬兩個不同的主機名:
127.0.0.1 peer1
127.0.0.1 peer2
配置 productService
打開遠程 git 倉庫中的 product-service.yml
文件,添加如下配置:
server:
port: 8081
spring:
cloud:
config:
allow-override: true
override-system-properties: false
eureka:
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka, http://peer2:8762/eureka
這裏通過 eureka.client.serviceUrl.defaultZone
把 eureka 集羣中的所有 url 都填寫了進來,也可以只寫一臺,因爲各個 eureka server 可以同步註冊表。
測試
首先啓動 configserver,然後分別運行如下兩條命令啓動 eureka server 集羣:
mvn spring-boot:run -Dspring-boot.run.profiles=peer1
mvn spring-boot:run -Dspring-boot.run.profiles=peer2
最後啓動 productService
,訪問任一 Eureka Server,如:
http://peer1:8761
我們可以看到 Eureka Server 集羣和 Product-Service 均在註冊表裏。
Application | AMIs | Availability Zones | Status |
---|---|---|---|
EUREKA-SERVER | n/a (2) | (2) | UP (2) - xuqians-imac:eureka-server:8761 , xuqians-imac:eureka-server:8762 |
PRODUCT-SERVICE | n/a (1) | (1) | UP (1) - xuqians-imac:product-service:8081 |
歡迎訪問我的博客:張旭乾的博客