SpringBoot微服务使用Eureka时客户服务随机注销离线问题咨询
Eureka跨服务器部署随机离线问题解决方案
从提供的错误日志来看,异常是Eureka客户端向服务端发送心跳请求时读取超时导致的,跨服务器部署时网络波动、默认超时/重试配置不足,会导致心跳连续失败,最终触发Eureka的服务剔除规则,客户端离线。
你需要补充以下配置解决问题:
客户端侧配置
- 调整Eureka请求的超时阈值,适配跨网网络延迟
eureka: client: # 连接Eureka服务端的超时时间,默认5s,跨网建议调至8~15s eureka-server-connect-timeout-seconds: 10 # 读取Eureka服务端响应的超时时间,默认8s,建议调至10~20s eureka-server-read-timeout-seconds: 10
- 配置心跳失败重试策略,避免单次网络抖动导致请求失败
eureka: client: transport: # 心跳失败重试次数,默认0,建议配置2~3次 retry-count: 3 # 单个Eureka节点的最大重试次数 max-retries-per-host: 3 # 所有Eureka节点的总重试次数 max-total-retries: 3
- 调整心跳与过期时间配置,提升容错能力
eureka: instance: # 心跳发送间隔,默认30s,跨网可缩小到3~10s lease-renewal-interval-in-seconds: 5 # 服务端多久没收到心跳则剔除服务,默认90s lease-expiration-duration-in-seconds: 30
注意:lease-expiration-duration-in-seconds的配置值必须大于lease-renewal-interval-in-seconds,否则会出现正常心跳也被误剔除的问题
服务端侧配置
调整Eureka服务端的剔除规则,避免网络波动时误删服务:
eureka: server: # 开启自我保护机制,网络不稳定时不会批量剔除服务 enable-self-preservation: true # 心跳成功率阈值,默认0.85,跨网部署可适当调低到0.4~0.6 renewal-percent-threshold: 0.5 # 服务剔除任务执行间隔,默认60s,建议调至10~30s eviction-interval-timer-in-ms: 10000
额外排查项
- 检查两台服务器之间的网络策略,确认Eureka服务端端口(默认8761)全时段放行,没有间歇性限流、防火墙拦截规则
- 排查Eureka服务端的CPU、内存、GC情况,确认服务端本身没有性能瓶颈导致响应超时
- 确认客户端配置的Eureka服务端地址是跨服务器可访问的公网/内网地址,不是本地回环地址或者仅本机可达的地址
内容的提问来源于stack exchange,提问作者Jay Vignesh
相关产品推荐
相关产品推荐

