1. 程式人生 > >SpringCloud元件:Eureka高可用叢集部署

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叢集 ,測試步驟如下:

  1. clean && package 本專案(diea工具自帶maven常用操作命令快捷方式,右側導航欄 Maven Projects -> Lifecycle )
  2. 開啟終端 cd 專案 target 目錄
  3. 通過如下命令啟動 node1 環境:
java -jar hengboy-spring-cloud-eureka-high-0.0.1-SNAPSHOT.jar --spring.profiles.active=node1
  1. 再開啟一個終端,同樣是 cd 專案的 target 目錄下,通過如下命令啟動 node2 環境:
java -jar hengboy-spring-cloud-eureka-high-0.0.1-SNAPSHOT.jar --spring.profiles.active=node2
  1. 訪問 http://node1:10001 檢視 node1 環境的 Eureka 管理中心
  2. 訪問 http://node2:10002 檢視 node2 環境的 Eureka 管理中心

效果如下圖所示:

叢集相互註冊效果

歡迎工作一到五年的Java工程師朋友們加入Java架構開發: 855835163
群內提供免費的Java架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!