Netflix Eureka server 集群配置(一)

为了使 Eureka Server 实现高可用,我们需要为它配置集群。这样当有一台 Eureka Server 有故障时,集群中的其他 Eureka server 可以进行代替。Eureka server 集群之中的节点通过 P2P 通信的方式共享注册表,以使得每个 Eureka Server 的注册表保持一致。

本章节将在本地运行三台 Eureka Server、以及一台 Eureka client 以测试集群的搭建。项目结构如下图:

上图中:

  • eureka_demo4_server1 服务端模块运行在 8077 端口上

  • eureka_demo4_server2 服务端模块运行在 8078 端口上

  • eureka_demo4_server3 服务端模块运行在 8079 端口上

  • eureka_demo4_client 客户端模块运行在 7001 端口上

下面将分别给出每个模块的代码和配置信息。

集群配置

准备工作

配置 host,配置如下:

127.0.0.1       peer1
127.0.0.1       peer2
127.0.0.1       peer3

eureka_demo4_server1 注册中心(Eureka server)

(1)application.properties 配置文件内容如下:

# 服务端口
server.port=8077
# 服务名称
spring.application.name=server
# 服务地址
eureka.instance.hostname=peer1
# 向注册中心注册自己
eureka.client.register-with-eureka=true
# 取消检索服务
eureka.client.fetch-registry=true
# 开启注册中心的保护机制,默认是开启
eureka.server.enable-self-preservation=true
# 设置保护机制的阈值,默认是0.85。
eureka.server.renewal-percent-threshold=0.5
# 注册中心路径,如果有多个eureka server
# 在这里需要配置其他 eureka server 的地址,用","进行区分
# 如 "http://address:8888/eureka,http://address:8887/eureka"
# defaultZone 改为 default-zone
eureka.client.service-url.defaultZone=http://peer2:8078/eureka/,http://peer3:8079/eureka/

(2)启动类代码如下:

package com.hxstrive.springcloud.eureka.server;

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

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer1Application {

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

}

eureka_demo4_server2 注册中心(Eureka server)

(1)application.properties 配置文件内容如下:

# 服务端口
server.port=8078
# 服务名称
spring.application.name=server
# 服务地址
eureka.instance.hostname=peer2
# 向注册中心注册自己
eureka.client.register-with-eureka=true
# 取消检索服务
eureka.client.fetch-registry=true
# 开启注册中心的保护机制,默认是开启
eureka.server.enable-self-preservation=true
# 设置保护机制的阈值,默认是0.85。
eureka.server.renewal-percent-threshold=0.5
# 注册中心路径,如果有多个eureka server
# 在这里需要配置其他 eureka server 的地址,用","进行区分
# 如 "http://address:8888/eureka,http://address:8887/eureka"
eureka.client.service-url.defaultZone=http://peer1:8077/eureka/,http://peer3:8079/eureka/

(2)启动类代码如下:

package com.hxstrive.springcloud.eureka.server;

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

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer2Application {

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

}

eureka_demo4_server3 注册中心(Eureka server)

(1)application.properties 配置文件内容如下:

# 服务端口
server.port=8079
# 服务名称
spring.application.name=server
# 服务地址
eureka.instance.hostname=peer3
# 向注册中心注册自己
eureka.client.register-with-eureka=true
# 取消检索服务
eureka.client.fetch-registry=true
# 开启注册中心的保护机制,默认是开启
eureka.server.enable-self-preservation=true
# 设置保护机制的阈值,默认是0.85。
eureka.server.renewal-percent-threshold=0.5
# 注册中心路径,如果有多个eureka server
# 在这里需要配置其他 eureka server 的地址,用","进行区分
# 如 "http://address:8888/eureka,http://address:8887/eureka"
eureka.client.service-url.defaultZone=http://peer1:8077/eureka/,http://peer2:8078/eureka/

(2)启动类代码如下:

package com.hxstrive.springcloud.eureka.server;

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

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer3Application {

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

}

eureka_demo4_client 客户端(Eureka client)

(1)application.properties 配置文件内容如下:

# 服务端口
server.port=7001
# 服务名称
spring.application.name=client1
# 服务地址
eureka.instance.hostname=localhost
# 注册中心路径,表示我们向这个注册中心注册服务,如果向多个注册中心注册,用“,”进行分隔
eureka.client.serviceUrl.defaultZone=http://localhost:8077/eureka
# 心跳间隔5s,默认30s。每一个服务配置后,心跳间隔和心跳超时时间会被保存在server端,不同服务的心跳频率可能不同,server端会根据保存的配置来分别探活
eureka.instance.lease-renewal-interval-in-seconds=5
# 心跳超时时间10s,默认90s。从client端最后一次发出心跳后,达到这个时间没有再次发出心跳,表示服务不可用,将它的实例从注册中心移除
eureka.instance.lease-expiration-duration-in-seconds=10

(2)启动类代码如下:

package com.hxstrive.springcloud.eureka.client;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;

@RestController
@SpringBootApplication
@EnableEurekaClient
public class EurekaClient1Application {

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

    @GetMapping({"/", "/index.html"})
    public String index() {
        return "Current Timestamp " + new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
    }

}

运行集群

到这里我们就完成了 Eureka server 集群的配置,接下来分别运行 EurekaServer1Application、EurekaServer2Application、EurekaServer3Application 和 EurekaClient1Application 类。上面4个类都运行成功后,可以浏览器查看每个 Eureka server 服务器的状态,分别如下:

(1)EurekaServer1Application 类监听 8077 端口,状态如下图:

(2)EurekaServer2Application 类监听 8078 端口,状态如下图:

(3)EurekaServer3Application 类监听 8079 端口,状态如下图:

上图中,“System Status” 显示 Eureka server 系统当前状态信息;“DS Replicas” 可以理解为 Eureka server 的副本节点列表,当前 Eureka server 将从这些节点同步注册数据。而且,“DS Replicas” 列表数据对应 eureka.client.service-url.defaultZone 配置项。例如:在 eureka_demo4_server1 模块中存在如下配置:

eureka.client.service-url.defaultZone=http://peer2:8078/eureka/,http://peer3:8079/eureka/

查看它的 “DS Replicas” 你会发现存在 peer2、peer3 两个节点,如果你配置的 eureka.client.service-url.defaultZone 有问题,则 “DS Replicas” 是不会看见那些节点信息。如下图:

(4)EurekaClient1Application 类监听 7001 端口。它在配置文件中,将服务注册到 eureka_demo4_server1 服务中心,配置如下:

eureka.client.serviceUrl.defaultZone=http://localhost:8077/eureka

在成功启动了 Eureka client 后(等待几十秒或几分钟),该服务被注册到了其他几个 Eureka server 注册中,这是因为 Eureka server 之间数据同步导致的。到这里,我们的 Eureka server 集群配置完成了,并且客户端也能正常注册。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号