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

在這里插入圖片描述

前言

歡迎來(lái)到菜鳥SpringCloud入門實(shí)戰(zhàn)系列(SpringCloudForNoob),該系列通過(guò)層層遞進(jìn)的實(shí)戰(zhàn)視角社裆,來(lái)一步步學(xué)習(xí)和理解SpringCloud。

本系列適合有一定Java以及SpringBoot基礎(chǔ)的同學(xué)閱讀点寥。

每篇文章末尾都附有本文對(duì)應(yīng)的Github源代碼拌喉,方便同學(xué)調(diào)試。

Github倉(cāng)庫(kù)地址:

https://github.com/qqxx6661/springcloud_for_noob

菜鳥SpringCloud入門實(shí)戰(zhàn)系列

你還可以通過(guò)以下兩種途徑查看菜鳥SpringCloud入門實(shí)戰(zhàn)系列

實(shí)戰(zhàn)版本

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

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

將Eureka改造為高可用集群

單機(jī)Eureka Server的致命缺陷

簡(jiǎn)單的服務(wù)注冊(cè)中心Eureka Server與服務(wù)提供者Eureka Client的網(wǎng)絡(luò)拓?fù)鋱D

在這里插入圖片描述

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

  • 當(dāng)成千上萬(wàn)的服務(wù)提供者都向它單節(jié)點(diǎn)的服務(wù)注冊(cè)中心進(jìn)行注冊(cè)時(shí)押框,它的負(fù)載是非常高的岔绸。
  • 一旦這個(gè)單節(jié)點(diǎn)的服務(wù)注冊(cè)中心掛掉,則所有服務(wù)提供者的注冊(cè)信息都將變得不可用橡伞。

創(chuàng)建eureka-ha子模塊(high available的縮寫)

為了方便學(xué)習(xí)集群eureka盒揉,我們創(chuàng)建單獨(dú)的子模塊eureka-ha

修改其application.yml

---
# 高可用節(jié)點(diǎn)1的配置
server:
  port: 8771
spring:
  # 節(jié)點(diǎn)1的標(biāo)簽
  profiles: peer1
  # 服務(wù)名保持一致
  application:
    name: eureka-ha
eureka:
  instance:
    hostname: peer1
  client:
    # 進(jìn)行注冊(cè)(高可用配置、默認(rèn)配置)
    # registerWithEureka: true
    # 獲取注冊(cè)信息(高可用配置骑歹、默認(rèn)配置)
    # fetchRegistry: true
    serviceUrl:
      # 節(jié)點(diǎn)1向節(jié)點(diǎn)2/3進(jìn)行服務(wù)注冊(cè)
      defaultZone: http://localhost:8772/eureka/,http://localhost:8773/eureka/

---
# 高可用節(jié)點(diǎn)2的配置
server:
  port: 8772
spring:
  # 節(jié)點(diǎn)2的標(biāo)簽
  profiles: peer2
  # 服務(wù)名保持一致
  application:
    name: eureka-ha
eureka:
  instance:
    hostname: peer2
  client:
    # 進(jìn)行注冊(cè)(高可用配置预烙、默認(rèn)配置)
    # registerWithEureka: true
    # 獲取注冊(cè)信息(高可用配置、默認(rèn)配置)
    # fetchRegistry: true
    serviceUrl:
      # 節(jié)點(diǎn)2向節(jié)點(diǎn)1/3進(jìn)行服務(wù)注冊(cè)
      defaultZone: http://localhost:8771/eureka/,http://localhost:8773/eureka/

---
# 高可用節(jié)點(diǎn)3的配置
server:
  port: 8773
spring:
  # 節(jié)點(diǎn)3的標(biāo)簽
  profiles: peer3
  # 服務(wù)名保持一致
  application:
    name: eureka-ha
eureka:
  instance:
    hostname: peer3
  client:
    # 進(jìn)行注冊(cè)(高可用配置道媚、默認(rèn)配置)
    # registerWithEureka: true
    # 獲取注冊(cè)信息(高可用配置扁掸、默認(rèn)配置)
    # fetchRegistry: true
    serviceUrl:
      # 節(jié)點(diǎn)3向節(jié)點(diǎn)1/2進(jìn)行服務(wù)注冊(cè)
      defaultZone: http://localhost:8771/eureka/,http://localhost:8772/eureka/

