【夯實Spring Cloud】Spring Cloud中使用Eureka集羣搭建高可用服務註冊中心

本文屬於【夯實Spring Cloud】系列文章,該系列旨在用通俗易懂的語言,帶大家瞭解和學習Spring Cloud技術,希望能給讀者帶來一些乾貨。系列目錄如下:

【夯實Spring Cloud】Dubbo沉睡5年,Spring Cloud開始崛起!
【夯實Spring Cloud】Spring Cloud中基於maven的分佈式項目框架的搭建
【夯實Spring Cloud】Spring Cloud中的Eureka服務註冊與發現詳解
【夯實Spring Cloud】Spring Cloud中如何完善Eureka中的服務信息
【夯實Spring Cloud】Spring Cloud中使用Eureka集羣搭建高可用服務註冊中心
【夯實Spring Cloud】Spring Cloud中使用Ribbon實現負載均衡詳解(正在寫……)
【夯實Spring Cloud】Spring Cloud中使用Feign實現負載均衡詳解(正在寫……)
【夯實Srping Cloud】Spring Cloud中使用Hystrix實現斷路器原理詳解(正在寫……)
【夯實Spring Cloud】Spring Cloud中使用Zuul實現路由網關詳解(正在寫……)
【夯實Spring Cloud】Spring Cloud分佈式配置中心詳解(正在寫……)
【夯實Spring Cloud】未完待續


前面兩節,對 Spring Cloud 中 Eureka 服務註冊和發現做了詳細的分析,並且完善了 Eureka 中的服務信息,做到人性化。這一節主要介紹一下如何搭建一個高可用的 Eureka 集羣。

1. 分佈式和集羣有啥區別?

可能有很多人對分佈式和集羣這兩個概念有點混淆。我先用通俗易懂的話給大家解釋下:

分佈式:一個業務分拆多個子業務,部署在不同的服務器上
集羣:同一個業務,分別部署在不同的服務器上

所以分佈式的每一個節點,完成的是不同的業務,一個節點掛了,那麼這個業務功能就無法訪問了,甚至可能會影響到其他業務。而集羣是一個比較有組織的架構,正因爲有組織性,一個服務節點掛了,其他服務節點可以頂上來,從而保證了服務的健壯性。

所以說,集羣可以理解爲:你中有我,我中有你,手拉手肩並肩,一起保證服務的健壯性

2. Eureka集羣邏輯

在搭建 Eureka 集羣之前,先來回顧一下前面搭建的單個 Eureka 服務,看下 yml 配置文件:

server:
  port: 7001

eureka:
  instance:
    #eureka服務端的實例名稱
    hostname: eureka01
  client:
    # false表示不向註冊中心註冊自己
    register-with-eureka: false
    # false表示自己端就是註冊中心,我的職責就是維護服務實例,並不需要去檢索服務
    fetch-registry: false
    service-url:
      #設置與Eureka Server交互的地址查詢服務和註冊服務都需要依賴這個地址(單機)。
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

這是一個 Eureka 服務,名稱是 eureka7001, 註冊中心是它自己的。那麼我們如何去搭建一個 Eureka 集羣呢?假設現在有三個 Eureka 服務:eureka7001、eureka7002 和 eureka7003。

爲了體現出集羣的你中有我,我中有你,不難想象,eureka7001 中應該掛上 eureka7002 和 eureka7003;eureka7002 中應該掛上 eureka7001 和 eureka7003;eureka7003 中應該掛上 eureka7001 和 eureka7002。如下圖所示:
eureka集羣示意圖

這樣就搭建好了一個 Eureka 集羣了,那麼我們如何去實現呢?接下來就落實到具體實現方式。

3. Eureka7001的改造

由上面的分析可知,Eureka7001 需要掛上 Eureka7002 和 Eureka7003,所以在 Eureka7001 的配置文件中需要重新配置一下 defaultZone,如下:

server:
  port: 7001

eureka:
  instance:
    #eureka服務端的實例名稱
    hostname: eureka01
  client:
    # false表示不向註冊中心註冊自己
    register-with-eureka: false
    # false表示自己端就是註冊中心,我的職責就是維護服務實例,並不需要去檢索服務
    fetch-registry: false
    service-url:
      defaultZone: http://eureka02.com:7002/eureka/,http://eureka03.com:7003/eureka/

OK,defaultZone 配置好了 eureka7002 和 eureka 7003。

4. 搭建Eureka7002

以同樣的方式,拷貝一份 Eureka7001 的工程,修改其配置文件:

server:
  port: 7002

eureka:
  instance:
    #eureka服務端的實例名稱
    hostname: eureka02
  client:
    # false表示不向註冊中心註冊自己
    register-with-eureka: false
    # false表示自己端就是註冊中心,我的職責就是維護服務實例,並不需要去檢索服務
    fetch-registry: false
    service-url: 
      defaultZone: http://eureka01.com:7001/eureka/,http://eureka03.com:7003/eureka/

可以看出,在 eureka7002 中,把 eureka7001 和 eureka7003 掛進來。

5. 搭建Eureka7003

以相同的方式,把 eureka7003 也搭建好。

server:
  port: 7003

eureka:
  instance:
    #eureka服務端的實例名稱
    hostname: eureka03
  client:
    # false表示不向註冊中心註冊自己
    register-with-eureka: false
    # false表示自己端就是註冊中心,我的職責就是維護服務實例,並不需要去檢索服務
    fetch-registry: false
    service-url: 
      defaultZone: http://eureka01.com:7001/eureka/,http://eureka02.com:7002/eureka/

ok,現在三個 eureka 註冊中心都搭建好了,最後別忘了在本地 hosts 文件中將 eureka7001、eureka7002 和 eureka7003 映射到 127.0.0.1。

6. 修改訂單服務

我們首先來回憶下,之前的訂單服務提供方的配置文件是怎麼寫的:

# 客戶端註冊進eureka服務列表裏
eureka:
  client:
    service-url:
      defaultZone: http://eureka01:7001/eureka/
  instance:
    instance-id: 書籍訂單服務-8001  # 人性化顯示出服務的信息
    prefer-ip-address: true    # 訪問路徑可顯示ip地址

是將訂單服務註冊到 eureka7001 中,因爲之前就這一個 eureka 註冊中心,那麼現在有三個了,我們需要修改下配置,將訂單服務註冊到三個 eureka 中。

# 客戶端註冊進eureka服務列表裏
eureka:
  client:
    service-url:
      defaultZone: http://eureka01:7001/eureka/,http://eureka02:7002/eureka/,http://eureka03:7003/eureka/
  instance:
    instance-id: 書籍訂單服務-8001  # 人性化顯示出服務的信息
    prefer-ip-address: true    # 訪問路徑可顯示ip地址

7. 測試效果

OK,所有搭建步驟都完成了,接下來分別啓動一下 eureka7001、eureka7002 和 eureka7003,再啓動下訂單提供服務。然後我們可以分別訪問下三個 eureka 註冊中心,看一下結果。我以訪問 eureka7001 爲例,可以看到該服務中心掛着 eureka7002 和 eureka7003,而且訂單服務也成功註冊到該註冊中心。

集羣結果


更多優質文章請關注我的微信公衆號【程序員私房菜】,更多編程和架構等學習資源等你來獲取。

程序員私房菜

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章