簡介
為了使 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 |
歡迎訪問我的博客:張旭乾的博客