代碼重點(diǎn):

  • 在yml文件中,通過(guò)---來(lái)區(qū)分多個(gè)文件最域,減少配置文件個(gè)數(shù)谴分。
  • 高可用配置中的節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的端口號(hào)不同
  • 高可用配置中的節(jié)點(diǎn)镀脂,所有節(jié)點(diǎn)的服務(wù)名相同牺蹄,即spring.application.name相同
  • 高可用配置中的節(jié)點(diǎn),默認(rèn)情況下薄翅,registerWithEureka: true沙兰、fetchRegistry: true
  • 高可用配置中的節(jié)點(diǎn),需要向除自己之外的節(jié)點(diǎn)進(jìn)行服務(wù)注冊(cè)
  • 高可用配置中翘魄,設(shè)置了每個(gè)節(jié)點(diǎn)的標(biāo)簽spring.profiles鼎天,通過(guò)此標(biāo)簽來(lái)區(qū)分到底啟動(dòng)哪個(gè)配置頁(yè)。

修改EurekaHaApplication啟動(dòng)類

和eureka一養(yǎng)暑竟,添加@EnableEurekaServer

啟動(dòng)三節(jié)點(diǎn)Eureka

因?yàn)槭羌赫洌砸獑?dòng)三個(gè)端口不同的實(shí)例,端口已經(jīng)在yml文件中進(jìn)行了設(shè)置。

在Run configuration里自行設(shè)置三個(gè)運(yùn)行配置罗岖,分別對(duì)應(yīng)三個(gè)配置文件涧至,注意圖中箭頭的設(shè)置。

在這里插入圖片描述

你也可以使用復(fù)制配置按鈕:

在這里插入圖片描述

如果你發(fā)現(xiàn)Run configuration里沒(méi)有eureka-ha桑包,請(qǐng)手動(dòng)添加:

在這里插入圖片描述

最后南蓬,分別運(yùn)行三個(gè)eureka-ha:

在這里插入圖片描述

打開網(wǎng)頁(yè),輸入 http://localhost:8771/ 捡多, http://localhost:8772/ 蓖康,http://localhost:8773/

可以看到,Instances里有了三個(gè)注冊(cè)的實(shí)例

在這里插入圖片描述

你以為大功告成了垒手,然而蒜焊,你發(fā)現(xiàn)有一個(gè)問(wèn)題,所有的服務(wù)顯示在了unavailable-replicas之下科贬。

經(jīng)過(guò)搜索泳梆,看見(jiàn)了如下解釋,

參考:Eureka高可用榜掌,節(jié)點(diǎn)均出現(xiàn)在unavailable-replicas下:

http://www.reibang.com/p/59c54ccc6ba6

eureka.client.serviceUrl.defaultZone配置項(xiàng)的地址优妙,不能使用localhost,要使用域名憎账,DNS解析請(qǐng)自行配置套硼。

由于我們?cè)趛ml文件里設(shè)置了類似defaultZone: http://localhost:8771/eureka/,http://localhost:8772/eureka/, 符合上述問(wèn)題, 所以這里的注冊(cè)u(píng)rl不能設(shè)置為localhost

看來(lái)胞皱,還是需要自己搞定DNS邪意,對(duì)應(yīng)我Windows的環(huán)境,也就是要修改host設(shè)置反砌。

修改HOST請(qǐng)自行谷歌雾鬼,在host文件下添加三行:

127.0.0.1   peer1
127.0.0.1   peer2
127.0.0.1   peer3

重新啟動(dòng)三個(gè)實(shí)例,大功告成:

在這里插入圖片描述

高可用服務(wù)測(cè)試

我們新建子模塊eureka-hi-ha宴树,用來(lái)作為高可用集群下的服務(wù)提供者

修改application.yml策菜,設(shè)置為8783端口

# 服務(wù)地址
server:
  port: 8783
# 服務(wù)名稱
spring:
  application:
    name: service-hi-ha
eureka:
  client:
    serviceUrl:
      # 這里只需要執(zhí)行其中一個(gè)服務(wù)注冊(cè)中心節(jié)點(diǎn)即可
      defaultZone: http://peer1:8771/eureka/

這里只需要執(zhí)行其中一個(gè)服務(wù)注冊(cè)中心節(jié)點(diǎn)即可,其他兩個(gè)eureka會(huì)自動(dòng)收到來(lái)自peer1的客戶端記錄信息酒贬,進(jìn)行同步又憨。

啟動(dòng)eureka-hi-ha,同時(shí)剛才的三個(gè)eureka server 不要關(guān)閉

在這里插入圖片描述

查看網(wǎng)頁(yè): http://localhost:8771/ 锭吨, http://localhost:8772/ 竟块,http://localhost:8773/

可以看到,8773也成功顯示了服務(wù)耐齐。

在這里插入圖片描述

我們來(lái)實(shí)驗(yàn)讓一個(gè)節(jié)點(diǎn)停機(jī),我們關(guān)閉peer1的進(jìn)程

