9.1.2 架构组成与关键模块(Naming、Config、Console)

Nacos 的整体架构由三大核心模块构成:Naming(服务注册与发现)、Config(配置管理)与 Console(管理控制台),并以公共基础能力支撑运行(存储、协议、集群、鉴权、健康检查)。本节从运维视角讲清模块边界、数据流与依赖关系,并提供安装、验证、排错与练习示例。

架构原理草图#

文章图片

Naming:服务注册与发现#

Naming 负责服务实例的注册、发现与健康检查,是微服务治理的基础。

示例:注册与发现(HTTP)#

# 1) 注册一个临时实例(心跳驱动)
curl -s -X POST "http://127.0.0.1:8848/nacos/v1/ns/instance" \
  -d "serviceName=order-svc&ip=10.0.0.11&port=8080&clusterName=DEFAULT&weight=1.0&enabled=true&healthy=true&ephemeral=true"

# 2) 查询实例列表(服务发现)
curl -s "http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=order-svc" | jq .

# 3) 发送心跳(临时实例需要)
curl -s -X PUT "http://127.0.0.1:8848/nacos/v1/ns/instance/beat" \
  -d "serviceName=order-svc&ip=10.0.0.11&port=8080"

命令解释
- ephemeral=true 表示临时实例,依赖心跳保持健康。
- instance/list 返回实例列表,网关或客户端基于权重做负载均衡。
- instance/beat 用于续约心跳,避免被摘除。

排错要点(Naming)#

  • 注册成功但不显示实例:检查 clusterName 是否与查询一致;查看 Nacos 日志 logs/nacos.log 中的 register 记录。
  • 实例频繁剔除:客户端心跳间隔过长或网络抖动;调低 instance/beat 间隔或放宽 nacos.naming.health 参数。
  • 集群不同步:检查 Distro/Raft 通信端口是否开放(默认 7848/9848 视版本),并确认节点间可达。

Config:配置管理与动态刷新#

Config 提供集中化配置、版本管理与动态推送能力,降低配置分发与变更成本。

示例:发布、获取、监听配置#

# 1) 发布配置(DataId+Group)
curl -s -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs" \
  -d "dataId=app.yaml&group=DEV_GROUP&content=server.port: 8081"

# 2) 获取配置
curl -s "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=app.yaml&group=DEV_GROUP"

# 3) 模拟监听(长轮询,返回304为无变更)
curl -i "http://127.0.0.1:8848/nacos/v1/cs/configs/listener" \
  -d "Listening-Configs=app.yaml%02DEV_GROUP%02"

命令解释
- dataId/group 组合唯一标识配置。
- listener 接口用于长轮询变更通知,客户端收到变更后刷新本地配置。

排错要点(Config)#

  • 发布成功但客户端不更新:检查客户端长轮询连接数、反向代理超时(如 Nginx proxy_read_timeout)。
  • 配置丢失:确认 conf/application.properties 中数据库配置正确,MySQL 表已初始化。

Console:管理控制台#

Console 为管理入口,涵盖配置与服务的可视化操作与运维管理。

示例:启用鉴权与登录#

# /opt/nacos/conf/application.properties
nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=serverIdentity

命令解释
- 启用鉴权后,控制台和 API 需登录获取 token。

API 登录示例(获取 token)#

curl -s -X POST "http://127.0.0.1:8848/nacos/v1/auth/login" \
  -d "username=nacos&password=nacos" | jq .

模块关系与运行流程(运维关注点)#

  • 注册/发现链路:客户端 → Naming 接口 → 集群同步 → 客户端发现缓存更新。
  • 配置变更链路:控制台发布 → Config 存储 → 推送/轮询 → 客户端刷新。
  • 依赖关系:Naming 与 Config 依赖集群通信与存储,Console 依赖鉴权与后端服务。
  • 常见瓶颈:MySQL 性能、网络抖动导致注册超时、长轮询连接数过高、JVM 参数不合理。

安装与基础验证(单机示例)#

# 1) 解压与启动(以 Nacos 2.x 为例)
tar -xzf nacos-server-2.3.0.tar.gz -C /opt/
cd /opt/nacos/bin
./startup.sh -m standalone

# 2) 健康检查
curl -s "http://127.0.0.1:8848/nacos/v1/console/health" | jq .

# 3) 查看日志
tail -f /opt/nacos/logs/start.out

命令解释
- -m standalone 以单机模式启动,适合学习与验证。
- console/health 返回 status: UP 表示服务可用。

排错清单(快速定位)#

  • 启动失败:检查 Java 版本与 JAVA_HOME;查看 logs/start.out
  • 端口占用ss -lntp | grep 8848,确保端口未被占用。
  • MySQL 连接失败:确认 db.url、账号密码、表结构是否初始化。

练习#

  1. 使用命令行注册两个实例(权重不同),并验证 instance/list 返回的权重。
  2. 发布一条配置,修改内容后观察 listener 接口的返回变化。
  3. 开启鉴权后,验证未登录访问 API 返回 403,再使用 token 访问成功。