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 管理中心
效果如下圖所示:
SpringCloud組件:Eureka高可用集羣部署

集羣相互註冊效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章