Spring Cloud -- Eureka 高可用集羣

Spring Cloud-Eureka High-Availability Cluster

環境信息:
OS:Win10
JDK:Java8
SpringCloud:Greenwich.SR2

1 Eureka Server

1.1 核心依賴


        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

1.2 開啓註解


@SpringBootApplication
@EnableEurekaServer
public class CloudEurekaApplication {

	public static void main(String[] args) {
		SpringApplication.run(CloudEurekaApplication.class, args);
	}

}

1.3 主要配置

新建三個配置文件,對應三個Eureka節點:

application-node1.yml
application-node2.yml
application-node3.yml

三個配置文件配置內容一樣,不同的是:

  1. 端口:server.port
    分別修改爲三個不同的端口:18761 18762 18763
  2. 名字:spring.application.name
    分別修改爲三個不同的name:node1 node2 node3
  3. 名字:eureka.instance.hostname
    分別修改爲三個不同的域名:node1 node2 node3
  4. 註冊地址:eureka.client.serviceUrl.defaultZone
    每個節點的註冊地址要爲其他節點的地址,如node1要配置成node2和node3的地址,已達到相互註冊的目的;
eureka:
  client:
    serviceUrl:
      defaultZone: http://node2:18762/eureka/,http://node3:18763/eureka/

node1節點服務端完整配置如下,其他節點按照上邊的規則進行修改:

server:
  port: 18761

spring:
  application:
    name: cloud-eureka-node1

eureka:
  instance:
    hostname: node1
    #不使用主機名來定義註冊中心的地址, 而使用IP地址的形式,
    #如果設置了ipAddress 屬性, 則使用該屬性配置的IP, 否則自動獲取除環路IP外的第一個IP地址
    preferIpAddress: true  #自動將IP註冊到Eureka Server上, 如果不配置就是機器的主機名
    #ipAddress: 192.168.1.128 # IP地址
    #將Instance ID設置成IP:端口的形式
    instance-id: ${spring.application.name}:${server.port}
    #注意:更改Eureka更新頻率將打破服務器的自我保護功能, 生產環境下不建議自定義這些配置。
    lease-expiration-duration-in-seconds: 30 #續約到期時間(默認90秒)
    lease-renewal-interval-in-seconds: 10    #續約更新時間間隔(默認30秒)
    #prefer-ip-address: true
  client:
    #向註冊中心註冊本服務實例
    register-with-eureka: true
    #檢索並維護註冊中心服務實例
    fetch-registry: false
    serviceUrl:
      defaultZone: http://node2:18762/eureka/,http://node3:18763/eureka/
  server:
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 5000
    waitTimeInMsWhenSyncEmpty: 0

在這裏插入圖片描述

1.4 Windows配置

修改host文件,在C:\Windows\System32\drivers\etc

#Eureka DS
127.0.0.1 node1
127.0.0.1 node2
127.0.0.1 node3

1.5 打包啓動

在項目下運行mvn package,生成工程jar包;
然後開啓三個終端,分別啓動三個節點:

java -jar cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=node1
java -jar cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=node2
java -jar cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=node3

前兩個節點會有報錯,是因爲有節點連接超時,都啓起來就好了;
在這裏插入圖片描述

1.6 Eureka服務端控制檯

分別打開:

http://node1:18761
http://node2:18762
http://node3:18763

可以看到他們相互進行了註冊,DS Replicas能夠看到其他節點:

在這裏插入圖片描述

在這裏插入圖片描述

服務端代碼:https://github.com/WeisonWei/school-service-cloud/tree/master/cloud-eureka

2 Eureka Client

2.1 核心依賴


    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

2.2 開啓註解


@SpringBootApplication
@EnableEurekaClient
public class StudentServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(StudentServiceApplication.class, args);
    }
}

2.3 主要配置

跟單節點不同的是註冊地址eureka.client.serviceUrl.defaultZone,配置多個,其他沒有變化:

server:
  port: 8080

spring:
  application:
    name: student-service

management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always
    shutdown:
      enabled: true

eureka:
  client:
    registry-fetch-interval-seconds: 5
    healthcheck:
      enabled: true
    serviceUrl:
      defaultZone: http://node1:18761/eureka,http://node2:18762/eureka,http://node3:18763/eureka

2.4 啓動服務

以不同端口啓動多個服務:

2.5 查看控制檯服務註冊情況

http://node1:18761
http://node2:18762
http://node3:18763

在這裏插入圖片描述

客戶端代碼:https://github.com/WeisonWei/school-service/tree/master/student-service



參考資料:
[ 1 ].Spring Cloud 微服務實戰 翟永超 電子工業出版社

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