01.13 Spring Cloud Eureka 實現高可用服務發現註冊中心

本篇來實現一個高可用版的服務註冊中心。在線上環境中,使用高可用是最基本的要求,如果有單點故障的時候,不至於整個服務都無響應。

這裡的高可用包括註冊中心的高可用,服務提供者註冊到服務中心集群上,這樣服務消費者發現服務的時候就通過集群來實現,不會出現註冊中心不可用,造成整個系統崩潰。

還包括服務提供者的高可用,一個服務提供者註冊多個實例到註冊中心,這樣,即時有其中某個實例 down 掉,其他實例依然可以提供服務。

高可用服務註冊發現中心

下圖是 Eureka 官方提供的高可用架構圖。

Spring Cloud Eureka 實現高可用服務發現註冊中心

![eureka 架構圖]


1、創建註冊中心,重點在於配置文件

bootstrap.yml 配置如下:

<code>spring:
application:
name:eureka-ha-center##設置應用的名稱
cloud:
inetutils:
ignoredInterfaces:
-docker0
-veth.*
-VM.*
preferredNetworks:
-192.168/<code>

application.yml 配置如下:

<code>spring:
profiles:eureka-center1
server:
port:1989
eureka:
instance:
hostname:ha-eureak-center1
appname:註冊中心
client:
registerWithEureka:true
fetchRegistry:true
serviceUrl:
defaultZone:http://localhost:1988/eureka##註冊到eureka-center2上,端口1988


---
spring:
profiles:eureka-center2
server:
port:1988
eureka:
instance:

hostname:ha-eureak-center2
appname:註冊中心
client:
registerWithEureka:true
fetchRegistry:true
serviceUrl:
/<code>

通過 profiles 參數,稍後在啟動的時候根據 vm 參數決定啟用配置。

client.registerWithEureka 和 client.registerWithEureka 設置為 true,表示要註冊到 eureka 。單點模式中設置為 false。高可用版本要允許註冊到 eureka 。注意:eureka-center1 和 eureka-center2 的 serviceUrl.defaultZone 是互相註冊的。

2、啟動應用。

-通過設置 vm 參數 -Dspring.profiles.active=eureka-center1 在 1989 端口啟動註冊中心1

-通過設置 vm 參數 -Dspring.profiles.active=eureka-center2 在 1988 端口啟動註冊中心2。

之後訪問 http://localhost:1988 或 http://localhost:1989 都能進入 eureka ui 界面,並且能看到註冊到自身的eureka 服務。

Spring Cloud Eureka 實現高可用服務發現註冊中心

2、創建高可用的服務提供者,並註冊到上面的兩個註冊中心

application.yml 配置如下:

<code>spring:
profiles:ha-provider1
application:
name:ha-provider
security:
user:
name:root
password:root
server:
port:1990
eureka:
instance:
preferIpAddress:true
client:
serviceUrl:
defaultZone:http://localhost:1989/eureka,http://localhost:1988/eureka


---
spring:
profiles:ha-provider2
application:
name:ha-provider
security:
user:
name:root
password:root
server:
port:1991
eureka:
instance:
preferIpAddress:true
client:
serviceUrl:
defaultZone:http://localhost:1989/eureka,http://localhost:1988/eureka/<code>

同樣利用 profiles 區分兩個服務提供者。

注意,defaultZone 設置了上面啟動的兩個註冊中心服務,中間用逗號隔開。

之後設置 vm 參數 -Dspring.profiles.active=ha-provider1 啟動第一個服務提供者,設置 vm 參數 -Dspring.profiles.active=ha-provider2 啟動第二個服務提供者。

之後打開 eureka ui 界面,看到已經註冊到註冊中心

Spring Cloud Eureka 實現高可用服務發現註冊中心

3、創建服務消費者

application.yml 配置:

<code>spring:
application:
name:ha-customer

server:
port:1992
eureka:
client:
serviceUrl:
defaultZone:http://localhost:1989/eureka,http://localhost:1988/eureka
instance:
preferIpAddress:true
複製代碼/<code>

啟動服務消費者

通過訪問 http 接口,查看服務是否可用,通過日誌可以看出每次調用有可能負載到不同的服務提供者實例上。

4、停掉一個服務提供者。

Spring Cloud Eureka 實現高可用服務發現註冊中心

訪問 http 接口,不影響服務,會自動負載到正常的服務提供者實例上。

5、停掉一個註冊中心實例。

Spring Cloud Eureka 實現高可用服務發現註冊中心

訪問 http 接口,仍然不受影響。


作者:古時的風箏
鏈接:https://juejin.im/post/5e1bd14351882526953670fd


分享到:


相關文章: