Spring Cloud Eureka高可用

Spring Cloud Eureka高可用

高可用客户端(HA client)

多用于生产环境,客户端应用关联或配置注册中心服务器集群,避免注册中心单点故障

常用配置手段

  • 多注册中心主机
  • 注册中心DNS
  • 广播

Spring Cloud Eureka Client

如果Eureka客户端应用配置多个Eureka注册服务器,那么默认情况只有第一台可用的服务器,存在注册信息。如果第一台可用的Eureka服务器Down掉了,那么Eureka客户端应用将会选择下一台可用的Eureka服务器

  • 配置属性

eureka.client.serviceUrl.defaultZone=http://${eureka.server1.host}:{rureka.server1.port}/eureka,/${eureka.server2.host}:{rureka.server2.port}/eureka

Eureka客户端

配置多个Eureka注册中心

我的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.1.3.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.example</groupId>
   <artifactId>spring-cloud-lesson-5-eureka-client</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>spring-cloud-lesson-5-eureka-client</name>
   <description>Demo project for Spring Boot</description>

   <properties>
      <java.version>1.8</java.version>
      <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
   </properties>

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

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
   </dependencies>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>

</project>

1.先使用注解激活,在启动类中!!!
@EnableDiscoveryClient或者@EnableEurekaClient
2.配置application.properties

##应用名称
spring.application.name=spring-cloud-eureka-client
##客户端端口
server.port=0
##配置链接Eureka服务器
##配置多个Eureka注册中心,以“,”分割
eureka.client.serviceUrl.defaultZone=\
  http://localhost:9090/eureka,\
  http://localhost:9001/eureka

Eureka服务器端

我的pom文件如下

<?xml version="1.0" encoding="UTF-8"?>
<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>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.1.3.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.example</groupId>
   <artifactId>spring-cloud-lesson-5-eureka-server</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>spring-cloud-lesson-5-eureka-server</name>
   <description>Demo project for Spring Boot</description>

   <properties>
      <java.version>1.8</java.version>
      <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-actuator</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <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>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>

</project>

1.先使用注解激活服务端,在启动类中!!!
@EnableEurekaServer
2.修改application.properties配置文件


##定义应用名称
spring.application.name=spring-cloud-eureka-server
##配置端口
##通过启动参数覆盖9090端口
server.port=9090
##取消向注册中心注册
eureka.client.register-with-eureka=false
##取消向注册中心获取注册信息,实例信息
eureka.client.fetch-registry=false
##解决Peer/集群连接问题
eureka.instance.hostname=localhost
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

Spring Cloud Eureka高可用

修改后可以启动第二个9001服务器

Spring Cloud Eureka Client

应用元信息

  • 获取间隔
    配置项:eureka.client.registryFetchIntervalSeconds
  • 同步间隔
    配置项:eureka.client.instanceInfoReplicationIntervalSeconds

在客户端配置处进行修改配置

##应用名称
spring.application.name=spring-cloud-eureka-client
##客户端端口
server.port=0
##配置链接Eureka服务器
##配置多个Eureka注册中心,以“,”分割
eureka.client.serviceUrl.defaultZone=\
  http://localhost:9090/eureka,\
  http://localhost:9001/eureka
##调整获取所有应用元信息间隔时间
eureka.client.registry-fetch-interval-seconds=5
##调整应用元信息间隔时间
eureka.client.instance-info-replication-interval-seconds=5

然后关闭服务器进行测试是否5秒钟后报连接错误

主要如果不修改配置的话,默认时间为30s


间隔越小,一致性就越强

高可用注册中心(HA Registry Center)

高可用注册中心不但需要提供集群环境,解决单点故障的问题。同时,也许优雅地处理注册中心之间信息同步的问题

  • 配置属性
    eureka.server.host1:eureka.client.serviceUrl.defaultZone=http://${eureka.server2.host}:${eureka.server2.port}/eureka

eureka.server.host2:eureka.client.serviceUrl.defaultZone=http://${eureka.server1.host}:${eureka.server1.port}/eureka

上一篇:Spring Cloud负载均衡


下一篇:adb 安装教程