9.1.1 Nacos定位与核心能力(配置、注册、治理)
Nacos定位与核心能力(配置、注册、治理)#
Nacos 是面向云原生的统一控制面,提供配置管理、服务注册发现、服务治理三大核心能力,使微服务具备“可配置、可发现、可治理”的基础设施能力。
原理草图(核心能力与模块关系)
1. 核心能力与关键概念#
配置管理(Config)
- 维度:Namespace(环境)、Group(分组)、DataId(配置项)
- 动态刷新:客户端监听变更,无需重启
- 版本:历史记录与回滚
注册发现(Naming)
- 实例模型:临时实例(心跳保活)/持久实例
- 健康检查:实例状态驱动路由
- 元数据:实现灰度、标签路由
服务治理(Governance)
- 分组、集群隔离与权重路由
- 保护阈值(防止雪崩)
- 蓝绿/灰度发布基础能力
2. 安装与快速验证(单机示例)#
2.1 启动 Nacos(Linux)
# 1) 解压并进入目录
tar -zxvf nacos-server-2.2.3.tar.gz -C /opt/
cd /opt/nacos/bin
# 2) 单机模式启动
./startup.sh -m standalone
# 3) 验证端口
ss -lntp | grep 8848
预期效果
- 管理台访问:http://:8848/nacos
- 默认账号密码:nacos/nacos
3. 配置管理示例(发布/监听/回滚)#
3.1 使用 API 发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs" \
-d "dataId=app.yaml" \
-d "group=DEFAULT_GROUP" \
-d "namespace=public" \
-d "content=server.port: 8080"
3.2 查询配置
curl -G "http://127.0.0.1:8848/nacos/v1/cs/configs" \
--data-urlencode "dataId=app.yaml" \
--data-urlencode "group=DEFAULT_GROUP" \
--data-urlencode "namespace=public"
3.3 预期效果
- 查询返回 server.port: 8080
- 在控制台“配置管理”可看到版本记录
4. 注册发现示例(服务注册/健康检查)#
4.1 注册一个服务实例
curl -X POST "http://127.0.0.1:8848/nacos/v1/ns/instance" \
-d "serviceName=order-service" \
-d "ip=10.0.0.10" \
-d "port=8081" \
-d "weight=1.0"
4.2 查询服务实例
curl -G "http://127.0.0.1:8848/nacos/v1/ns/instance/list" \
--data-urlencode "serviceName=order-service"
4.3 预期效果
- 返回实例列表,healthy=true
5. 治理能力示例(权重与元数据路由)#
5.1 调整权重(灰度)
curl -X PUT "http://127.0.0.1:8848/nacos/v1/ns/instance" \
-d "serviceName=order-service" \
-d "ip=10.0.0.10" \
-d "port=8081" \
-d "weight=0.2"
5.2 设置元数据标签
curl -X PUT "http://127.0.0.1:8848/nacos/v1/ns/instance" \
-d "serviceName=order-service" \
-d "ip=10.0.0.10" \
-d "port=8081" \
-d "metadata={\"version\":\"v2\",\"zone\":\"bj\"}"
6. 排错要点(常见问题与命令)#
问题 1:无法访问 8848
# 检查进程
ps -ef | grep nacos
# 检查端口
ss -lntp | grep 8848
# 检查防火墙
firewall-cmd --list-ports
问题 2:注册实例不健康
# 检查心跳超时日志
tail -f /opt/nacos/logs/nacos.log | grep heartbeat
# 检查实例信息
curl -G "http://127.0.0.1:8848/nacos/v1/ns/instance" \
--data-urlencode "serviceName=order-service" \
--data-urlencode "ip=10.0.0.10" \
--data-urlencode "port=8081"
问题 3:配置未刷新
# 查看配置是否更新
curl -G "http://127.0.0.1:8848/nacos/v1/cs/configs" \
--data-urlencode "dataId=app.yaml" \
--data-urlencode "group=DEFAULT_GROUP"
# 检查客户端日志与监听配置
7. 小练习(实操)#
- 发布一份
app.yaml配置,内容为feature.toggle: true,并验证查询结果。 - 注册两个实例(不同 IP/端口),将其中一个权重改为 0.1,观察实例列表变化。
- 修改配置内容并在控制台查看历史版本,然后执行一次回滚操作。