在一個分布式系統(tǒng)中,服務注冊中心是最重要的基礎部分,如果是單點話,遇到故障就是毀滅性的,理應隨時處于可以提供服務的狀態(tài)。為了維持其可用性,使用集群是很好的解決方案。Eureka通過互相注冊的方式來實現(xiàn)高可用的部署,所以我們只需要將Eureke Server配置其他可用的serviceUrl就能實現(xiàn)高可用部署。 Eureka集群框架圖如下:
從網(wǎng)站建設到定制行業(yè)解決方案,為提供成都網(wǎng)站建設、成都做網(wǎng)站服務體系,各種行業(yè)企業(yè)客戶提供網(wǎng)站建設解決方案,助力業(yè)務快速發(fā)展。創(chuàng)新互聯(lián)公司將不斷加快創(chuàng)新步伐,提供優(yōu)質的建站服務。
上一篇 我們 搭建了一個單機版的Eureka Server ,在這個基礎上我們進行改造。
創(chuàng)建3個application.yml文件,分別為 applicatiom-peer1.yml ,applicatiom-peer2.yml ,applicatiom-peer3.yml
applicatiom-peer1.yml 的 配置內容如下:
#高可用的Eureka-Server 集群 peer1spring: application: name: Eureka-Server-peer #應用名稱,也是服務注冊的名稱server: port: 8001 #開啟端口eureka: instance: prefer-ip-address: true #提交ip信息 status-page-url-path: /actuator/info #信息查詢的url link health-check-url-path: /actuator/health #健康檢查的url hostname: peer1 #主機名 client: #在默認情況下,Eureka servce 會向自己注冊,這時需要設置registerWithEureka和fetchRegistry 為false,防止自己注冊自己 #在Eureka集群中,允許注冊中心自己作為服務向其他注冊中心注冊自己,這樣就可以形成一組相互注冊的注冊中心,他們互相同步服務清單,做到了我們要的高可用 #是否將自己注冊到Eureka Server 默認為true registerWithEureka: true #是否從Eureka Server查詢注冊信息 fetchRegistry: true #服務注冊地址 serviceUrl: #與Eureka Server交互的地址,查詢服務和服務注冊都需要依賴這個地址, #默認為http://localhost:8761/eureka, 多個地址用","分割 defaultZone: http://peer2:8002/eureka/,http://peer3:8003/eureka/ server: #enable-self-preservation: true #開啟自我保護模式 #eviction-interval-timer-in-ms: 4000 #清理服務間隔4s,默認60*10000 復制代碼
applicatiom-peer2.yml 的 配置內容如下:
#高可用的Eureka-Server 集群 peer2spring: application: name: Eureka-Server-peer #應用名稱,也是服務注冊的名稱server: port: 8002 #開啟端口eureka: instance: prefer-ip-address: true #提交ip信息 status-page-url-path: /actuator/info #信息查詢的url link health-check-url-path: /actuator/health #健康檢查的url hostname: peer2 #主機名 client: #在默認情況下,Eureka servce 會向自己注冊,這時需要設置registerWithEureka和fetchRegistry 為false,防止自己注冊自己 #在Eureka集群中,允許注冊中心自己作為服務向其他注冊中心注冊自己,這樣就可以形成一組相互注冊的注冊中心,他們互相同步服務清單,做到了我們要的高可用 #是否將自己注冊到Eureka Server 默認為true registerWithEureka: true #是否從Eureka Server查詢注冊信息 fetchRegistry: true #服務注冊地址 serviceUrl: #與Eureka Server交互的地址,查詢服務和服務注冊都需要依賴這個地址, #默認為http://localhost:8761/eureka, 多個地址用","分割 defaultZone: http://peer1:8001/eureka/,http://peer3:8003/eureka/ server: #enable-self-preservation: true #開啟自我保護模式 #eviction-interval-timer-in-ms: 4000 #清理服務間隔4s,默認60*10000 復制代碼
applicatiom-peer3.yml 的 配置內容如下:
#高可用的Eureka-Server 集群 peer2spring: application: name: Eureka-Server-peer #應用名稱,也是服務注冊的名稱server: port: 8003 #開啟端口eureka: instance: prefer-ip-address: true #提交ip信息 status-page-url-path: /actuator/info #信息查詢的url link health-check-url-path: /actuator/health #健康檢查的url hostname: peer3 #主機名 client: #在默認情況下,Eureka servce 會向自己注冊,這時需要設置registerWithEureka和fetchRegistry 為false,防止自己注冊自己 #在Eureka集群中,允許注冊中心自己作為服務向其他注冊中心注冊自己,這樣就可以形成一組相互注冊的注冊中心,他們互相同步服務清單,做到了我們要的高可用 #是否將自己注冊到Eureka Server 默認為true registerWithEureka: true #是否從Eureka Server查詢注冊信息 fetchRegistry: true #服務注冊地址 serviceUrl: #與Eureka Server交互的地址,查詢服務和服務注冊都需要依賴這個地址, #默認為http://localhost:8761/eureka, 多個地址用","分割 #defaultZone: http://peer1:8001/eureka/,http://peer2:8002/eureka/ server: #enable-self-preservation: true #開啟自我保護模式 eviction-interval-timer-in-ms: 4000 #清理服務間隔4s,默認60*10000 復制代碼
其中:設置 enable-self-preservation: true #開啟自我保護模式在默認配置中,Eureka Server在默認90s沒有得到客戶端的心跳,則注銷該實例,但是往往因為微服務跨進程調用,網(wǎng)絡通信往往會面臨著各種問題,比如微服務狀態(tài)正常,但是因為網(wǎng)絡分區(qū)故障時,Eureka Server注銷服務實例則會讓大部分微服務不可用,這很危險,因為服務明明沒有問題。為了解決這個問題,Eureka 有自我保護機制,通過在Eureka Server配置如下參數(shù),可啟動保護機制。
enable-self-preservation: true
它的原理是,當Eureka Server節(jié)點在短時間內丟失過多的客戶端時(可能發(fā)送了網(wǎng)絡故障),那么這個節(jié)點將進入自我保護模式,不再注銷任何微服務,當網(wǎng)絡故障回復后,該節(jié)點會自動退出自我保護模式。
(在開發(fā)中 可以不設置,方便開發(fā))
#高可用的Eureka-Server 集群spring: profiles: active: peer1 復制代碼
修改C:\Windows\System32\drivers\etc\HOSTS文件
127.0.0.1 localhost127.0.0.1 peer1127.0.0.1 peer2127.0.0.1 peer3 復制代碼
3個同時啟動,分別訪問 localhost:8001, localhost:8002, localhost:8003得到的結果如下:
代碼如下:
server: port: 8762spring: #配置程序名為eureka-client application: name: eureka-clienteureka: client: #服務注冊地址 serviceUrl: #注意: Eureka Server 的注冊地址 #將服務提供者注冊到三個Eureka Server中去 defaultZone: http://peer1:8001/eureka/,http://peer2:8002/eureka/,http://peer3:8003/eureka/ #http://localhost:8761/eureka/ 復制代碼
啟動 eureka-client 項目,結果如下:
原文鏈接:https://juejin.im/post/5dfcbc1e6fb9a016230acf8d
關注我了解更多程序員資訊技術,領取豐富架構資料