溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SpringCloud 高可用的 Eureka Server 集群

發(fā)布時(shí)間:2020-08-09 11:45:32 來(lái)源:ITPUB博客 閱讀:224 作者:a1322674015 欄目:編程語(yǔ)言

一:為什么要搭建Eureka Server 集群

在一個(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集群框架圖如下: 

SpringCloud 高可用的 Eureka Server 集群

二:搭建Eureka Server

上一篇 我們 搭建了一個(gè)單機(jī)版的Eureka Server ,在這個(gè)基礎(chǔ)上我們進(jìn)行改造。

2.1 首先更改eureka-server 的配置文件 application.yml,我采用的是多profile的格式。

創(chuàng)建3個(gè)application.yml文件,分別為 applicatiom-peer1.yml ,applicatiom-peer2.yml ,applicatiom-peer3.yml

SpringCloud 高可用的 Eureka Server 集群

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ā)) 

2.2 修改 application.yml 的內(nèi)容:

#高可用的Eureka-Server 集群spring:  profiles:    active: peer1 復(fù)制代碼

2.3 因?yàn)槲覀兪窃趙indows 上 搭建的,只要一臺(tái)機(jī)器,要構(gòu)建集群,需要修改HOSTS文件,添加主機(jī)名映射。

修改C:\Windows\System32\drivers\etc\HOSTS文件

127.0.0.1 localhost127.0.0.1 peer1127.0.0.1 peer2127.0.0.1 peer3 復(fù)制代碼

2.4 在idea中設(shè)置3個(gè)啟動(dòng)方式,并分別設(shè)置啟動(dòng)時(shí)應(yīng)用的配置文件名,springboot中約定 配置文件以application-{profiles}.xxx的方式命名

SpringCloud 高可用的 Eureka Server 集群
SpringCloud 高可用的 Eureka Server 集群

3個(gè)同時(shí)啟動(dòng),分別訪問(wèn) localhost:8001, localhost:8002, localhost:8003得到的結(jié)果如下:

SpringCloud 高可用的 Eureka Server 集群
SpringCloud 高可用的 Eureka Server 集群
SpringCloud 高可用的 Eureka Server 集群

三:修改eureka-client 客戶端項(xiàng)目 的配置文件

代碼如下:

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é)果如下:

SpringCloud 高可用的 Eureka Server 集群
SpringCloud 高可用的 Eureka Server 集群
SpringCloud 高可用的 Eureka Server 集群

原文鏈接:https://juejin.im/post/5dfcbc1e6fb9a016230acf8d

關(guān)注我了解更多程序員資訊技術(shù),領(lǐng)取豐富架構(gòu)資料

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI