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

古時的風箏發表於2020-01-13

本 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 介面,仍然不受影響。

當然有原始碼了,點我檢視原始碼,並給我一顆 star 吧

想要個贊真是太難了,看完給個贊,祝你變更強,✌️

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

相關文章