[菜鳥SpringCloud入門]第三章:將Eureka改造爲高可用集羣

[菜鳥SpringCloud入門]第三章:將Eureka改造爲高可用集羣
題圖html

前言

歡迎來到菜鳥SpringCloud入門實戰系列(SpringCloudForNoob),該系列經過層層遞進的實戰視角,來一步步學習和理解SpringCloud。git

本系列適合有必定Java以及SpringBoot基礎的同窗閱讀。程序員

每篇文章末尾都附有本文對應的Github源代碼,方便同窗調試。github

Github倉庫地址:面試

https://github.com/qqxx6661/springcloud_for_noob算法

菜鳥SpringCloud入門實戰系列

你還能夠經過如下兩種途徑查看菜鳥SpringCloud入門實戰系列:spring

  • 關注個人公衆號:Rude3Knife 點擊公衆號下方:技術推文——SpringCloud
  • 菜鳥SpringCloud實戰專欄導航頁(CSDN)

前文回顧:後端

  • [菜鳥SpringCloud入門]第一章:構建多模塊的Maven項目+建立註冊中心Eureka子模塊
  • [菜鳥SpringCloud入門]第二章:建立服務提供者並在Eureka進行註冊

實戰版本

  • SpringBoot:2.0.3.RELEASE
  • SpringCloud:Finchley.RELEASE

-----正文開始-----

將Eureka改造爲高可用集羣安全

單機Eureka Server的致命缺陷微信

簡單的服務註冊中心Eureka Server與服務提供者Eureka Client的網絡拓撲圖
[菜鳥SpringCloud入門]第三章:將Eureka改造爲高可用集羣
在這裏插入圖片描述

這種配置方式有如下致命缺陷:

  • 當成千上萬的服務提供者都向它單節點的服務註冊中心進行註冊時,它的負載是很是高的。
  • 一旦這個單節點的服務註冊中心掛掉,則全部服務提供者的註冊信息都將變得不可用。

建立eureka-ha子模塊(high available的縮寫)

爲了方便學習集羣eureka,咱們建立單獨的子模塊eureka-ha

修改其application.yml

---
# 高可用節點1的配置
server:
  port: 8771
spring:
  # 節點1的標籤
  profiles: peer1
  # 服務名保持一致
  application:
    name: eureka-ha
eureka:
  instance:
    hostname: peer1
  client:
    # 進行註冊(高可用配置、默認配置)
    # registerWithEureka: true
    # 獲取註冊信息(高可用配置、默認配置)
    # fetchRegistry: true
    serviceUrl:
      # 節點1向節點2/3進行服務註冊
      defaultZone: http://localhost:8772/eureka/,http://localhost:8773/eureka/

---
# 高可用節點2的配置
server:
  port: 8772
spring:
  # 節點2的標籤
  profiles: peer2
  # 服務名保持一致
  application:
    name: eureka-ha
eureka:
  instance:
    hostname: peer2
  client:
    # 進行註冊(高可用配置、默認配置)
    # registerWithEureka: true
    # 獲取註冊信息(高可用配置、默認配置)
    # fetchRegistry: true
    serviceUrl:
      # 節點2向節點1/3進行服務註冊
      defaultZone: http://localhost:8771/eureka/,http://localhost:8773/eureka/

---
# 高可用節點3的配置
server:
  port: 8773
spring:
  # 節點3的標籤
  profiles: peer3
  # 服務名保持一致
  application:
    name: eureka-ha
eureka:
  instance:
    hostname: peer3
  client:
    # 進行註冊(高可用配置、默認配置)
    # registerWithEureka: true
    # 獲取註冊信息(高可用配置、默認配置)
    # fetchRegistry: true
    serviceUrl:
      # 節點3向節點1/2進行服務註冊
      defaultZone: http://localhost:8771/eureka/,http://localhost:8772/eureka/

代碼重點:

  • 在yml文件中,經過---來區分多個文件,減小配置文件個數。
  • 高可用配置中的節點,每一個節點的端口號不一樣
  • 高可用配置中的節點,全部節點的服務名相同,即spring.application.name相同
  • 高可用配置中的節點,默認狀況下,registerWithEureka: true、fetchRegistry: true
  • 高可用配置中的節點,須要向除本身以外的節點進行服務註冊
  • 高可用配置中,設置了每一個節點的標籤spring.profiles,經過此標籤來區分到底啓動哪一個配置頁。

修改EurekaHaApplication啓動類

和eureka一養,添加@EnableEurekaServer

啓動三節點Eureka

由於是集羣,因此要啓動三個端口不一樣的實例,端口已經在yml文件中進行了設置。

在Run configuration裏自行設置三個運行配置,分別對應三個配置文件,注意圖中箭頭的設置。
[菜鳥SpringCloud入門]第三章:將Eureka改造爲高可用集羣
在這裏插入圖片描述

你也可使用複製配置按鈕:
[菜鳥SpringCloud入門]第三章:將Eureka改造爲高可用集羣
在這裏插入圖片描述

若是你發現Run configuration裏沒有eureka-ha,請手動添加:
[菜鳥SpringCloud入門]第三章:將Eureka改造爲高可用集羣
在這裏插入圖片描述

最後,分別運行三個eureka-ha:
[菜鳥SpringCloud入門]第三章:將Eureka改造爲高可用集羣
在這裏插入圖片描述

