Eureka Server 3.1.4不可用问题求助(Spring Boot 2.6.x)
问题说明
使用Spring Boot 2.6.7/2.6.13搭配Eureka Server 3.1.4,部署了两个集群节点:SERVER-ALPHA(端口9700)和SERVER-BETA(端口9800),节点配置如下:
SERVER-ALPHA的application.yml
server: port: 9700 spring: application: name: SERVER-ALPHA eureka: instance: prefer-ip-address: false hostname: SERVER-ALPHA client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://172.22.58.174:9800/eureka/ enabled: true server: enable-self-preservation: false renewal-percent-threshold: 0.85 eviction-interval-timer-in-ms: 1000 use-read-only-response-cache: false response-cache-update-interval-ms: 1000
SERVER-BETA的application.yml
server: port: 9800 spring: application: name: SERVER-BETA eureka: instance: prefer-ip-address: false hostname: SERVER-BETA client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://172.22.58.174:9700/eureka/ enabled: true server: enable-self-preservation: false renewal-percent-threshold: 0.85 eviction-interval-timer-in-ms: 1000 use-read-only-response-cache: false response-cache-update-interval-ms: 1000
目前Eureka页面异常,服务发现功能失效。已尝试设置eureka.client.enabled为true(该参数默认值即为true),但问题未解决;查阅的方案多针对2021年前的Spring Cloud版本,适配当前版本的解决方法缺失,现提供以下可行排查与修复建议:
排查与修复步骤
检查主机名解析有效性
因为prefer-ip-address设为false,Eureka节点间依赖主机名通信。需确认:- 两台服务器的系统主机名是否分别为
SERVER-ALPHA和SERVER-BETA - 节点间能否通过对方主机名正常ping通
- 若主机名解析失败,可在两台服务器的
/etc/hosts(Linux)或C:\Windows\System32\drivers\etc\hosts(Windows)中添加IP与主机名的映射,比如172.22.58.174 SERVER-ALPHA
- 两台服务器的系统主机名是否分别为
修正废弃的缓存配置
Eureka Server 3.1.x中use-read-only-response-cache参数已被废弃,保留该配置可能导致缓存逻辑异常,建议修改为:eureka: server: # 移除或注释use-read-only-response-cache参数 response-cache-auto-expiration-in-seconds: 1 # 替换为该参数,设置1秒缓存自动过期调整自我保护与续约阈值
当前关闭自我保护且设置0.85的续约阈值,在2节点集群场景下易触发实例误剔除逻辑:- 临时开启自我保护:
enable-self-preservation: true - 降低续约阈值适配小规模集群:
renewal-percent-threshold: 0.5
- 临时开启自我保护:
验证版本兼容性
Spring Boot 2.6.x对应Spring Cloud 2021.0.x版本,需确保Eureka Server版本与之匹配。建议升级到官方推荐的spring-cloud-starter-netflix-eureka-server:3.1.8,修复潜在的版本兼容问题。检查端口与防火墙规则
确认两台服务器的9700、9800端口未被防火墙/安全组拦截,可通过telnet 172.22.58.174 9800测试端口连通性。通过日志定位具体错误
查看Eureka Server的启动日志,重点关注Connection refused(通信失败)、Registration failed(注册失败)、Cache refresh failed(缓存刷新异常)等关键字,根据日志信息精准定位问题。
内容的提问来源于stack exchange,提问作者ReTriBleT