注意:

  • peer1節(jié)點(diǎn)并沒(méi)有立即從服務(wù)列表中消失,這是因?yàn)榉?wù)注冊(cè)中心通過(guò)心跳來(lái)檢測(cè)服務(wù)是否存活埠况。
  • 服務(wù)宕機(jī)之后耸携,服務(wù)并不會(huì)馬上從服務(wù)注冊(cè)中心注銷。
  • 只有當(dāng)超過(guò)規(guī)定時(shí)間還未檢測(cè)到服務(wù)時(shí)辕翰,才會(huì)注銷服務(wù)夺衍。
  • 雖然peer1節(jié)點(diǎn)掛掉了,但是eureka-hi-ha的注冊(cè)信息在其他注冊(cè)中心節(jié)點(diǎn)還是存在的喜命。

高可用的服務(wù)注冊(cè)中心Eureka Server與服務(wù)提供者Eureka Client的網(wǎng)絡(luò)拓?fù)鋱D沟沙,可以總結(jié)如下:

在這里插入圖片描述

當(dāng)前其中任意節(jié)點(diǎn)宕機(jī)之后,其他節(jié)點(diǎn)上還保存著所有的服務(wù)注冊(cè)信息壁榕。

參考

springcloud(二):注冊(cè)中心Eureka:

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

Spring-Cloud筆記03:服務(wù)注冊(cè)中心Eureka Server的簡(jiǎn)單配置矛紫、訪問(wèn)控制配置以及高可用配置

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

-----正文結(jié)束-----

全復(fù)習(xí)手冊(cè)文章導(dǎo)航:通過(guò)以下兩種途徑查看

菜鳥SpringCloud實(shí)戰(zhàn)專欄

關(guān)注我

我是蠻三刀把刀,后端開發(fā)牌里。

主要關(guān)注后端開發(fā)颊咬,數(shù)據(jù)安全,爬蟲等方向牡辽。

來(lái)微信和我聊聊:yangzd1102

Github個(gè)人主頁(yè):

https://github.com/qqxx6661

原創(chuàng)博客主要內(nèi)容

  • Java知識(shí)點(diǎn)復(fù)習(xí)全手冊(cè)
  • Leetcode算法題解析
  • 劍指offer算法題解析
  • Python爬蟲相關(guān)技術(shù)實(shí)戰(zhàn)
  • 后端開發(fā)相關(guān)技術(shù)實(shí)戰(zhàn)
  • SpringCloud入門實(shí)戰(zhàn)

同步更新公眾號(hào)及以下博客

1. Csdn

http://blog.csdn.net/qqxx6661

擁有專欄:

  • Leetcode題解(Java/Python)
  • Python爬蟲實(shí)戰(zhàn)
  • Java程序員知識(shí)點(diǎn)復(fù)習(xí)手冊(cè)
  • SpringCloud入門實(shí)戰(zhàn)

2. 知乎

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

擁有專欄:

  • Java程序員面試復(fù)習(xí)手冊(cè)
  • LeetCode算法題詳解與代碼實(shí)現(xiàn)
  • 后臺(tái)開發(fā)實(shí)戰(zhàn)

3. 掘金

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

4. 簡(jiǎn)書

http://www.reibang.com/u/b5f225ca2376

個(gè)人公眾號(hào):Rude3Knife

個(gè)人公眾號(hào):Rude3Knife

如果文章對(duì)你有幫助喳篇,不妨收藏起來(lái)并轉(zhuǎn)發(fā)給您的朋友們~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市态辛,隨后出現(xiàn)的幾起案子麸澜,更是在濱河造成了極大的恐慌,老刑警劉巖奏黑,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炊邦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡攀涵,警方通過(guò)查閱死者的電腦和手機(jī)铣耘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)以故,“玉大人蜗细,你說(shuō)我怎么就攤上這事∨辏” “怎么了炉媒?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)昆烁。 經(jīng)常有香客問(wèn)我吊骤,道長(zhǎng),這世上最難降的妖魔是什么静尼? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任白粉,我火速辦了婚禮传泊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸭巴。我一直安慰自己眷细,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布鹃祖。 她就那樣靜靜地躺著溪椎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恬口。 梳的紋絲不亂的頭發(fā)上校读,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音祖能,去河邊找鬼歉秫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛芯杀,可吹牛的內(nèi)容都是我干的端考。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼揭厚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼却特!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起筛圆,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤裂明,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后太援,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闽晦,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年提岔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仙蛉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碱蒙,死狀恐怖荠瘪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赛惩,我是刑警寧澤哀墓,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站喷兼,受9級(jí)特大地震影響篮绰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜季惯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一吠各、第九天 我趴在偏房一處隱蔽的房頂上張望臀突。 院中可真熱鬧,春花似錦走孽、人聲如沸惧辈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至念逞,卻和暖如春困食,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翎承。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工硕盹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叨咖。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓瘩例,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親甸各。 傳聞我的和親對(duì)象是個(gè)殘疾皇子垛贤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容