SpringCloud元件:Eureka高可用叢集部署
高可用叢集部署 Eureka
服務註冊中心。
構建專案
使用 idea
開發工具建立一個 SpringBoot
專案,新增 Eureka Server
依賴即可, pom.xml
配置檔案如下所示:
...... <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.SR1</spring-cloud.version> </properties> <dependencies> <!--Eureka Server--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> ......
我們本章主要是完成 Eureka Server
的叢集配置,所以只需要新增 spring-cloud-starter-netflix-eureka-server
依賴即可。
啟用Eureka Server
在入口類 XxxApplication
上新增 @EnableEurekaServer
註解來啟用 Eureka Server
服務以及例項化一些依賴,修改如下所示:
@SpringBootApplication @EnableEurekaServer public class SpringCloudEurekaHighApplication { //.... }
Eureka服務配置
依賴已經新增完成,接下來我們就需要在 application.yml
內編寫相關配置資訊,因為測試環境都在我們本機,有兩種方式可以模擬測試同時執行:
spring.profiles.active
為了方便演示,我們使用的第二種方式,主要是感覺再去建立一個專案沒有必要,那我們的 profiles
環境該怎麼配置呢?請繼續往下看。
Profile多環境配置
我們在 src/main/resources
目錄下建立名為 application-node1.yml
的配置檔案,在該配置檔案內新增如下配置:
# Eureka 客戶端配置 eureka: client: service-url: defaultZone: http://node2:10002/eureka/ instance: # 配置通過主機名方式註冊 hostname: node1 # 配置例項編號 instance-id: ${eureka.instance.hostname}:${server.port}:@project.version@ # 叢集節點之間讀取超時時間。單位:毫秒 server: peer-node-read-timeout-ms: 1000 # 服務埠號 server: port: 10001
繼續在 src/main/resources
下建立一個名為 application-node2.yml
的配置檔案,內容如下所示:
# Eureka 客戶端配置 eureka: client: service-url: defaultZone: http://node1:10001/eureka/ instance: # 配置通過主機名方式註冊 hostname: node2 # 配置例項編號 instance-id: ${eureka.instance.hostname}:${server.port}:@project.version@ # 叢集節點之間讀取超時時間。單位:毫秒 server: peer-node-read-timeout-ms: 1000 server: port: 10002
下面我們先來說下 node1
、 node2
主機名的配置方式,然後再說下為什麼實現了叢集的效果?
主機名設定
-
Mac
或者Linux
配置方式如果你使用的是
osx
系統。可以找到/etc/hosts
檔案並新增如下內容:
127.0.0.1 node1 127.0.0.1 node2
一般情況下配置完成後就會生效,如果你的配置並沒有生效,你可以嘗試重啟。
-
Windows
配置方式如果你使用的是
windows
系統,你可以修改C:\Windows\System32\drivers\etc\hosts
檔案,新增內容與Mac
方式一致。
Eureka Sever相互註冊
application-node1.yml
eureka.client.service-url.defaultZone
這個配置引數的值,配置的是 http://node2:10002/eureka/
,那這裡的 node2
是什麼呢?其實一看應該可以明白,這是們在 hosts
檔案內配置的 hostname
,而 埠號
我們配置的則是 10002
,根據 hostname
以及 port
我們可以看出,環境 node1
註冊到了 node2
上。
application-node2.yml
在 node2
環境內配置 eureka.client.service-url.defaultZone
是指向的 http://node1:10001/eureka/
,同樣 node2
註冊到了 node1
上。
通過這種相互註冊的方式牢靠的把兩個 服務註冊中心
繫結在了一塊。
執行測試
我們先來執行測試下 Eureka Server
的叢集是否可行?下一章節我們再來講解 把服務提供者註冊到Eureka叢集
,測試步驟如下:
- clean && package 本專案(diea工具自帶maven常用操作命令快捷方式,右側導航欄
Maven Projects -> Lifecycle
) - 開啟終端
cd
專案target
目錄 - 通過如下命令啟動
node1
環境:
java -jar hengboy-spring-cloud-eureka-high-0.0.1-SNAPSHOT.jar --spring.profiles.active=node1
- 再開啟一個終端,同樣是
cd
專案的target
目錄下,通過如下命令啟動node2
環境:
java -jar hengboy-spring-cloud-eureka-high-0.0.1-SNAPSHOT.jar --spring.profiles.active=node2
- 訪問
http://node1:10001
檢視node1
環境的Eureka
管理中心 - 訪問
http://node2:10002
檢視node2
環境的Eureka
管理中心
效果如下圖所示:
叢集相互註冊效果
歡迎工作一到五年的Java工程師朋友們加入Java架構開發: 855835163
群內提供免費的Java架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!