nacos集群部署

Nacos集群完整部署教程(生产级高可用)

一、集群部署核心原则与架构

Nacos 集群是微服务架构的核心基础设施,需遵循以下黄金法则:

  1. 节点要求:至少 3 个节点(推荐奇数,适配 Raft 选主协议)

  2. 数据持久化:生产环境禁用内置 Derby,强制使用 MySQL 5.6.5+

  3. 网络架构:节点间内网通信,客户端通过 VIP/SLB + 域名访问(避免直连 IP)

  4. 端口规划:必须开放 3 类端口(默认配置)

  • 8848:HTTP 服务端口(客户端 / 控制台访问)

  • 7848:Raft 协议通信端口(节点间数据同步)

  • 9848/9849:gRPC 端口(客户端 - 服务端 / 服务端 - 服务端通信)

二、环境准备

2.1 基础环境要求

组件 版本要求 说明
操作系统 Linux/Unix/Mac(64 位) 推荐 CentOS 7+/Ubuntu 18+
JDK 1.8+(64 位) 需配置 JAVA_HOME 环境变量
MySQL 5.6.5+ / 8.0+ 建议主从架构提升可用性
服务器配置 2 核 4G 以上 / 节点 生产环境推荐 4 核 8G
网络要求 节点间内网互通 关闭防火墙或开放指定端口

2.2 服务器规划示例(3 节点集群)

节点 IP 端口 角色 部署路径
192.168.10.11 8848 候选 Leader /opt/nacos-node1
192.168.10.12 8848 Follower /opt/nacos-node2
192.168.10.13 8848 Follower /opt/nacos-node3

三、部署步骤(MySQL 方案,推荐生产使用)

3.1 数据库初始化(关键步骤)

  1. 创建数据库与用户
-- 1. 创建数据库(字符集必须为utf8mb4)

CREATE DATABASE nacos_prod CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 2. 创建专用用户(生产环境限制IP访问)

CREATE USER 'nacos'@'192.168.10.%' IDENTIFIED BY 'StrongPass@2025';

GRANT ALL PRIVILEGES ON nacos_prod.* TO 'nacos'@'192.168.10.%';

FLUSH PRIVILEGES;
  1. 初始化表结构
  • 从 Nacos 安装包中获取 SQL 脚本:nacos/conf/nacos-mysql.sql

  • 执行脚本:source /path/to/nacos-mysql.sql(需在 nacos_prod 库中执行)

3.2 下载与解压 Nacos

# 下载稳定版(以2.4.0为例)

wget https://github.com/alibaba/nacos/releases/download/2.4.0/nacos-server-2.4.0.tar.gz

# 解压到各节点指定路径(3个节点均执行)

tar -zxvf nacos-server-2.4.0.tar.gz -C /opt/

mv /opt/nacos /opt/nacos-node1  # 节点1示例,其他节点对应修改

3.3 配置集群节点列表

  1. 在每个节点的conf目录下创建 / 修改cluster.conf文件:
vi /opt/nacos-node1/conf/cluster.conf
  1. 添加所有集群节点(IP: 端口,一行一个):
192.168.10.11:8848

192.168.10.12:8848

192.168.10.13:8848

⚠️ 注意:所有节点的cluster.conf内容必须完全一致,末尾不能有空行

3.4 修改核心配置文件(application.properties)

编辑每个节点的conf/application.properties,添加以下配置:

# 1. 数据源配置(MySQL)

spring.sql.init.platform=mysql

db.num=1

db.url.0=jdbc:mysql://192.168.10.20:3306/nacos_prod?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false

db.user.0=nacos

db.password.0=StrongPass@2025

# 2. 启用鉴权(生产环境必开)

nacos.core.auth.enabled=true

nacos.core.auth.system.type=nacos

# 自定义密钥(必须更换,所有节点保持一致)

nacos.core.auth.plugin.nacos.token.secret.key=YourCustomSecretKey1234567890abcdef

nacos.core.auth.server.identity.key=prod-nacos

