Eureka Server 实现在线扩容

eureka,server,实现,在线,扩容 · 浏览次数 : 108

小编点评

**Eureka Server 实现在线扩容** **环境配置** * Java 版本:17 * Spring Boot 版本:2.7.5 * Spring Cloud 版本:2021.0.4 **启动多个 Eureka 实例** 1. 创建 `EurekaServer-peer1.yml` 和 `EurekaServer-peer2.yml` 配置文件,指定每个实例的 IP 地址、端口号、端口名称、注册地址和预连接时间。 2. 在 `EurekaServer` 父项目中启动以下应用程序: * `ConfigStartApp.java` * `ServerStartApp.java` * `ClientStartApp.java` 3. 修改 `EurekaServer-peer1.yml` 和 `EurekaServer-peer2.yml` 配置文件,分别将 `port` 设置为 8762 和 8763。 **使用 Eureka 管理 API 热更新配置** 1. 使用命令行或 Postman 工具发送 HTTP 请求将 `client` 模块实例的配置更新为与 `server-peer2` 和 `server-peer3` 实例相同的配置。 2. 在浏览器中访问 `http://localhost:8761/`,应该出现两个 Eureka 实例已在线扩充到三个。 **总结** 通过修改 `EurekaServer-peer1.yml` 和 `EurekaServer-peer2.yml` 配置文件,可以实现 Eureka Server 实现在线扩容。这允许您在多个服务器上运行相同的 Eureka Server 实例,以提供可扩展的服务注册中心功能。

正文

Eureka Server 实现在线扩容

作者:Grey

原文地址:

博客园:Eureka Server 实现在线扩容

CSDN:Eureka Server 实现在线扩容

需求

Eureka 是 Spring Cloud Netflix 套件中的服务注册中心组件,作为微服务的核心组件,需要支持在线扩容的需求。

本示例模拟 Eureka 从单实例在线扩容到三个实例的过程。

环境

Java 版本:17

Spring Boot 版本:2.7.5

Spring Cloud 版本:2021.0.4

项目结构和说明

  • eureka-scale-out-online:父项目名称
    • server : 服务端模块
      • src/
      • pom.xml
    • client : 客户端模块
      • src/
      • pom.xml
    • config : 配置中心模块,使用本地配置
      • src/
      • pom.xml
    • pom.xml:父项目 pom 配置

其中 config 项目存放了 server 和 client 的配置,基于 Spring Cloud Config ,方便起见,我们配置成 native,即本地配置模式,所以如果有配置修改,需要重启 config 项目,如果使用 Git 来托管配置,则无须重启。

完整代码见:Github

单个 Eureka 实例

将 config 项目中的 eureka-client.yml 修改为

server:
  port: 8081

spring:
  application:
    name: eureka-client1

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

将 config 项目中的 eureka-server-peer1.yml 修改为

server:
  port: 8761
spring:
  application:
    name: eureka-server
eureka:
  instance:
    hostname: localhost
    preferIpAddress: true
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  server:
    waitTimeInMsWhenSyncEmpty: 0
    enableSelfPreservation: false

依次启动 config 模块(运行 ConfigStartApp.java 这个类),server 模块(运行 ServerStartApp.java 这个类),client 模块(运行 ClientStartApp.java 这个类),

注:server 模块在启动过程中,需要指定 peer1 这个配置文件。

image

启动完毕后,可以通过浏览器访问:http://localhost:8761/

看到目前的服务注册情况

image

目前 Eureka Server 只有一个实例。

在线扩充到两个 Eureka 实例

保持上述运行环境,先不做任何重启动作,由于要增加一个实例,所以将 config 项目中的 eureka-server-peer2.yml 修改为

server:
  port: 8762

eureka:
  instance:
    hostname: localhost
    preferIpAddress: true
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  server:
      waitTimeInMsWhenSyncEmpty: 0
      enableSelfPreservation: false

同时,把 eureka-server-peer1.yml 内容调整为

server:
  port: 8761
spring:
  application:
    name: eureka-server
eureka:
  instance:
    hostname: localhost
    preferIpAddress: true
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:8762/eureka/
  server:
    waitTimeInMsWhenSyncEmpty: 0
    enableSelfPreservation: false

客户端需要感知到两个 Eureka Server 的存在,所以,也要修改 内容为

server:
  port: 8081
spring:
  application:
    name: eureka-client1
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/

配置修改完毕后,

首先,重启 config 模块(注:由于配置的是 native 模式,需要重启,如果用 Git 托管,则无须重启)

然后启动 server peer2 实例,启动时做如下配置

image

接下来,使用 Eureka 的管理 API,将 client 模块实例和 server peer1 实例的配置进行热更新,操作如下

