Nacos
概述
Nacos(Naming and Configuration Service)是一个开源的动态服务发现、配置管理和服务管理平台,由阿里巴巴开发并开源,广泛应用于云原生应用和微服务环境中。
核心功能:
- 服务发现与健康检查:支持 DNS 和 RPC 方式的服务注册与发现,提供心跳检测和健康检查机制
- 动态配置管理:支持配置的版本管理、回滚、灰度发布和热更新
- 动态 DNS 服务:支持权重路由、流量管理和负载均衡策略
- 服务元数据管理:支持服务的细粒度管理和路由策略配置
典型应用场景:
- Spring Cloud / Dubbo 微服务架构的服务注册中心
- 分布式系统的配置中心
- Kubernetes 环境中服务的接入与管理
部署准备
1. 系统要求
| 项目 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 1 核 | 2 核+ |
| 内存 | 1 GB | 2 GB+ |
| 硬盘 | 5 GB | 20 GB+ |
| Docker | 18.06+ | 最新版 |
2. 创建 Docker Compose 编排文件
docker-compose.yaml:
services:
nacos:
image: nacos/nacos-server:2.0.0
container_name: nacos
restart: always
environment:
- TZ=Asia/Shanghai
- MODE=standalone
- JVM_XMX=1g
- JVM_XMS=1g
- JVM_XMN=512m
- JVM_MS=256m
ports:
- "8848:8848"
- "9848:9848"
volumes:
- nacos_data:/home/nacos
deploy:
resources:
limits:
cpus: "1"
memory: "2G"
volumes:
nacos_data:3. 环境变量说明
| 变量 | 说明 |
|---|---|
MODE=standalone |
单机模式运行 |
JVM_XMX=1g |
最大堆内存 |
JVM_XMS=1g |
初始堆内存 |
JVM_XMN=512m |
新生代堆内存 |
JVM_MS=256m |
元空间初始内存 |
说明:Nacos 2.0 版本新增 9848 端口用于 gRPC 通信,用于服务间同步和集群通信,部署时需确认防火墙已放行。
启动服务
docker compose up -d查看启动日志:
docker logs nacos -f --tail=50验证访问
curl http://127.0.0.1:8848/nacos在浏览器中打开 http://<服务器IP>:8848/nacos 即可访问 Nacos。
默认登录信息:
- 用户名:
nacos - 密码:
nacos
重要:首次登录后请立即修改默认密码。
常用管理命令
| 操作 | 命令 |
|---|---|
| 启动 Nacos | docker compose up -d |
| 停止 Nacos | docker compose stop |
| 重启 Nacos | docker compose restart |
| 查看状态 | docker compose ps |
| 查看日志 | docker logs nacos -f --tail=100 |
| 进入容器 | docker exec -it nacos /bin/bash |
配置 MySQL 数据库存储
默认使用内置 Derby 数据库(仅适合单机测试),生产环境建议使用 MySQL:
1. 创建数据库
CREATE DATABASE nacos_config CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;2. 初始化表结构
执行 Nacos 提供的 nacos-mysql.sql 脚本(可从 GitHub 或安装包中获取)。
3. 修改环境变量
services:
nacos:
image: nacos/nacos-server:2.0.0
container_name: nacos
restart: always
environment:
- TZ=Asia/Shanghai
- MODE=standalone
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=mysql
- MYSQL_SERVICE_DB_NAME=nacos_config
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=nacos
- MYSQL_SERVICE_PASSWORD=nacos
- JVM_XMX=1g
- JVM_XMS=1g
ports:
- "8848:8848"
- "9848:9848"
volumes:
- nacos_data:/home/nacos
depends_on:
- mysql
mysql:
image: mysql:8.0
container_name: nacos-mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root123
- MYSQL_DATABASE=nacos_config
- MYSQL_USER=nacos
- MYSQL_PASSWORD=nacos
volumes:
- mysql_data:/var/lib/mysql
ports:
- 3306:3306
volumes:
nacos_data:
mysql_data:集群模式部署
生产环境推荐使用集群模式,需修改 docker-compose.yaml:
services:
nacos1:
image: nacos/nacos-server:2.0.0
container_name: nacos1
restart: always
environment:
- MODE=cluster
- NACOS_SERVERS=nacos1:8848,nacos2:8848,nacos3:8848
- MYSQL_SERVICE_HOST=mysql
- MYSQL_SERVICE_DB_NAME=nacos_config
- MYSQL_SERVICE_USER=nacos
- MYSQL_SERVICE_PASSWORD=nacos
ports:
- "8848:8848"
volumes:
- nacos1_data:/home/nacos
nacos2:
# 类似配置,端口映射改为 8849:8848
# ...
nacos3:
# 类似配置,端口映射改为 8850:8848
# ...常见问题
Q:访问 Nacos 报 403 或无法登录?
- 确认用户名密码是否正确(默认 nacos/nacos)
- 检查防火墙是否放行 8848 端口
- 如使用 MySQL,确认数据库表已正确初始化
Q:服务注册失败或无法发现?
- 确认 9848 端口(gRPC)是否开放
- 检查服务端和客户端的 Nacos 版本是否兼容
- 查看日志排查具体错误:
docker logs nacos --tail=100 | grep ERRORQ:Nacos 内存不足导致 OOM?
根据实际内存调整 JVM 参数:
environment:
- JVM_XMX=512m
- JVM_XMS=512m
- JVM_XMN=256m
- JVM_MS=128mQ:如何备份 Nacos 配置?
# 通过 API 导出配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example&group=DEFAULT_GROUP" > config_backup.yml
# 或备份 MySQL 数据库
mysqldump -u nacos -p nacos_config > nacos_config_backup.sqlQ:如何重置 Nacos 密码?
进入容器执行:
docker exec -it nacos /bin/bash
# 修改 MySQL 中的用户密码
mysql -h mysql -u root -p
USE nacos_config;
UPDATE users SET password='$2a$10$your_hashed_password' WHERE username='nacos';注意:密码需使用 BCrypt 加密。