配置 Eureka Server 集群

本文详细介绍如何配置EurekaServer集群以实现高可用性。通过本地搭建两台EurekaServer并进行相互注册,确保在一台服务器出现故障时另一台能够接管服务。此外,还介绍了如何配置客户端应用以使其能正确地连接到EurekaServer集群。

简介

为了使 Eureka Server 实现高可用,我们需要为它配置集群。这样当有一台 Eureka Server 有故障时,集群中的其他 Server 可以进行代替。Eureka 集群之中的 Node 通过 P2P 通信的方式共享注册表,以使得每个 Eureka Server 的注册表保持一致。本教程将在本地开启两台 Eureka Server 以测试集群的搭建。

项目源码

Gitee码云

配置 Eureka Server

打开远程 git 仓库中的 eureka-server.yml 文件,添加如下配置:

---
spring:
  profiles: peer1
server:
  port: 8761
eureka: 
  instance:
    hostname: peer1
  client: 
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://peer2:8762/eureka

---
spring:
  profiles: peer2
server:
  port: 8762
eureka: 
  instance:
    hostname: peer2
  client: 
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://peer1:8761/eureka

三划线用于区分两个不同的 profile,使用 spring-boot 插件启动项目时可通过命令行参数指定 profile。这两个 profiles 分别指定了 profile 的名字,服务的端口号。ureka.instance.hostname 为主机名,必须要和 eureka.client.serviceUrl.defaultZone 中的 Peer 主机名保持一致。例如,在 peer1 的 profile 中,把 peer2 作为了集群中另一个镜像节点,那么这个 http://peer2:8762/eureka URL 中的 peer2 就要和 peer2 profile 中的 eureka.instance.hostname 保持一致。serviceUrl 是 eureka server 的注册地址,defaultZone 想对于 AWS 的 availability zone,在本地测试可以用 defaultZone 或者其他名称,以把 Eureka Server 部署在不同集群。register-with-eurekafetch-registry 之前设置为了 false, 因为只有一台 Eureka Server,并不需要自己注册自己,而现在有了集群,可在集群的其他节点中注册本服务。

修改 hosts

修改 hosts 文件,以使 peer1 和 peer2 映射到 localhost,因为 eureka server 的主机名必须不同才可互相注册,所以在本地需要模拟两个不同的主机名:

127.0.0.1 peer1
127.0.0.1 peer2

配置 productService

打开远程 git 仓库中的 product-service.yml 文件,添加如下配置:

server:
  port: 8081
spring:
  cloud:
    config:
      allow-override: true
      override-system-properties: false

eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka, http://peer2:8762/eureka

这里通过 eureka.client.serviceUrl.defaultZone 把 eureka 集群中的所有 url 都填写了进来,也可以只写一台,因为各个 eureka server 可以同步注册表。

测试

首先启动 configserver,然后分别运行如下两条命令启动 eureka server 集群:

mvn spring-boot:run -Dspring-boot.run.profiles=peer1
mvn spring-boot:run -Dspring-boot.run.profiles=peer2

最后启动 productService,访问任一 Eureka Server,如:

http://peer1:8761

我们可以看到 Eureka Server 集群和 Product-Service 均在注册表里。

ApplicationAMIsAvailability ZonesStatus
EUREKA-SERVERn/a (2)(2)UP (2) - xuqians-imac:eureka-server:8761 , xuqians-imac:eureka-server:8762
PRODUCT-SERVICEn/a (1)(1)UP (1) - xuqians-imac:product-service:8081

欢迎访问我的博客:张旭乾的博客

转载于:https://blog.51cto.com/13727459/2117402

### 配置和部署高可用的Eureka Server集群 为了确保Eureka Server集群的高可用性,在微服务架构中,多个Eureka服务器实例会互相注册并同步它们的服务列表。当一个Eureka服务器不可用时,客户端和服务端能够自动切换至其他健康的Eureka服务器节点继续工作。 #### 设置Eureka Server之间的互连互通 每个Eureka Server应当被配置成能与其他Eureka Servers通信,这意味着每一个Eureka Server不仅作为服务提供者向其它Eureka Servers注册自己,同时也作为一个消费者来获取来自其他Eureka Servers的信息[^2]。这种设计允许即使部分网络分区发生的情况下也能维持一定的功能正常运作。 对于具体的实现方式来说: - **启动多个Eureka Server实例**:在同一台机器或者不同的物理/虚拟主机上启动至少两个以上的Eureka Server实例。 - **修改application.yml文件中的eureka.client.serviceUrl.defaultZone属性**:指定其他的Eureka Server地址以便于相互注册与数据复制。例如,如果存在三个分别监听7001、7002、7003端口的Eureka Server,则可以在各自的`application.yml`里设置如下所示的内容以形成环形拓扑结构[^4]: ```yaml server: port: 7001 spring: application: name: eureka-server eureka: client: service-url: defaultZone: http://localhost:7002/eureka/,http://localhost:7003/eureka/ ``` 上述配置使得当前Eureka Server将尝试连接另外两台位于本地环境下的Eureka Server进行信息交换。同样地,也需要相应调整其余两个Eureka Server上的配置文件指向剩余成员。 #### 启用自我保护模式 默认情况下,Eureka具有自我保护机制,该特性旨在防止因短暂性的网络波动而导致大量健康的服务实例被错误地标记为下线状态。然而,在某些场景下可能希望禁用此行为从而更严格地管理失效检测过程。可以通过在`application.yml`中加入下面这段话来关闭这一选项: ```yaml eureka: server: enable-self-preservation: false ``` 值得注意的是,这样做可能会增加误判的风险,因此需谨慎评估实际需求后再做决定。 #### 添加@EnableEurekaServer注解 最后一步是在主应用程序类上面加上`@EnableEurekaServer`注解,表明这是一个Eureka Server应用,并通过Spring Boot的方式启动它[^5]: ```java package cn.kitey.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaMain7001 { public static void main(String[] args) { SpringApplication.run(EurekaMain7001.class, args); } } ``` 完成以上步骤之后就可以成功建立一个多活冗余的Eureka Server集群了。随着更多Eureka Server加入进来,整个系统的健壮性和容错能力都会得到显著提升。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值