前言
歡迎來(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)系列:
- 關(guān)注我的公眾號(hào):Rude3Knife 點(diǎn)擊公眾號(hào)下方:技術(shù)推文——SpringCloud
- 菜鳥SpringCloud實(shí)戰(zhàn)專欄導(dǎo)航頁(yè)(CSDN)
實(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ò)以下兩種途徑查看
- 關(guān)注我的公眾號(hào):Rude3Knife 點(diǎn)擊公眾號(hào)下方:技術(shù)推文——SpringCloud
- 菜鳥SpringCloud實(shí)戰(zhàn)專欄(CSDN)
菜鳥SpringCloud實(shí)戰(zhàn)專欄
- [菜鳥SpringCloud入門]第一章:構(gòu)建多模塊的Maven項(xiàng)目+創(chuàng)建注冊(cè)中心Eureka子模塊
- [菜鳥SpringCloud入門]第二章:創(chuàng)建服務(wù)提供者并在Eureka進(jìn)行注冊(cè)
- ...更多文章請(qǐng)查看上方:菜鳥SpringCloud入門實(shí)戰(zhàn)專欄導(dǎo)航頁(yè)
關(guān)注我
我是蠻三刀把刀,后端開發(fā)牌里。
主要關(guān)注后端開發(fā)颊咬,數(shù)據(jù)安全,爬蟲等方向牡辽。
來(lái)微信和我聊聊:yangzd1102
Github個(gè)人主頁(yè):
原創(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
擁有專欄:
- 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
如果文章對(duì)你有幫助喳篇,不妨收藏起來(lái)并轉(zhuǎn)發(fā)給您的朋友們~