您好,登錄后才能下訂單哦!
在一個(gè)分布式系統(tǒng)中,服務(wù)注冊(cè)中心是最重要的基礎(chǔ)部分,如果是單點(diǎn)話,遇到故障就是毀滅性的,理應(yīng)隨時(shí)處于可以提供服務(wù)的狀態(tài)。為了維持其可用性,使用集群是很好的解決方案。Eureka通過(guò)互相注冊(cè)的方式來(lái)實(shí)現(xiàn)高可用的部署,所以我們只需要將Eureke Server配置其他可用的serviceUrl就能實(shí)現(xiàn)高可用部署。 Eureka集群框架圖如下:
上一篇 我們 搭建了一個(gè)單機(jī)版的Eureka Server ,在這個(gè)基礎(chǔ)上我們進(jìn)行改造。
創(chuàng)建3個(gè)application.yml文件,分別為 applicatiom-peer1.yml ,applicatiom-peer2.yml ,applicatiom-peer3.yml
applicatiom-peer1.yml 的 配置內(nèi)容如下:
#高可用的Eureka-Server 集群 peer1spring: application: name: Eureka-Server-peer #應(yīng)用名稱,也是服務(wù)注冊(cè)的名稱server: port: 8001 #開(kāi)啟端口eureka: instance: prefer-ip-address: true #提交ip信息 status-page-url-path: /actuator/info #信息查詢的url link health-check-url-path: /actuator/health #健康檢查的url hostname: peer1 #主機(jī)名 client: #在默認(rèn)情況下,Eureka servce 會(huì)向自己注冊(cè),這時(shí)需要設(shè)置registerWithEureka和fetchRegistry 為false,防止自己注冊(cè)自己 #在Eureka集群中,允許注冊(cè)中心自己作為服務(wù)向其他注冊(cè)中心注冊(cè)自己,這樣就可以形成一組相互注冊(cè)的注冊(cè)中心,他們互相同步服務(wù)清單,做到了我們要的高可用 #是否將自己注冊(cè)到Eureka Server 默認(rèn)為true registerWithEureka: true #是否從Eureka Server查詢注冊(cè)信息 fetchRegistry: true #服務(wù)注冊(cè)地址 serviceUrl: #與Eureka Server交互的地址,查詢服務(wù)和服務(wù)注冊(cè)都需要依賴這個(gè)地址, #默認(rèn)為http://localhost:8761/eureka, 多個(gè)地址用","分割 defaultZone: http://peer2:8002/eureka/,http://peer3:8003/eureka/ server: #enable-self-preservation: true #開(kāi)啟自我保護(hù)模式 #eviction-interval-timer-in-ms: 4000 #清理服務(wù)間隔4s,默認(rèn)60*10000 復(fù)制代碼
applicatiom-peer2.yml 的 配置內(nèi)容如下:
#高可用的Eureka-Server 集群 peer2spring: application: name: Eureka-Server-peer #應(yīng)用名稱,也是服務(wù)注冊(cè)的名稱server: port: 8002 #開(kāi)啟端口eureka: instance: prefer-ip-address: true #提交ip信息 status-page-url-path: /actuator/info #信息查詢的url link health-check-url-path: /actuator/health #健康檢查的url hostname: peer2 #主機(jī)名 client: #在默認(rèn)情況下,Eureka servce 會(huì)向自己注冊(cè),這時(shí)需要設(shè)置registerWithEureka和fetchRegistry 為false,防止自己注冊(cè)自己 #在Eureka集群中,允許注冊(cè)中心自己作為服務(wù)向其他注冊(cè)中心注冊(cè)自己,這樣就可以形成一組相互注冊(cè)的注冊(cè)中心,他們互相同步服務(wù)清單,做到了我們要的高可用 #是否將自己注冊(cè)到Eureka Server 默認(rèn)為true registerWithEureka: true #是否從Eureka Server查詢注冊(cè)信息 fetchRegistry: true #服務(wù)注冊(cè)地址 serviceUrl: #與Eureka Server交互的地址,查詢服務(wù)和服務(wù)注冊(cè)都需要依賴這個(gè)地址, #默認(rèn)為http://localhost:8761/eureka, 多個(gè)地址用","分割 defaultZone: http://peer1:8001/eureka/,http://peer3:8003/eureka/ server: #enable-self-preservation: true #開(kāi)啟自我保護(hù)模式 #eviction-interval-timer-in-ms: 4000 #清理服務(wù)間隔4s,默認(rèn)60*10000 復(fù)制代碼
applicatiom-peer3.yml 的 配置內(nèi)容如下:
#高可用的Eureka-Server 集群 peer2spring: application: name: Eureka-Server-peer #應(yīng)用名稱,也是服務(wù)注冊(cè)的名稱server: port: 8003 #開(kāi)啟端口eureka: instance: prefer-ip-address: true #提交ip信息 status-page-url-path: /actuator/info #信息查詢的url link health-check-url-path: /actuator/health #健康檢查的url hostname: peer3 #主機(jī)名 client: #在默認(rèn)情況下,Eureka servce 會(huì)向自己注冊(cè),這時(shí)需要設(shè)置registerWithEureka和fetchRegistry 為false,防止自己注冊(cè)自己 #在Eureka集群中,允許注冊(cè)中心自己作為服務(wù)向其他注冊(cè)中心注冊(cè)自己,這樣就可以形成一組相互注冊(cè)的注冊(cè)中心,他們互相同步服務(wù)清單,做到了我們要的高可用 #是否將自己注冊(cè)到Eureka Server 默認(rèn)為true registerWithEureka: true #是否從Eureka Server查詢注冊(cè)信息 fetchRegistry: true #服務(wù)注冊(cè)地址 serviceUrl: #與Eureka Server交互的地址,查詢服務(wù)和服務(wù)注冊(cè)都需要依賴這個(gè)地址, #默認(rèn)為http://localhost:8761/eureka, 多個(gè)地址用","分割 #defaultZone: http://peer1:8001/eureka/,http://peer2:8002/eureka/ server: #enable-self-preservation: true #開(kāi)啟自我保護(hù)模式 eviction-interval-timer-in-ms: 4000 #清理服務(wù)間隔4s,默認(rèn)60*10000 復(fù)制代碼
其中:設(shè)置 enable-self-preservation: true #開(kāi)啟自我保護(hù)模式在默認(rèn)配置中,Eureka Server在默認(rèn)90s沒(méi)有得到客戶端的心跳,則注銷該實(shí)例,但是往往因?yàn)槲⒎?wù)跨進(jìn)程調(diào)用,網(wǎng)絡(luò)通信往往會(huì)面臨著各種問(wèn)題,比如微服務(wù)狀態(tài)正常,但是因?yàn)榫W(wǎng)絡(luò)分區(qū)故障時(shí),Eureka Server注銷服務(wù)實(shí)例則會(huì)讓大部分微服務(wù)不可用,這很危險(xiǎn),因?yàn)榉?wù)明明沒(méi)有問(wèn)題。為了解決這個(gè)問(wèn)題,Eureka 有自我保護(hù)機(jī)制,通過(guò)在Eureka Server配置如下參數(shù),可啟動(dòng)保護(hù)機(jī)制。
enable-self-preservation: true
它的原理是,當(dāng)Eureka Server節(jié)點(diǎn)在短時(shí)間內(nèi)丟失過(guò)多的客戶端時(shí)(可能發(fā)送了網(wǎng)絡(luò)故障),那么這個(gè)節(jié)點(diǎn)將進(jìn)入自我保護(hù)模式,不再注銷任何微服務(wù),當(dāng)網(wǎng)絡(luò)故障回復(fù)后,該節(jié)點(diǎn)會(huì)自動(dòng)退出自我保護(hù)模式。
(在開(kāi)發(fā)中 可以不設(shè)置,方便開(kāi)發(fā))
#高可用的Eureka-Server 集群spring: profiles: active: peer1 復(fù)制代碼
修改C:\Windows\System32\drivers\etc\HOSTS文件
127.0.0.1 localhost127.0.0.1 peer1127.0.0.1 peer2127.0.0.1 peer3 復(fù)制代碼
3個(gè)同時(shí)啟動(dòng),分別訪問(wèn) localhost:8001, localhost:8002, localhost:8003得到的結(jié)果如下:
代碼如下:
server: port: 8762spring: #配置程序名為eureka-client application: name: eureka-clienteureka: client: #服務(wù)注冊(cè)地址 serviceUrl: #注意: Eureka Server 的注冊(cè)地址 #將服務(wù)提供者注冊(cè)到三個(gè)Eureka Server中去 defaultZone: http://peer1:8001/eureka/,http://peer2:8002/eureka/,http://peer3:8003/eureka/ #http://localhost:8761/eureka/ 復(fù)制代碼
啟動(dòng) eureka-client 項(xiàng)目,結(jié)果如下:
原文鏈接:https://juejin.im/post/5dfcbc1e6fb9a016230acf8d
關(guān)注我了解更多程序員資訊技術(shù),領(lǐng)取豐富架構(gòu)資料
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。