You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

双Eureka Server集群单节点宕机后服务注册注销异常问题咨询

问题根因排查

1. 业务服务配置存在两处致命错误

这是导致你问题的核心原因:

  • 配置键拼写错误:eureka.client.service-url下的键被误写为deaufaultZone,正确应为defaultZone。拼写错误会导致服务客户端无法识别第二个Eureka节点peer2的地址,默认只会请求http://localhost:8761/eureka,因此peer1宕机后,服务找不到其他可用注册节点,自然不会向peer2发起注册、发送心跳,相关的实例更新、注销操作也不会同步到peer2。
  • 占位符语法错误:你写的${EUREKA_URI:{http://peer1:8761/eureka}, ${EUREKA_URI:{http://peer2:8762/eureka}语法不符合Spring配置规范,多注册中心地址仅需用英文逗号分隔即可,无需重复声明变量。

2. 自我保护机制影响实例剔除

你两台Eureka Server都开启了自我保护enable-self-preservation: true,当peer1宕机后,集群整体的服务续约数会低于你设置的阈值0.85,此时Eureka会进入自我保护模式,停止主动剔除过期服务实例,这就是你观察到已注销服务无法自动剔除的原因。

3. 需核对hosts配置

确认两台Eureka Server、所有业务服务的hosts文件都已经配置了peer1、peer2对应的正确IP地址,否则会出现节点间跨域通信失败的问题。


修复后的业务服务参考配置

spring:
  application:
    name: service
server:
  port: 8000
eureka:
  client:
    service-url:
      # 修正拼写错误和占位符语法
      defaultZone: ${EUREKA_URI:http://peer1:8761/eureka,http://peer2:8762/eureka}
  instance:
    hostname: service
    lease-renewal-interval-in-seconds: 30

验证步骤

  1. 修正配置后重启所有业务服务
  2. 先启动两台Eureka Server,确认控制台显示互为可用副本
  3. 关闭peer1,等待1分钟左右重启业务服务,查看peer2控制台是否能正常展示新注册的实例
  4. 测试服务剔除:关闭业务服务,等待lease-expiration-duration-in-seconds配置的90秒后查看peer2实例列表。如果需要测试自动剔除逻辑,可临时关闭Eureka的自我保护:eureka.server.enable-self-preservation: false,生产环境建议保留自我保护机制,避免网络波动导致大量实例被误删。

内容的提问来源于stack exchange,提问作者Sebastian2211

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:15:01