打開網頁,輸入 http://localhost:8771/http://localhost:8772/http://localhost:8773/

能夠看到,Instances裏有了三個註冊的實例
[菜鳥SpringCloud入門]第三章:將Eureka改造爲高可用集羣
在這裏插入圖片描述

你覺得大功告成了,然而,你發現有一個問題,全部的服務顯示在了unavailable-replicas之下。

通過搜索,看見了以下解釋,

參考:Eureka高可用,節點均出如今unavailable-replicas下:

https://www.jianshu.com/p/59c54ccc6ba6

eureka.client.serviceUrl.defaultZone配置項的地址,不能使用localhost,要使用域名,DNS解析請自行配置。

因爲咱們在yml文件裏設置了相似defaultZone: http://localhost:8771/eureka/,http://localhost:8772/eureka/, 符合上述問題, 因此這裏的註冊url不能設置爲localhost

看來,仍是須要本身搞定DNS,對應我Windows的環境,也就是要修改host設置。

修改HOST請自行谷歌,在host文件下添加三行:

127.0.0.1    peer1
127.0.0.1    peer2
127.0.0.1    peer3

從新啓動三個實例,大功告成:
[菜鳥SpringCloud入門]第三章:將Eureka改造爲高可用集羣
在這裏插入圖片描述

高可用服務測試

咱們新建子模塊eureka-hi-ha,用來做爲高可用集羣下的服務提供者

修改application.yml,設置爲8783端口

# 服務地址
server:
  port: 8783
# 服務名稱
spring:
  application:
    name: service-hi-ha
eureka:
  client:
    serviceUrl:
      # 這裏只須要執行其中一個服務註冊中心節點便可
      defaultZone: http://peer1:8771/eureka/

這裏只須要執行其中一個服務註冊中心節點便可,其餘兩個eureka會自動收到來自peer1的客戶端記錄信息,進行同步。

啓動eureka-hi-ha,同時剛纔的三個eureka server 不要關閉
[菜鳥SpringCloud入門]第三章:將Eureka改造爲高可用集羣
在這裏插入圖片描述

查看網頁: http://localhost:8771/http://localhost:8772/http://localhost:8773/

能夠看到,8773也成功顯示了服務。
[菜鳥SpringCloud入門]第三章:將Eureka改造爲高可用集羣
在這裏插入圖片描述

咱們來實驗讓一個節點停機,咱們關閉peer1的進程

注意:

  • peer1節點並無當即從服務列表中消失,這是由於服務註冊中心經過心跳來檢測服務是否存活。
  • 服務宕機以後,服務並不會立刻從服務註冊中心註銷。
  • 只有當超過規定時間還未檢測到服務時,纔會註銷服務。
  • 雖然peer1節點掛掉了,可是eureka-hi-ha的註冊信息在其餘註冊中心節點仍是存在的。

高可用的服務註冊中心Eureka Server與服務提供者Eureka Client的網絡拓撲圖,能夠總結以下:
[菜鳥SpringCloud入門]第三章:將Eureka改造爲高可用集羣
在這裏插入圖片描述

當前其中任意節點宕機以後,其餘節點上還保存着全部的服務註冊信息。

本章代碼

https://github.com/qqxx6661/springcloud_for_noob/tree/master/03-eureka-ha-eureka-hi-h

參考

springcloud(二):註冊中心Eureka:

http://www.ityouknow.com/springcloud/2017/05/10/springcloud-eureka.html

Spring-Cloud筆記03:服務註冊中心Eureka Server的簡單配置、訪問控制配置以及高可用配置

https://blog.csdn.net/hanchao5272/article/details/80561199

-----正文結束-----

全複習手冊文章導航:經過如下兩種途徑查看

  • 關注個人公衆號:Rude3Knife 點擊公衆號下方:技術推文——SpringCloud
  • 菜鳥SpringCloud實戰專欄(CSDN)

關注我

我是蠻三刀把刀,後端開發。

主要關注後端開發,數據安全,爬蟲等方向。

來微信和我聊聊:yangzd1102

Github我的主頁:

https://github.com/qqxx6661

原創博客主要內容

  • Java知識點複習全手冊
  • Leetcode算法題解析
  • 劍指offer算法題解析
  • Python爬蟲相關技術實戰
  • 後端開發相關技術實戰
  • SpringCloud入門實戰

同步更新公衆號及如下博客

  1. Csdn

http://blog.csdn.net/qqxx6661

擁有專欄:

  • Leetcode題解(Java/Python)
  • Python爬蟲實戰
  • Java程序員知識點複習手冊
  • SpringCloud入門實戰
    1. 知乎

https://www.zhihu.com/people/yang-zhen-dong-1/

擁有專欄:

  • Java程序員面試複習手冊
  • LeetCode算法題詳解與代碼實現
  • 後臺開發實戰
    1. 掘金

https://juejin.im/user/5b48015ce51d45191462ba55

  1. 簡書

https://www.jianshu.com/u/b5f225ca2376

我的公衆號:Rude3Knife

[菜鳥SpringCloud入門]第三章:將Eureka改造爲高可用集羣
我的公衆號:Rude3Knife

若是文章對你有幫助,不妨收藏起來並轉發給您的朋友們~

相關文章
相關標籤/搜索