nacos.core.auth.server.identity.value=prod-2025-key

# 3. JVM参数优化(可选,根据服务器配置调整)

JAVA_OPT_EXT="-Xms2g -Xmx2g -XX:+UseG1GC -Djava.net.preferIPv4Stack=true"

3.5 启动集群

  1. 在每个节点执行启动命令:
# Linux/Mac

cd /opt/nacos-node1/bin

sh startup.sh -m cluster

# Windows(管理员身份运行)

cd D:\nacos-node1\bin

startup.cmd -m cluster
  1. 验证启动状态:
# 查看日志(确认无报错)

tail -f /opt/nacos-node1/logs/start.out

✅ 成功标志:日志中出现Nacos started successfully in cluster mode.

3.6 控制台验证

  1. 访问任意节点控制台:http://192.168.10.11:8848/nacos

  2. 默认账号密码:nacos/nacos(首次登录后立即修改)

  3. 验证集群状态:进入「集群管理」→「节点列表」,应显示 3 个健康节点(绿色)

四、负载均衡配置(Nginx 示例)

为避免客户端直连节点,推荐通过 Nginx 反向代理访问集群:

http {

   upstream nacos-cluster {

       server 192.168.10.11:8848;

       server 192.168.10.12:8848;

       server 192.168.10.13:8848;

       ip_hash;  # 保持会话一致性

   }

   server {

       listen 80;

       server_name nacos.prod.example.com;  # 自定义域名

       location / {

           proxy_pass http://nacos-cluster;

           proxy_set_header Host $host;

           proxy_set_header X-Real-IP $remote_addr;

       }

   }

}

⚠️ 注意:若使用 SLB(负载均衡器),需配置 TCP 转发,且仅开放内网访问(禁止暴露公网)

五、常见问题与故障排查

5.1 集群无法选主(Leader 选举失败)

现象:节点一直处于 FOLLOWER 状态,日志报错No leader is available

解决方案

  1. 检查cluster.conf一致性:md5sum /opt/nacos/conf/cluster.conf(所有节点需相同)

  2. 验证端口连通性:telnet ``192.168.10.12`` 7848(确保 7848/8848 端口开放)

  3. 同步系统时间:部署 NTP 服务,确保节点时间偏差 < 500ms

# 安装NTP(CentOS示例)

yum install -y ntp

systemctl start ntpd

timedatectl set-ntp on

5.2 配置数据丢失

现象:重启 Nacos 后配置消失

原因:未正确配置 MySQL,仍使用内置 Derby 数据库

解决方案

  1. 检查数据库连接:查看logs/nacos.log是否有Connected to MySQL日志

  2. 验证 MySQL 权限:确保 nacos 用户有INSERT/UPDATE权限

  3. 重新初始化 SQL 脚本:确认nacos_prod库中存在config_info等表

5.3 节点间通信失败

现象:日志报错gRPC connection brokenCannot connect to peer

解决方案

  1. 检查防火墙规则:开放 7848(Raft)、9849(服务端 gRPC)端口

  2. 统一配置格式:cluster.conf中仅使用内网 IP,避免混合 hostname 和 IP

  3. 优化 gRPC 连接:在application.properties中添加

nacos.core.grpc.server.keepalive.timeout=60s

nacos.core.grpc.server.keepalive.interval=30s

六、生产环境最佳实践

  1. 数据备份:定期备份 MySQL 数据库(开启 binlog 用于数据恢复)

  2. 监控告警:集成 Prometheus+Grafana,监控节点状态、JVM GC、连接数等指标

  3. 扩容策略:新增节点时,需更新所有节点的cluster.conf并重启

  4. 权限管理:修改默认账号密码,限制控制台访问 IP,开启 HTTPS 加密传输

  5. 日志轮转:配置日志切割(避免单个日志文件过大),保留 30 天日志

posted @ 2025-12-14 19:07  圣祖帝皇  阅读(0)  评论(0)    收藏  举报