SpringCloud實踐(三) 高可用的Eureka註冊中心
註冊中心的高可用是以叢集的方式來解決註冊中心的單點問題,用下面的圖來表示高可用的架構:
下面通過例子,是看一下的微服務高可用實現:
一、實踐背景
1、基於上一節例子
2、通過配置和啟動多個節點,進行驗證
二、工程配置
1、Eureka 註冊中心
在上一節的註冊中心基礎上,我們通過配置的方式,來讓註冊中心支援高可用:
首先將原工程的application.properties 複製為 application-center1.properties和application-center2.properties兩個配置檔案,在配置檔案中,最重要的是修改配置,讓註冊中心可以想另外一個註冊中心註冊服務,起到關鍵作用的配置項是:
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
下面貼出center1和center2 的配置檔案,application-center1.properties配置如下
server.port=11111
spring.application.name=Eureka-Server
eureka.instance.hostname=center1
#true表示將自己註冊為一個服務,否則是啟動了一個註冊中心
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
#這裡寫的center1 的埠,為的是向其進行註冊自己
eureka.client.service-url.defaultZone=http://center2:11112/eureka/
#關閉自我保護,並設定剔除時間為30秒
#eureka.server.enable-self-preservation=false
#eureka.server.eviction-interval-timer-in-ms=15000
application-center2.properties的配置如下:server.port=11112
spring.application.name=Eureka-Server
eureka.instance.hostname=center2
#true表示將自己註冊為一個服務,否則是啟動了一個註冊中心
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
#這裡寫的center1 的埠,為的是向其進行註冊自己
eureka.client.service-url.defaultZone=http://center1:11111/eureka/
#關閉自我保護,並設定剔除時間為30秒
#eureka.server.enable-self-preservation=false
#eureka.server.eviction-interval-timer-in-ms=15000
在這兩個配置檔案裡面, eureka.instance.hostname對應分別是center1和center2,所以在系統host檔案中,我們配置上這兩個主機名,本例是本機配兩個主機名,實際場景下是多個ip配置主機名。C:\Windows\System32\drivers\etc\ 下有一個hosts檔案,在hosts檔案中,新增
127.0.0.1 center1
127.0.0.1 center2
注:Eureka也支援配置ip,需要進行一個引數eureka.instance.perferIpAddress=true
eureka.client.service-url.defaultZone引數需要注意一下,如果是center1,需要配置為 http://center2:11112/eureka/
意思是向center2 註冊自己,center2正好相反。
還有兩個引數設計關閉自我保護,暫時不管
兩個配置檔案有了,還需要控制啟動時呼叫的是哪個配置檔案,我們將application.properties修改一下:
spring.profiles.active=center2
只有一行,通過spring.profiles.active 來控制啟動的是哪個配置檔案。通過修改這個配置項,我們啟動起兩個註冊中心。由於啟動先後,第一個啟動的,會打一段異常日誌,不用擔心,因為它在向第二個註冊中心註冊,第二個註冊中心還沒啟動好,所以會報錯。啟動後通過http://localhost:11111/ 檢視
注意http://localhost:11111/ 看到DS Replicas 是 center2, 在11112 埠的url下,看到是center1,兩個節點時互為HA。這個時候,如果我們關掉 11112埠的程式,發現http://localhost:11111/ 並沒有變化,等過了一小段時間後,這個頁面重新整理一下:
出現紅色的警告,但是status 並沒有變化。這個是因為Eureka的自我保護預設開啟,會保持一段註冊資訊。將上面的兩個配置檔案中的註釋掉的配置放開,再次正常啟動後,關閉11112埠的程式:
註冊中心同樣啟動,但是會提示自我保護關閉
2、服務的配置
兩個註冊中心節點建立起來後,我們修改一下原來的兩個服務的配置檔案,這些服務分別向兩個註冊中心進行註冊服務
同樣,我們需要修改服務的配置檔案:
server.port=21111
eureka.instance.hostname=localhost
eureka.client.service-url.defaultZone=http://center1:11111/eureka/,http://center2:11112/eureka/
# 重點需要注意spring.application.name,這個是在以後服務與服務之間相互呼叫是根據這個name
spring.application.name=service-sayHello
#服務失效後的保持
eureka.instance.lease-renewal-interval-in-seconds=10
eureka.instance.lease-expiration-duration-in-seconds=30
eureka.client.service-url.defaultZone=http://center1:11111/eureka/,http://center2:11112/eureka/,這裡說明服務是向兩個註冊中心進行註冊。我們啟動兩個服務,port分別是 21111和 31111,啟動後,http://localhost:11111/如下:
3、消費者
同樣,修改一下消費者的配置檔案:
eureka.client.service-url.defaultZone=http://center1:11111/eureka/,http://center2:11112/eureka/,
啟動起來後,如下圖:
4、驗證高可用,關閉註冊中心2
消費者http://localhost:31311/hi 並沒有受到影響,註冊中心2的URL http://localhost:11112/已經打不開了,我們看一下http://localhost:11111/,還能顯示(注:這裡要等待一下段時間)
註冊中心(本身也是服務)在應用服務註冊列表中已經看不到了。11112註冊中心2關閉後,服務(註冊中心1)沒有辦法註冊,所以不在註冊列表中,但是服務SAYHELLO和消費服務,因為有向註冊中心1註冊,所以還可以看到和使用。在General Info中也可以看到http://center2:11112/eureka 是 unavaliable狀態。
通過雙節點或者更多節點來保障註冊中心和服務不會全部崩潰和失效,大大提高了服務的健壯性和可擴充套件性。
相關文章
- SpringCloud入門(三)Eureka 註冊中心SpringGCCloud
- springcloud(二):註冊中心EurekaSpringGCCloud
- SpringCloud學習系列之一 ----- 搭建一個高可用的註冊中心(Eureka)SpringGCCloud
- Spring Cloud 系列(二)Eureka 高可用註冊中心SpringCloud
- SpringCloud——Eureka-微服務的註冊中心SpringGCCloud微服務
- Spring Cloud Eureka 實現高可用服務發現註冊中心SpringCloud
- SpringCloud註冊中心高可用搭建SpringGCCloud
- Spring Cloud:使用Eureka叢集搭建高可用服務註冊中心SpringCloud
- Eureka註冊中心
- 跟我學SpringCloud | 第二篇:註冊中心EurekaSpringGCCloud
- 普通springcloud eureka 和 spring cloud Alibaba nacos 註冊中心SpringGCCloud
- [SpringCloud教程]3. Eureka服務註冊中心整合SpringGCCloud
- Springcloud-alibaba學習實踐(2)- nacos&Eureka Server服務註冊實踐SpringGCCloudServer
- 【SpringCloud】微服務Eureka高可用配置SpringGCCloud微服務
- Spring Cloud— 五、註冊中心EurekaSpringCloud
- SpringCloud整合Consul註冊中心SpringGCCloud
- SpringCloud服務的註冊與發現(Eureka)SpringGCCloud
- springcloud-註冊中心和配置中心SpringGCCloud
- 微服務(三) Eureka註冊中心和Ribbon負載均衡微服務負載
- 業餘草 SpringCloud教程 | 第十篇: 高可用的服務註冊中心(Finchley版本)SpringGCCloud
- (13) SpringCloud-使用Eureka叢集搭建實現高可用SpringGCCloud
- (15) SpringCloud-使用Eureka叢集搭建實現高可用SpringGCCloud
- 服務註冊中心之Eureka使用
- 註冊中心 Eureka 原始碼解析 —— 應用例項註冊發現(三)之下線原始碼
- SpringCloud-微服務的註冊與發現EurekaSpringGCCloud微服務
- SpringBoot3.1.5對應新版本SpringCloud開發(1)-Eureka註冊中心Spring BootGCCloud
- SpringCloud用zookeeper做註冊中心SpringGCCloud
- 小白的學習筆記——eureka註冊中心筆記
- SpringCloud(3)---Eureka服務註冊與發現SpringGCCloud
- Eureka服務註冊不可用問題
- 微服務註冊中心 Nacos 比 Eureka的優勢微服務
- SpringCloud分散式微服務雲架構 第十篇: 高可用的服務註冊中心(Finchley版本)SpringGCCloud分散式微服務架構
- SpringCloud核心教程 | 第三篇:服務註冊與發現 Eureka篇SpringGCCloud
- 註冊中心 Eureka 原始碼解析 —— 應用例項註冊發現(一)之註冊原始碼
- Fescar 釋出 0.3.0 版本, 支援 Eureka 註冊中心
- 微服務架構 | 3.1 Netflix Eureka 註冊中心微服務架構
- 微服務實戰系列(四)-註冊中心springcloud alibaba nacos微服務SpringGCCloud
- SpringCloud Alibaba實戰(7:nacos註冊中心管理微服務)SpringGCCloud微服務