保姆级教程:用Docker Compose一键部署Nacos 2.x,并持久化配置、日志和数据
从零构建高可用Nacos集群:Docker Compose全栈部署指南
引言:为什么选择Docker Compose部署Nacos?
在微服务架构盛行的今天,服务发现与配置中心已成为基础设施的关键组件。Nacos作为阿里巴巴开源的动态服务发现、配置和服务管理平台,凭借其轻量级、高可用和易扩展的特性,逐渐成为云原生时代的标配工具。然而,传统的手动部署方式往往面临环境不一致、配置复杂、维护困难等痛点。
Docker Compose作为容器编排的利器,能够通过声明式YAML文件定义多容器应用,完美解决上述问题。本教程将带您从零开始,用Docker Compose搭建一个生产级Nacos集群,实现配置、日志和数据的持久化存储,并集成MySQL数据库作为后端存储。相比原始的Docker run命令,Compose方案具有以下优势:
- 一键部署:单个命令即可启动整个Nacos生态系统
- 版本控制友好:YAML文件可纳入Git等版本控制系统
- 环境一致性:消除"在我机器上能运行"的问题
- 可扩展性:轻松调整实例数量和资源配置
1. 环境准备与前置条件
1.1 硬件与软件需求
在开始部署前,请确保您的系统满足以下最低要求:
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 2核 | 4核 |
| 内存 | 4GB | 8GB |
| 存储 | 20GB | 50GB |
| 操作系统 | Linux (CentOS 7+/Ubuntu 18.04+) | - |
| Docker | 20.10.0+ | 最新稳定版 |
| Docker Compose | 2.0.0+ | 最新稳定版 |
提示:生产环境建议使用SSD存储以提高数据库性能
1.2 安装必要工具
如果您的系统尚未安装Docker和Docker Compose,可执行以下命令:
# 安装Docker
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
验证安装是否成功:
docker --version
docker-compose --version
2. 构建Nacos集群架构
2.1 项目目录结构规划
合理的目录结构是维护性的基础,建议按以下方式组织:
nacos-cluster/
├── docker-compose.yml # 主编排文件
├── .env # 环境变量配置
├── mysql/
│ ├── conf.d/ # MySQL自定义配置
│ ├── initdb.d/ # 初始化SQL脚本
│ └── data/ # 数据库持久化数据
└── nacos/
├── conf/ # Nacos配置文件
├── logs/ # 日志目录
└── data/ # 临时数据存储
创建基础目录:
mkdir -p nacos-cluster/{mysql/{conf.d,initdb.d,data},nacos/{conf,logs,data}}
2.2 MySQL数据库配置
Nacos支持多种数据库,我们选择MySQL作为持久化存储。在mysql/initdb.d目录下创建nacos-init.sql:
CREATE DATABASE IF NOT EXISTS nacos_config CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE nacos_config;
-- 以下是Nacos官方提供的建表语句
-- 来源:https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql
-- 此处应包含完整的建表语句,限于篇幅省略具体内容
在mysql/conf.d目录下创建custom.cnf优化MySQL配置:
[mysqld]
default_authentication_plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=1000
innodb_buffer_pool_size=1G
2.3 Docker Compose核心配置
创建docker-compose.yml文件,这是整个部署的核心:
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: nacos-mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: nacos_config
TZ: Asia/Shanghai
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/conf.d:/etc/mysql/conf.d
- ./mysql/initdb.d:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 10s
retries: 10
networks:
- nacos-net
nacos:
image: nacos/nacos-server:${NACOS_VERSION}
container_name: nacos-server
depends_on:
mysql:
condition: service_healthy
environment:
- MODE=standalone
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=mysql
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_SERVICE_DB_NAME=nacos_config
- JVM_XMS=512m
- JVM_XMX=512m
volumes:
- ./nacos/logs:/home/nacos/logs
- ./nacos/data:/home/nacos/data
- ./nacos/conf:/home/nacos/conf
ports:
- "8848:8848"
- "9848:9848"
restart: always
networks:
- nacos-net
networks:
nacos-net:
driver: bridge
创建.env环境变量文件:
# MySQL配置
MYSQL_ROOT_PASSWORD=your_secure_password
# Nacos配置
NACOS_VERSION=2.2.3
3. 部署与验证
3.1 启动Nacos集群
执行以下命令启动整个服务栈:
cd nacos-cluster
docker-compose up -d
观察日志确认服务正常启动:
docker-compose logs -f nacos
3.2 访问与基础配置
服务启动后,通过浏览器访问:
http://<your-server-ip>:8848/nacos
默认登录凭证:
- 用户名:nacos
- 密码:nacos
首次登录后,建议立即修改管理员密码:
- 点击右上角用户图标
- 选择"修改密码"
- 输入新密码并确认
3.3 防火墙配置
如果系统启用了防火墙,需要开放相关端口:
sudo firewall-cmd --permanent --add-port=8848/tcp
sudo firewall-cmd --permanent --add-port=9848/tcp
sudo firewall-cmd --reload
4. 高级配置与优化
4.1 Nacos配置文件定制
Nacos的核心配置文件是application.properties,我们可以通过挂载方式自定义配置。在nacos/conf目录下创建该文件:
# 服务器配置
server.servlet.contextPath=/nacos
server.port=8848
# 认证配置
nacos.core.auth.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
# 数据库配置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://mysql:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=${MYSQL_ROOT_PASSWORD}
4.2 JVM内存调优
对于生产环境,建议调整Nacos的JVM参数。修改.env文件:
# JVM配置
JVM_XMS=2g
JVM_XMX=2g
JVM_XMN=1g
然后在docker-compose.yml中更新nacos服务的environment部分:
environment:
- JVM_XMS=${JVM_XMS}
- JVM_XMX=${JVM_XMX}
- JVM_XMN=${JVM_XMN}
4.3 日志配置优化
Nacos使用Logback记录日志,我们可以自定义日志级别和输出格式。创建nacos/conf/logback-spring.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property name="LOG_PATH" value="/home/nacos/logs"/>
<property name="LOG_FILE" value="nacos.log"/>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/nacos-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} | %-5level | %thread | %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="FILE"/>
</root>
</configuration>
4.4 定期备份策略
为确保数据安全,建议设置定期备份。创建备份脚本backup_nacos.sh:
#!/bin/bash
BACKUP_DIR="/opt/backups/nacos"
DATE=$(date +%Y%m%d)
# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE
# 备份MySQL数据
docker exec nacos-mysql mysqldump -uroot -p"${MYSQL_ROOT_PASSWORD}" nacos_config > $BACKUP_DIR/$DATE/nacos-mysql.sql
# 备份Nacos配置
tar -czf $BACKUP_DIR/$DATE/nacos-conf.tar.gz -C ./nacos/conf .
tar -czf $BACKUP_DIR/$DATE/nacos-data.tar.gz -C ./nacos/data .
# 保留最近7天备份
find $BACKUP_DIR -type d -mtime +7 | xargs rm -rf
设置定时任务(每天凌晨2点执行):
chmod +x backup_nacos.sh
(crontab -l ; echo "0 2 * * * /path/to/backup_nacos.sh") | crontab -
5. 常见问题排查
5.1 容器启动失败
如果Nacos容器无法启动,首先检查日志:
docker-compose logs nacos
常见问题及解决方案:
- 数据库连接失败:确认MySQL服务已正常启动,检查连接参数是否正确
- 权限问题:确保挂载目录对容器用户可写(Nacos默认使用nacos用户,UID=1000)
- 端口冲突:确认8848和9848端口未被其他服务占用
5.2 性能优化建议
当Nacos响应变慢时,可考虑以下优化措施:
-
数据库优化:
- 为nacos_config数据库添加适当索引
- 定期执行
OPTIMIZE TABLE维护 - 考虑使用读写分离架构
-
Nacos配置调整:
# 增加工作线程数 server.tomcat.max-threads=200 # 调整心跳间隔 nacos.core.raft.election.timeout.ms=5000 -
资源扩容:
- 增加容器内存分配
- 为MySQL单独部署更高性能的服务器
5.3 版本升级策略
升级Nacos版本时的推荐步骤:
- 备份所有数据和配置
- 修改
.env中的NACOS_VERSION - 执行滚动更新:
docker-compose pull docker-compose up -d - 验证新版本功能正常
注意:跨大版本升级(如1.x到2.x)可能需要执行额外的数据迁移步骤,请参考官方升级指南
更多推荐
所有评论(0)