Spring Cloud:使用Eureka叢集搭建高可用服務註冊中心

程式設計師私房菜發表於2019-01-10

這一篇主要介紹一下如何搭建一個高可用的 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。如下圖所示:

Spring Cloud:使用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/,

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/,

可以看出,在 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/,

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,而且訂單服務也成功註冊到該註冊中心。

Spring Cloud:使用Eureka叢集搭建高可用服務註冊中心

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31558358/viewspace-2375380/,如需轉載,請註明出處,否則將追究法律責任。

相關文章