SpringCloud組件:Eureka高可用集羣部署

高可用集羣部署 Eureka 服務註冊中心。java

構建項目

使用 idea 開發工具建立一個 SpringBoot 項目,添加 Eureka Server 依賴便可, pom.xml 配置文件以下所示:node

......
<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 依賴便可。spring

啓用Eureka Server

在入口類 XxxApplication 上添加 @EnableEurekaServer 註解來啓用 Eureka Server 服務以及實例化一些依賴,修改以下所示:sql

@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekaHighApplication {
    //....
}

Eureka服務配置

依賴已經添加完成,接下來咱們就須要在 application.yml 內編寫相關配置信息,由於測試環境都在咱們本機,有兩種方式能夠模擬測試同時運行:windows

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 的配置文件,內容以下所示:app

# 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 主機名的配置方式,而後再說下爲何實現了集羣的效果?maven

主機名設置

  • 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等多個知識點的架構資料)合理利用本身每一分每一秒的時間來學習提高本身,不要再用"沒有時間「來掩飾本身思想上的懶惰!趁年輕,使勁拼,給將來的本身一個交代!

相關文章
相關標籤/搜索