本 Spring Cloud 系列目錄
每天都不要停止學習,並一定就會比別人強,但是不至於被人甩掉
同學們,你們的 Spring Cloud 又來了!
前兩篇實現了單點註冊中心的實現,並實現了一個服務提供者和一個消費者,之後在基礎上有增加了安全控制。
本篇來實現一個高可用版的服務註冊中心。線上上環境中,使用高可用是最基本的要求,如果有單點故障的時候,不至於整個服務都無響應。
這裡的高可用包括註冊中心的高可用,服務提供者註冊到服務中心叢集上,這樣服務消費者發現服務的時候就通過叢集來實現,不會出現註冊中心不可用,造成整個系統崩潰。
還包括服務提供者的高可用,一個服務提供者註冊多個例項到註冊中心,這樣,即時有其中某個例項 down 掉,其他例項依然可以提供服務。
高可用服務註冊發現中心
下圖是 Eureka 官方提供的高可用架構圖。
![eureka 架構圖]
1、建立註冊中心,重點在於配置檔案
bootstrap.yml 配置如下:
spring:
application:
name: eureka-ha-center ## 設定應用的名稱
cloud:
inetutils:
ignoredInterfaces:
- docker0
- veth.*
- VM.*
preferredNetworks:
- 192.168
複製程式碼
application.yml 配置如下:
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:
defaultZone: http://localhost:1989/eureka ## 註冊到 eureka-center1 上,埠1989
複製程式碼
通過 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 服務。
2、建立高可用的服務提供者,並註冊到上面的兩個註冊中心
application.yml 配置如下:
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
複製程式碼
同樣利用 profiles 區分兩個服務提供者。
注意,defaultZone 設定了上面啟動的兩個註冊中心服務,中間用逗號隔開。
之後設定 vm 引數 -Dspring.profiles.active=ha-provider1 啟動第一個服務提供者,設定 vm 引數 -Dspring.profiles.active=ha-provider2 啟動第二個服務提供者。
之後開啟 eureka ui 介面,看到已經註冊到註冊中心
3、建立服務消費者
application.yml 配置:
spring:
application:
name: ha-customer
server:
port: 1992
eureka:
client:
serviceUrl:
defaultZone: http://localhost:1989/eureka,http://localhost:1988/eureka
instance:
preferIpAddress: true
複製程式碼
啟動服務消費者
通過訪問 http 介面,檢視服務是否可用,通過日誌可以看出每次呼叫有可能負載到不同的服務提供者例項上。
4、停掉一個服務提供者。
訪問 http 介面,不影響服務,會自動負載到正常的服務提供者例項上。
5、停掉一個註冊中心例項。
訪問 http 介面,仍然不受影響。
想要個贊真是太難了,看完給個贊,祝你變更強,✌️