服务器Eureka教程:从零搭建到可用注册中心
在服务器上搭 Eureka,本质是跑一个 Spring Boot 应用,把它作为微服务的注册中心。
单机模式最快十几分钟可以跑起来,但要让它稳定可用,需要配好端口、主机名、自我保护开关和访问控制。
下面按准备、部署、配置、验证和排错的顺序讲清楚。
一、动手前的环境准备
Eureka 是 Java 应用,所以服务器上要有可用的 JDK。
推荐 JDK 8 或 11,Spring Cloud 各版本对 JDK 要求不同,以你选用的 Spring Boot 版本文档为准。
- 一台 Linux 服务器,开放你计划使用的端口,例如
8761。 - 安装 JDK:
java -version能输出版本号即可。 - 安装 Maven 或直接使用打包好的可执行 jar。
- 确认服务器时间准确,注册心跳依赖时间判断,时间偏差过大容易误判实例下线。
如果还没有项目骨架,可以用 Spring Initializr 生成,依赖勾选 Eureka Server。
生成后本地打包,再上传到服务器。
二、服务端配置与启动
Eureka Server 的核心配置在 application.yml。
单机模式参考下面这份,注意把 hostname 换成你服务器真实可解析的地址或域名。
server:
port: 8761
eureka:
instance:
hostname: eureka.example.net
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
两个 false 表示服务端不把自己当成客户端去注册和拉取,单机部署时通常这样设置,能减少无意义的报错。
在启动类上加注解:
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
打包并启动:
mvn clean package -DskipTests
nohup java -jar eureka-server.jar > eureka.log 2>&1 &
用 tail -f eureka.log 观察日志,看到 Started Eureka Server 一类字样说明启动成功。
三、验证注册中心是否真的可用
打开浏览器访问 http://服务器IP:8761/,能看到 Eureka 的管理页面。
此时 Instances currently registered with Eureka 一栏是空的,属于正常现象,因为还没有客户端注册进来。
再启动一个客户端服务,配置里写上服务端地址:
eureka:
client:
service-url:
defaultZone: http://服务器IP:8761/eureka/
客户端启动后刷新管理页面,应能看到该服务出现在列表里。
这一步能同时验证网络连通、端口开放和注册逻辑。
四、容易踩的坑
- 页面能打开但客户端注册不上:先检查服务器防火墙和安全组是否放行
8761,再用telnet 服务器IP 8761测试连通性。 - 管理页面出现红色告警文字:多半是触发了自我保护模式,短时间内丢失大量心跳时会这样。开发环境可临时关闭,生产环境要谨慎评估。
- 配置了
hostname却解析不到:客户端拿到的是主机名而不是 IP,导致连接失败。确保该主机名在客户端可解析,或直接使用 IP。 - 多节点部署时仍用单机配置:
register-with-eureka和fetch-registry需要改为true,并互相指向其他节点地址。 - 修改配置后没生效:确认重新打包或重启了进程,jar 包不会自动加载新配置。
五、上生产前要补的几件事
单机 Eureka 适合测试和内部小规模使用。
要用于正式环境,至少考虑:多节点互相注册提高可用性、给管理页面加访问认证、限制注册中心端口的来源 IP、配置日志轮转避免磁盘被写满。
这些属于部署加固,建议在功能验证通过后再逐项处理。
常见疑问
Eureka 和 Nacos 该怎么选? 如果团队已经在用 Spring Cloud Netflix 体系,Eureka 改动小、上手快;
需要配置中心和更丰富的服务治理能力时,可以评估 Nacos。
选型要结合现有技术栈和维护成本,不建议只看单一指标。
为什么客户端注册后要等一会儿才显示? 注册和心跳有周期,加上页面缓存,通常需要几十秒。
若长时间不出现,优先排查网络和配置地址,而不是反复重启。
服务端需要几台机器? 测试环境一台即可,生产环境通常至少两台并互相注册,避免单点故障。
具体数量按你的可用性要求决定。
总体思路就是:先保证 JDK 和端口没问题,再配好 application.yml,启动后用管理页面和客户端注册做双重验证。
遇到异常时,按网络、配置、日志三条线依次排查,基本都能定位到原因。