1. 程式人生 > >Eureka單機高可用偽叢集配置

Eureka單機高可用偽叢集配置

Eureka Server高可用叢集
理論上來講,因為服務消費者本地快取了服務提供者的地址,即使Eureka Server宕機,也不會影響服務之間的呼叫,但是一旦新服務上線,已經快取在本地的服務提供者不可用了,服務消費者也無法知道,所以保證Eureka Server的高可用還是很有必要的。

在分散式系統中,任何的地方存在單點,整個體系就不是高可用的,Eureka 也一樣,Eureka Server不是以單點存在的,而是以叢集的方式對外提供服務。


模擬在一臺機器上搭建Eureka叢集,配置peer1、peer2、peer3三個節點組成Eureka的叢集。

1、配置域名解析
Hosts檔案開啟方法:開啟windows命令視窗,輸入“drivers”,選擇“etc”資料夾,選擇“hosts”檔案新增peer配置。


2、新建 Eureka 服務端叢集專案
a、pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.mimaxueyuan</groupId>
        <artifactId>mima-cloud-parent</artifactId>
        <version>0.0
.1-SNAPSHOT</version> </parent> <artifactId>mima-cloud-eureka-ha</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- <dependency> --> <!-- <groupId>org.springframework.boot</groupId> --> <!-- <artifactId>spring-boot-starter-security</artifactId> --> <!-- </dependency> --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies> </project>
View Code

b、application.yml

 

spring:
  application:
    name: mima-cloud-eureka-ha
  profiles:
    active: peer1
---
server:
  port: 8762
spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${server.port}
  client:
    serviceUrl:
      defaultZone: http://peer2:8763/eureka/,http://peer3:8764/eureka/
---
server:
  port: 8763
spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${server.port}
  client:
    serviceUrl:
      defaultZone: http://peer1:8762/eureka/,http://peer3:8764/eureka/
---
server:
  port: 8764
spring:
  profiles: peer3
eureka:
  instance:
    hostname: peer3
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${server.port}
  client:
    serviceUrl:
      defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka

 

配置檔案是通過三個Eureka Server互相註冊,這裡有四段配置,第一段配置為公共配置,配置了應用名稱,第二段為名peer1的配置,第三段為peer2的配置,第三段為peer3的配置。在專案啟動可以通過
--spring.profiles.active={配置名稱} 來啟動不同的配置。

c、Eureka服務端啟動類

package com.mimaxueyuan.cloud.eureka;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

//eureka高可用
@SpringBootApplication
@EnableEurekaServer
public class EurekaHAApplication {
    
    public static void main(String[] args) {
        new SpringApplicationBuilder(EurekaHAApplication.class).web(true).run(args);
    }
    
}

3、eureka客戶端修改eureka服務端的地址

eureka:
  instance:
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${server.port}
  client: 
    serviceUrl: 
      defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/,http://peer3:8764/eureka/
      #defaultZone: http://127.0.0.1:8762/eureka/,http://127.0.0.1:8763/eureka/,http://127.0.0.1:8764/eureka/

 

4、啟動eurekaClient客戶端

5、啟動eurekaServer服務端
因使用eureka叢集,啟動的時候需要指定配置檔案:

啟動peer1節點命令:
java -jar D:\jar\eurekaServer\eurekaServerHigh.jar--spring.profiles.active=peer1

啟動peer2節點命令:
java -jar D:\jar\eurekaServer\eurekaServerHigh.jar--spring.profiles.active=peer2

啟動peer3節點命令:
java -jar D:\jar\eurekaServer\eurekaServerHigh.jar--spring.profiles.active=peer3

從上面可以看到,eurekaClient客戶端MIMA-CLOUD-PRODUCER已註冊到Eureka叢集中。

非Java服務註冊到Eureak Server
作為服務註冊中心,應該是語言無關的,使用其他語言的服務也可以通過呼叫Eureka Server的Rest API 註冊服務,這裡不詳細展開。