1. 项目概述
Nacos作为阿里巴巴开源的动态服务发现、配置管理和服务管理平台,已经成为云原生架构中不可或缺的基础组件。本文将详细介绍如何在Docker环境中部署Nacos服务注册与配置中心,并结合MySQL实现数据持久化。
2. 环境准备
2.1 基础环境要求
- Docker 20.10.0+
- Docker Compose 1.29.0+
- MySQL 5.7+/8.0
- 至少2GB可用内存
2.2 网络配置建议
确保Docker主机可以访问外网以下载镜像,同时建议为容器创建专用网络:
docker network create nacos_network3. MySQL容器部署
3.1 启动MySQL容器
docker run -d \ --name nacos-mysql \ --network nacos_network \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=nacos \ -e MYSQL_DATABASE=nacos \ -e MYSQL_USER=nacos \ -e MYSQL_PASSWORD=nacos \ -v /data/mysql:/var/lib/mysql \ mysql:8.03.2 初始化Nacos数据库
从Nacos GitHub仓库获取初始化SQL脚本:
wget https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql docker exec -i nacos-mysql mysql -uroot -pnacos nacos < mysql-schema.sql4. Nacos服务部署
4.1 单机模式部署
docker run -d \ --name nacos-standalone \ --network nacos_network \ -p 8848:8848 \ -e MODE=standalone \ -e SPRING_DATASOURCE_PLATFORM=mysql \ -e MYSQL_SERVICE_HOST=nacos-mysql \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_USER=nacos \ -e MYSQL_SERVICE_PASSWORD=nacos \ -e MYSQL_SERVICE_DB_NAME=nacos \ -e NACOS_AUTH_ENABLE=true \ nacos/nacos-server:2.2.34.2 集群模式部署
创建docker-compose.yml文件:
version: '3' services: nacos1: image: nacos/nacos-server:2.2.3 container_name: nacos1 ports: - "8848:8848" - "9848:9848" environment: - MODE=cluster - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=nacos-mysql - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_USER=nacos - MYSQL_SERVICE_PASSWORD=nacos - MYSQL_SERVICE_DB_NAME=nacos - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848 - NACOS_AUTH_ENABLE=true networks: - nacos_network nacos2: image: nacos/nacos-server:2.2.3 container_name: nacos2 ports: - "8849:8848" - "9849:9848" environment: - MODE=cluster - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=nacos-mysql - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_USER=nacos - MYSQL_SERVICE_PASSWORD=nacos - MYSQL_SERVICE_DB_NAME=nacos - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848 - NACOS_AUTH_ENABLE=true networks: - nacos_network nacos3: image: nacos/nacos-server:2.2.3 container_name: nacos3 ports: - "8850:8848" - "9850:9848" environment: - MODE=cluster - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=nacos-mysql - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_USER=nacos - MYSQL_SERVICE_PASSWORD=nacos - MYSQL_SERVICE_DB_NAME=nacos - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848 - NACOS_AUTH_ENABLE=true networks: - nacos_network networks: nacos_network: external: true5. 安全配置
5.1 认证配置
在application.properties中配置:
nacos.core.auth.enabled=true nacos.core.auth.system.type=nacos nacos.core.auth.plugin.nacos.token.secret.key=YourSecretKeyHere5.2 用户管理
通过API或控制台添加用户:
curl -X POST 'http://localhost:8848/nacos/v1/auth/users?username=admin&password=admin'6. 服务注册与发现
6.1 Spring Boot应用配置
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 spring.cloud.nacos.discovery.namespace=dev spring.cloud.nacos.discovery.group=DEFAULT_GROUP6.2 配置中心使用
spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.config.namespace=dev spring.cloud.nacos.config.group=DEFAULT_GROUP spring.cloud.nacos.config.file-extension=yaml7. 运维管理
7.1 健康检查
curl http://localhost:8848/nacos/v1/ns/operator/health7.2 监控指标
Nacos暴露的Prometheus指标端点:
http://localhost:8848/nacos/actuator/prometheus8. 常见问题解决
8.1 数据库连接问题
错误现象:No DataSource set解决方案:
- 检查MySQL服务是否正常运行
- 验证数据库连接参数是否正确
- 确认nacos数据库已初始化
8.2 认证失败问题
错误现象:user not found解决方案:
- 确认NACOS_AUTH_ENABLE=true
- 检查用户名密码是否正确
- 验证token.secret.key配置是否一致
8.3 集群节点通信问题
错误现象:Fail to connect node解决方案:
- 检查各节点NACOS_SERVERS配置
- 验证网络连通性
- 检查9848/9849端口是否开放
9. 性能优化建议
9.1 JVM参数调整
JAVA_OPT="${JAVA_OPT} -Xms2g -Xmx2g -Xmn1g" JAVA_OPT="${JAVA_OPT} -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"9.2 MySQL优化
- 为config_info表添加合适索引
- 调整InnoDB缓冲池大小
- 定期清理历史版本数据
10. 版本升级策略
10.1 1.x到2.x升级
- 备份数据库
- 逐步替换节点
- 验证服务兼容性
10.2 补丁版本升级
docker pull nacos/nacos-server:2.2.3 docker-compose down docker-compose up -d通过以上步骤,您可以快速搭建一个高可用的Nacos服务注册与配置中心。实际部署时请根据业务需求调整资源配置和安全策略。