使用命令行或者 Postman 工具,发送如下请求

image

通过浏览器再次访问:http://localhost:8761/,出现两个实例

image

在线扩充到三个 Eureka 实例

同理,维持上述运行实例,先不要做任何重启动作,修改 eureka-client.yml 配置,让客户端感知到三个实例

server:
  port: 8081
spring:
  application:
    name: eureka-client1
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/ 

修改 peer1 的配置

server:
  port: 8761
spring:
  application:
    name: eureka-server
eureka:
  instance:
    hostname: localhost
    preferIpAddress: true
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:8762/eureka/,http://localhost:8763/eureka/
  server:
    waitTimeInMsWhenSyncEmpty: 0
    enableSelfPreservation: false

使得 peer1 可以感知到另外两个实例,同理,修改 peer2 实例配置

server:
  port: 8762
eureka:
  instance:
    hostname: localhost
    preferIpAddress: true
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8763/eureka/
  server:
    waitTimeInMsWhenSyncEmpty: 0
    enableSelfPreservation: false

修改 peer3 实例配置

server:
  port: 8763
eureka:
  instance:
    hostname: localhost
    preferIpAddress: true
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
  server:
      waitTimeInMsWhenSyncEmpty: 0
      enableSelfPreservation: false

接下来,重启配置中,即 config 模块

然后,启动第三个实例,profile 指定 peer3

image

然后,使用 Eureka 的管理 API,刷新 peer1,peer2 的配置信息

image

image

再次通过浏览器访问:http://localhost:8761/

image

出现三个实例,扩容成功。

完整代码见:Github

参考资料

重新定义 Spring Cloud 实战

与Eureka Server 实现在线扩容相似的内容:

Eureka Server 实现在线扩容

Eureka Server 实现在线扩容 作者:Grey 原文地址: 博客园:Eureka Server 实现在线扩容 CSDN:Eureka Server 实现在线扩容 需求 Eureka 是 Spring Cloud Netflix 套件中的服务注册中心组件,作为微服务的核心组件,需要支持在线扩

基于Sa-Token实现微服务之前的单点登录

# 修改配置文件,准备好四个域名 ```shell 127.0.0.1 auth.server.com 127.0.0.1 user.server.com 127.0.0.1 third.server.com 127.0.0.1 eureka.server.com ``` # 注册中心:eureka

[转帖]Nacos和Eureka的区别

Eureka架构图: Eureka架构图 1.服务注册(register):Eureka Client会通过发送REST请求的方式,向Eureka Server注册自己的服务。注册时,提供自身的元数据,比如ip地址、端口、运行状况指标、主页地址等信息。Eureka Server接收到注册请求后,就会

SpringCloud搭建保姆级教程

一、搭建服务注册与发现中⼼ 使⽤Spring Cloud Netflix 中的 Eureka 搭建服务注册与发现中⼼ 1、创建SpringBoot应用添加依赖 1、spring web 2、eureka server 2、配置服务注册与发现中⼼ ## 设置服务注册与发现中⼼的端⼝ server: p

【Spring Cloud】Eureka缓存机制

Eureka分为Client端和Server端,Client端向Server端注册自己的服务信息,并且拉取所有服务的注册信息,Server端作为注册中心,负责接收Client端的注册信息,维护所有服务的注册信息,Server端也可以开启集群模式,相互之间同步服务的注册信息。 与缓存相关的三个变量 1

[转帖]k8s发布Spring cloud+eureka架构服务优雅启动停止方案

本文转载自昆仑枫的简书https://www.jianshu.com/p/6d393cbb694a Spring cloud+eureka是目前微服务主流解决方案之一,kubernetes则是广泛应用的发布工具,两者结合使用很常见。而两者结合时如何优雅启停从而实现无感发布很关键。下面将从不做特殊处理

Spring Cloud 部署时如何使用 Kubernetes 作为注册中心和配置中心

一、Spring Cloud 支持的常见注册中心和配置中心。 Spring Cloud 自带的注册中心Eureka以及config配置中心 Nacos,支持注册中心和配置中心等,可以参考:https://www.cnblogs.com/laoqing/p/17797759.html Zookeepe

推荐一个拥有386万订阅者,10000多免费学习视频的频道

自从开始搞YouTube中文配音以来,我们一直是7*24小时,夜以继日的在批量处理一些优质的学习资源,一方面是翻译,另一方面是配音。这样用户在打开的时候,就能获得经过我们优化的翻译和配音了。 这次我们刚刚处理完一个油管上非常火爆的​IT类学习频道:Edureka。 该频道内全是IT行业的免费学习视频