1. 回顾
Eureka Client会定时连接Eureka Server,获取注册表中的信息并缓存到本地。微服务在消费远程API时总是使用本地缓存中的数据。因此一般来说,即使Eureka Server发生宕机,也不会影响到服务之间的调用。但如果Eureka Server宕机时,某些微服务也出现了不可用的情况,Eureka Server中的缓存若不被刷新,就可能会影响到微服务的调用,甚至影响到整个应用系统的高可用。因此,在生成环境中,通常会部署一个高可用的Eureka Server集群。
Eureka Server可以通过运行多个实例并相互注册的方式实现高可用部署,Eureka Server实例会彼此增量地同步信息,从而确保所有节点数据一致。事实上,节点之间相互注册是Eureka Server的默认行为。
2. 构建一个双节点的Eureka Server集群
> 复制项目microservice-discovery-eureka,将ArtifactId修改为microservice-discovery-eureka-ha01
> 复制项目microservice-discovery-eureka,将ArtifactId修改为microservice-discovery-eureka-ha02
> 修改hosts文件,在windows平台下,进入目录:C:\Windows\System32\drivers\etc,然后用管理员权限打开hosts文件,添加一条记录
127.0.0.1 peer1 peer2
> 修改microservice-discovery-eureka-ha01的配置文件application.yml
server:
port: 8762
eureka:
instance:
hostname: peer1
client:
service-url:
defaultZone: http://peer2:8763/eureka # 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。
spring:
application:
name: microservice-discovery-eureka-ha
> 修改microservice-discovery-eureka-ha02的配置文件application.yml
server:
port: 8763
eureka:
instance:
hostname: peer2
client:
service-url:
defaultZone: http://peer1:8762/eureka # 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。
spring:
application:
name: microservice-discovery-eureka-ha
> 两个项目的spring.application.name必须相同,eureka.instance.hostname必须不同,否则都会失败。(至少我测试的是这样)
> 启动两个项目,访问:http://peer1:8762/ 和 http://peer2:8763/ ,此时registered-replicas(已注册分片)都有另一个系统的url地址,并且都在available-replicase(可用分片)中
3. 将微服务注册到Eureka Server集群上
> 修改microservice-provider-user中的配置文件application.yml,将eureka.client.service-url.defaultZone改为http://peer1:8762/eureka/。
eureka:
client:
service-url:
defaultZone: http://peer1:8762/eureka/
> 修改microservice-consumer-movie中的配置文件application.yml,将eureka.client.service-url.defaultZone改为http://peer1:8762/eureka/,http://peer2:8763/eureka/。
eureka:
client:
service-url:
defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka
> 先启动Eureka Server集群,再启动这两个微服务。访问:http://peer1:8762/ 和 http://peer2:8763/。发现这两个微服务都注册在了集群里。
说明即使微服务只配置Eureka Server集群中的某个节点,也能正常注册到Eureka Server集群,因为多个Eureka Server之间的数据会相互同步。
不过为适应某些极端场景,建议在客户端配置多个Eureka Server节点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通