Docker 单机与集群部署 Nacos2.2.0 全攻略

Docker 单机与集群部署 Nacos2.2.0 全攻略

Nacos 作为阿里巴巴开源的动态服务发现、配置和服务管理平台,自发布以来凭借其轻量级、高可用和易集成的特性,成为微服务架构中不可或缺的组件。Nacos2.2.0 版本在稳定性、性能及功能上进一步优化,支持更复杂的场景需求。本文将围绕 Docker 单机/集群部署 Nacos2.2.0 展开,提供从环境准备到运维优化的全流程指南,帮助开发者快速上手。

一、Docker 单机部署 Nacos2.2.0

1. 环境准备

  • Docker 安装:确保服务器已安装 Docker(建议版本 ≥20.10),可通过 docker --version 验证。
  • 资源要求:单机部署建议至少 2核4G 内存,避免因资源不足导致性能瓶颈。
  • 网络配置:开放 8848(默认服务端口)、9848(gRPC 端口)等关键端口。

2. 拉取 Nacos2.2.0 镜像

Nacos 官方提供了 Docker 镜像,可直接从 Docker Hub 拉取:

  1. docker pull nacos/nacos-server:v2.2.0

若需使用国内镜像源加速,可替换为阿里云镜像地址:

  1. docker pull registry.cn-hangzhou.aliyuncs.com/nacos-docker/nacos-server:v2.2.0

3. 启动单机模式

Nacos2.2.0 支持通过环境变量配置运行模式,单机模式启动命令如下:

  1. docker run -d \
  2. --name nacos-standalone \
  3. -p 8848:8848 \
  4. -e MODE=standalone \
  5. -e PREFER_HOST_MODE=hostname \
  6. nacos/nacos-server:v2.2.0

参数说明

  • -e MODE=standalone:指定单机模式。
  • -e PREFER_HOST_MODE=hostname:优先使用主机名作为服务标识。
  • -p 8848:8848:映射容器端口到宿主机。

4. 验证部署

访问 http://<宿主机IP>:8848/nacos,输入默认账号 nacos/nacos 登录控制台。若成功显示管理界面,则部署完成。

5. 数据持久化

默认情况下,Nacos 数据存储在容器内存中,重启后丢失。需挂载宿主机目录实现持久化:

  1. docker run -d \
  2. --name nacos-standalone \
  3. -p 8848:8848 \
  4. -e MODE=standalone \
  5. -v /data/nacos/logs:/home/nacos/logs \
  6. -v /data/nacos/data:/home/nacos/data \
  7. nacos/nacos-server:v2.2.0

关键路径

  • /home/nacos/logs:日志文件。
  • /home/nacos/data:配置及元数据。

二、Docker 集群部署 Nacos2.2.0

1. 集群架构设计

Nacos 集群建议至少 3 个节点,采用 主从复制+Raft 协议 保证数据一致性。节点间需通过内网互通,网络延迟建议 <10ms。

2. 准备集群配置文件

在宿主机创建 cluster.conf 文件,定义集群节点 IP 和端口(示例为 3 节点):

  1. 192.168.1.101:8848
  2. 192.168.1.102:8848
  3. 192.168.1.103:8848

注意事项

  • 确保 IP 可被其他节点访问。
  • 端口需与容器映射端口一致。

3. 启动集群节点

以节点 1(192.168.1.101)为例,启动命令如下:

  1. docker run -d \
  2. --name nacos-cluster-1 \
  3. -p 8848:8848 \
  4. -p 9848:9848 \
  5. -e MODE=cluster \
  6. -e NACOS_SERVERS="192.168.1.101:8848 192.168.1.102:8848 192.168.1.103:8848" \
  7. -v /data/nacos/cluster.conf:/home/nacos/conf/cluster.conf \
  8. -v /data/nacos/logs:/home/nacos/logs \
  9. nacos/nacos-server:v2.2.0

参数说明

  • -e MODE=cluster:指定集群模式。
  • -e NACOS_SERVERS:覆盖默认集群配置(可选,推荐通过 cluster.conf 配置)。
  • -v /data/nacos/cluster.conf:挂载集群配置文件。

其他节点需修改 NACOS_SERVERScluster.conf 中的 IP 列表。

4. 验证集群状态

登录任意节点控制台,进入 集群管理→节点列表,确认所有节点显示为 健康 状态。

三、高级配置与优化

1. 数据库集成(MySQL)

Nacos 默认使用嵌入式 Derby 数据库,生产环境建议替换为 MySQL:

  1. 创建 MySQL 数据库并执行 nacos-mysql.sql(位于镜像 /conf 目录)。
  2. 修改 application.properties 文件:
    1. spring.datasource.platform=mysql
    2. db.num=1
    3. db.url.0=jdbc:mysql://<MySQL_IP>:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
    4. db.user=<username>
    5. db.password=<password>
  3. 挂载配置文件至容器:
    1. -v /path/to/application.properties:/home/nacos/conf/application.properties

2. 性能调优

  • JVM 参数:通过 JAVA_OPT 环境变量调整堆内存,例如:
    1. -e JAVA_OPT="-Xms512m -Xmx512m -Xmn256m"
  • 线程池配置:修改 conf/nacos-server.properties 中的 nacos.core.protocol.raft.data.size 等参数。

3. 监控与告警

集成 Prometheus + Grafana 监控 Nacos 指标:

  1. 启用 Nacos 的 Prometheus 端点(默认已开启)。
  2. 配置 Prometheus 抓取 http://<Nacos_IP>:8848/nacos/actuator/prometheus
  3. 导入 Grafana 官方 Dashboard(ID:12888)。

四、常见问题与解决方案

1. 集群节点无法注册

  • 原因:网络不通或防火墙拦截。
  • 解决:检查节点间 telnet <IP> 8848 是否通畅,关闭防火墙或放行端口。

2. 数据不一致

  • 原因:节点时间不同步。
  • 解决:配置 NTP 服务同步时间。

3. 内存溢出

  • 原因:JVM 堆内存设置过小。
  • 解决:调整 JAVA_OPT 中的 -Xmx 参数(建议不低于 2G)。

五、总结与建议

  • 单机部署:适用于开发测试环境,强调快速启动和资源隔离。
  • 集群部署:生产环境必备,需规划高可用架构和灾备方案。
  • 持续优化:定期检查日志、监控指标,结合业务负载动态调整资源配置。

通过 Docker 部署 Nacos2.2.0 可显著降低环境搭建成本,结合集群模式更能满足企业级应用对可靠性的要求。建议开发者在实践过程中参考官方文档(Nacos GitHub),及时跟进版本更新。