SpringCloud技术整理(三)高可用Eureka Server集群

SpringCloud技术整理(三)高可用Eureka Server集群

项目地址:

http://gitlab.zack.net.cn/root/springcloudexample

##########################################################

Eureka server集群

  • 在项目下再创建一个Example_Eureka2模块, 和Example_Eureka1一起做为eureka server集群使用.

image.png

  • 编辑Example_Eureka2模块的pom文件
    <packaging>jar</packaging>

    <dependencies>
        <!--引入eureka server依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
  • 编辑Example_Eureka2模块的启动类
package cn.zack;

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

/**
 * @author zack
 * 开启eureka server
 */
@SpringBootApplication
@EnableEurekaServer
public class Example_Eureka2_Application {
    public static void main(String[] args) {
        SpringApplication.run(Example_Eureka2_Application.class, args);
    }
}
  • 编辑Example_Eureka2模块的配置文件, 同时让两个eureka server互相注册
server:
  port: 8762

spring:
  application:
    name: eureka-server
eureka:
  instance:
    # 当前实例的主机名
    hostname: eureka2
  server:
    # 关闭注册中心的自我保护机制
    enable-self-preservation: false
    # 服务续约时间(扫描失效服务的时间间隔)
    eviction-interval-timer-in-ms: 5000

  client:
    # 是否将自身注册到eureka server(默认为true)
    register-with-eureka: true
    # 是否从eureka server获取注册信息(默认为true),单机版eureka不需要同步其他eureka server的信息
    fetch-registry: true
    # eureka server交互地址,查询和注册服务都需要依赖这个地址,多个地址间使用,分割
    service-url:
      # 将eureka2注册到eureka1上
      defaultZone: http://localhost:8761/eureka/

同时, 修改Example_Eureka1模块的配置文件, 让eureka server1不再注册到自身, 而是注册到eureka server2

eureka:
  instance:
    # 当前实例的主机名
    hostname: eureka1
  server:
    # 关闭注册中心的自我保护机制
    enable-self-preservation: false
    # 服务续约时间(扫描失效服务的时间间隔,毫秒值)
    eviction-interval-timer-in-ms: 5000

  client:
    # 是否将自身注册到eureka server(默认为true)
    register-with-eureka: true
    # 是否从eureka server获取注册信息(默认为true),单机版eureka不需要同步其他eureka server的信息
    fetch-registry: true
    # eureka server交互地址,查询和注册服务都需要依赖这个地址,多个地址间使用,分割
    service-url:
      # 将eureka1注册到eureka2上, 便于同步服务注册信息
      defaultZone: http://localhost:8762/eureka/
  • 将两个eureka server全部启动

无论是从localhost:8761或者localhost:8762都可以访问到eureka server的服务治理页.
由于两个eureka server的应用名一致, 所以归为一个微服务, 有两个存活节点.
image.png

  • 启动Microservice_Example1

由于两个eureka server互相注册的, eureka server集群会同步服务列表, 无论这个服务注册到哪个eureka, 最终两个eureka server的服务列表中都会出现.
image.png