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、账号密码、表结构是否初始化。
练习#
- 使用命令行注册两个实例(权重不同),并验证
instance/list返回的权重。 - 发布一条配置,修改内容后观察
listener接口的返回变化。 - 开启鉴权后,验证未登录访问 API 返回 403,再使用 token 访问成功。