SpringCloud組件: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 內編寫相關配置信息,因為測試環境都在我們本機,有兩種方式可以模擬測試同時運行:
為了方便演示,我們使用的第二種方式,主要是感覺再去創建一個項目沒有必要,那我們的 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 管理中心
效果如下圖所示:
集群相互註冊效果
SpringCloud組件:Eureka高可用集群部署