alibaba/nacos · 上手攻略
- 仓库:alibaba/nacos
- 链接:https://github.com/alibaba/nacos
- 分类:ai(微服务 / 云原生基础设施)
- 作者:Jay
- 更新:2026-07-14
一、是什么
Nacos(Name and Configuration Service)是阿里巴巴开源的动态服务发现、配置管理和服务管理平台,专为云原生应用和微服务架构设计。它于 2018 年开源,2020 年成为 Apache 顶级项目(TLP),是 Java 微服务生态中最为流行的注册中心与配置中心之一。
Nacos 官方站:https://nacos.io
核心四大能力:
- 服务发现与健康检查:支持 DNS / HTTP 接口注册与发现,内置实时健康检测,防止流量打到不健康节点
- 动态配置管理:集中管理所有服务的配置,支持热更新(修改配置无需重启服务)
- 动态 DNS 服务:支持基于权重的路由,可做中间层负载均衡、流量控制和基于 DNS 的服务发现
- 服务与元数据管理:提供 Web 控制台,管理服务元数据、配置、Kubernetes DNS、服务健康状态和指标
技术栈定位: 类似于 Eureka + Apollo + Spring Cloud Config 的综合体,是 Spring Cloud Alibaba(SCA)生态的核心组件。
二、解决什么问题
微服务架构面临两个核心痛点:
- 服务在哪(发现问题):服务实例 IP/端口动态变化(容器化/弹性伸缩),需要统一的注册与发现机制
- 配置怎么改(管理问题):几十上百个微服务各自抱着配置文件,改一次要重部署全部
Nacos 一次性解决这两件事,同时提供配置的热更新能力。传统方案需要 Eureka(注册中心)+ Apollo(配置中心)两套系统,Nacos 用一套统一平台覆盖。
典型场景: - Spring Cloud / Dubbo 微服务注册与发现 - 多环境(dev/test/prod)配置隔离与管理 - 集群模式下服务元数据管理与健康监控 - 灰度发布、权重路由等高级流量管理
三、快速安装
环境要求
| 项目 | 要求 |
|---|---|
| Java | JDK 17+(生产环境推荐) |
| 系统 | Linux/Unix/Mac/Windows,推荐 Linux |
| 内存 | 最低 2C4G(生产建议更高) |
| 存储 | 约 60G(内置存储模式) |
⚠️ Nacos 2.x(自 2.0 起)从 3.0.0 版本开始默认启用控制台鉴权,启动时会要求设置 token secret key 和 identity key,请提前准备好 Base64 编码的密钥字符串。
方式一:一键部署(推荐)
使用官方 nacos-setup 工具,自动处理下载、鉴权和端口检测:
# 安装 nacos-setup
curl -fsSL https://nacos.io/nacos-installer.sh | sudo bash
# 启动单机 Nacos(最新版)
nacos-setup
# 启动指定版本
nacos-setup -v 3.2.0
# 启动集群模式
nacos-setup -c cluster
# 配置外置数据库存储
nacos-setup --datasource-conf
方式二:手动下载安装包
- 从 https://github.com/alibaba/nacos/releases 下载最新稳定版 zip(或从官网下载)
- 解压并进入 bin 目录:
unzip nacos-server-$VERSION.zip
# 或
tar -xvf nacos-server-$VERSION.tar.gz
cd nacos/bin
- Linux/Mac 启动单机模式:
sh startup.sh -m standalone
注:如果使用 ubuntu 报错,可尝试
bash startup.sh -m standalone
- Windows 启动:
startup.cmd -m standalone
启动后会要求填写三个鉴权参数(3.0.0+),需提前准备 Base64 编码的 token secret key:
nacos.core.auth.plugin.nacos.token.secret.key: <Base64 字符串>
nacos.core.auth.server.identity.key: <任意字符串>
nacos.core.auth.server.identity.value: <任意字符串>
验证启动成功
# 查看日志
tail -f ${nacos.home}/logs/start.out
# 成功日志关键词
Nacos started successfully in stand alone mode. use embedded storage
启动成功后: - 控制台:http://127.0.0.1:8080(首次打开需初始化 nacos 用户密码) - 服务端点:http://127.0.0.1:8848(OpenAPI 默认端口)
关闭服务
# Linux/Mac
sh shutdown.sh
# Windows
shutdown.cmd
四、核心用法
4.1 服务注册(OpenAPI)
curl -X POST 'http://127.0.0.1:8848/nacos/v3/client/ns/instance?serviceName=quickstart.test.service&ip=127.0.0.1&port=8080'
4.2 服务发现
curl -X GET 'http://127.0.0.1:8848/nacos/v3/client/ns/instance/list?serviceName=quickstart.test.service'
4.3 发布配置(需先登录获取 Token)
# 1. 登录获取 access token
curl -X POST 'http://127.0.0.1:8848/nacos/v3/auth/user/login' \
-d 'username=nacos' \
-d 'password=${YOUR_PASSWORD}'
# 2. 使用 token 创建配置
curl -X POST 'http://127.0.0.1:8848/nacos/v3/admin/cs/config?dataId=quickstart.test.config&groupName=test&content=HelloWorld' \
-H "accessToken:${YOUR_ACCESS_TOKEN}"
4.4 获取配置
curl -X GET 'http://127.0.0.1:8848/nacos/v3/client/cs/config?dataId=quickstart.test.config&groupName=test'
4.5 Spring Cloud 集成(Maven 依赖)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
application.yml 配置示例:
spring:
application:
name: my-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: DEFAULT_GROUP
⚠️ 注意:Spring Cloud Alibaba 2.2.x 系列对应 Spring Cloud Hoxton;Spring Cloud Alibaba 2021.x 对应 Spring Cloud 2020.x(更新版本请查阅 Spring Cloud Alibaba 官方兼容矩阵)。Nacos 客户端版本需与 Nacos 服务端版本保持兼容。
4.6 Dubbo 集成
Dubbo 可直接使用 Nacos 作为注册中心:
dubbo:
registry:
address: nacos://127.0.0.1:8848
4.7 集群模式
集群模式需要使用外置数据库(MySQL/PostgreSQL),修改 conf/application.properties:
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000
db.user=nacos
db.password=nacos_password
然后用 cluster 模式启动各节点:
sh startup.sh -m cluster
生产环境建议至少 3 节点,推荐搭配 Nginx/DNS 做负载均衡。
五、典型适用场景
| 场景 | 说明 |
|---|---|
| Spring Cloud 微服务 | 替代 Eureka,做服务注册与发现,配合 Nacos Config 做配置管理 |
| Dubbo 微服务 | Nacos 是 Dubbo 官方推荐的注册中心 |
| 多环境配置管理 | dev/test/staging/prod 隔离分组,配置热更新无需重启 |
| Kubernetes 混合部署 | 支持 Kubernetes Service 同步,物理机和 K8s 服务统一管理 |
| 灰度发布 | 基于权重路由实现流量分配,支持金丝雀发布 |
| 中小企业私有化部署 | 单机模式开箱即用,无需额外基础设施 |
六、坑与注意
-
鉴权配置(3.0.0+):Nacos 3.0.0 起默认开启鉴权,启动时必须手动设置三个密钥参数,否则无法正常注册服务。生产环境务必使用强密钥并定期轮换。
-
端口变化:控制台 Web 端口从传统 8848/nacos 变为 8080(Nacos 2.x 新增 gRPC 端口 9848);老文档常用 8848 访问控制台,新版已不同,需注意区分。
-
Spring Boot 3.x 兼容性:使用 Spring Boot 3.x 时,需要 Spring Cloud Alibaba 2022.x 或更高版本,以及 Nacos 客户端 2.2.x+。
-
外置数据库是集群必选:单机模式可使用嵌入式存储,生产集群必须配置 MySQL 或 PostgreSQL。
-
数据分区(Namespaces vs Groups):Groups 用于逻辑隔离(如不同业务线),Namespaces 用于环境隔离(如 dev/prod);设计之初就要规划好,避免生产环境混乱。
-
心跳与健康检查:Nacos 默认 5 秒续约、15 秒不健康;容器环境如果服务频繁重启,可能导致服务列表刷出"不健康"状态。
-
版本升级:从 1.x 升级到 2.x 需要注意 gRPC 端口(9848)的防火墙配置,从 2.x 升级到 3.x 需重新配置鉴权参数。
七、与同类对比
| 特性 | Nacos | Eureka(Netflix) | Consul(HashiCorp) | Apollo(Apollo) |
|---|---|---|---|---|
| 服务发现 | ✅ | ✅ | ✅ | ❌ |
| 配置管理 | ✅ | ❌ | ✅ | ✅ |
| Web 控制台 | ✅ | ❌ | ✅ | ✅ |
| Spring Cloud 集成 | 原生( SCA) | 原生 | 需额外依赖 | 需 adapter |
| 多语言支持 | HTTP/SDK | HTTP/SDK | DNS/SDK | HTTP/SDK |
| 数据持久化 | MySQL/PG/嵌入式 | 无(内存) | MySQL/Consul KV | MySQL |
| 配置热更新 | ✅ | ❌ | ✅ | ✅ |
| Kubernetes 感知 | ✅ | ❌ | ✅ | ❌ |
| 社区活跃度 | 高(阿里背书) | 维护停滞 | 高 | 高(携程) |
一句话结论:如果你用 Spring Cloud + Java,Nacos 是最省心的选择——注册中心 + 配置中心二合一,Spring Cloud Alibaba 原生集成,社区活跃且阿里内部大规模验证过。如果你的技术栈偏多语言或已有 Consul/Apollo,则不必强行迁移。
八、一句话推荐
Nacos 是 Java 微服务首选的二合一注册与配置中心,开箱即用、功能完整,是 Spring Cloud Alibaba 生态的核心底座。