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

核心四大能力:

  1. 服务发现与健康检查:支持 DNS / HTTP 接口注册与发现,内置实时健康检测,防止流量打到不健康节点
  2. 动态配置管理:集中管理所有服务的配置,支持热更新(修改配置无需重启服务)
  3. 动态 DNS 服务:支持基于权重的路由,可做中间层负载均衡、流量控制和基于 DNS 的服务发现
  4. 服务与元数据管理:提供 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

方式二:手动下载安装包

  1. 从 https://github.com/alibaba/nacos/releases 下载最新稳定版 zip(或从官网下载)
  2. 解压并进入 bin 目录:
unzip nacos-server-$VERSION.zip
# 或
tar -xvf nacos-server-$VERSION.tar.gz
cd nacos/bin
  1. Linux/Mac 启动单机模式:
sh startup.sh -m standalone

注:如果使用 ubuntu 报错,可尝试 bash startup.sh -m standalone

  1. 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 服务统一管理
灰度发布 基于权重路由实现流量分配,支持金丝雀发布
中小企业私有化部署 单机模式开箱即用,无需额外基础设施

六、坑与注意

  1. 鉴权配置(3.0.0+):Nacos 3.0.0 起默认开启鉴权,启动时必须手动设置三个密钥参数,否则无法正常注册服务。生产环境务必使用强密钥并定期轮换。

  2. 端口变化:控制台 Web 端口从传统 8848/nacos 变为 8080(Nacos 2.x 新增 gRPC 端口 9848);老文档常用 8848 访问控制台,新版已不同,需注意区分。

  3. Spring Boot 3.x 兼容性:使用 Spring Boot 3.x 时,需要 Spring Cloud Alibaba 2022.x 或更高版本,以及 Nacos 客户端 2.2.x+。

  4. 外置数据库是集群必选:单机模式可使用嵌入式存储,生产集群必须配置 MySQL 或 PostgreSQL。

  5. 数据分区(Namespaces vs Groups):Groups 用于逻辑隔离(如不同业务线),Namespaces 用于环境隔离(如 dev/prod);设计之初就要规划好,避免生产环境混乱。

  6. 心跳与健康检查:Nacos 默认 5 秒续约、15 秒不健康;容器环境如果服务频繁重启,可能导致服务列表刷出"不健康"状态。

  7. 版本升级:从 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 生态的核心底座。