Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Nacos 集群

下面是一套 生产级、可直接落地的 Nacos 集群方案,从架构 -> 安装 -> 配置 -> MySQL -> Nginx -> 健康检查 -> 性能优化 -> 故障排查,一站式完整整理。

1. Nacos 集群架构

生产环境推荐 3 节点或 5 节点。架构如下:

              +-----------------------+
              |       Client          |
              +----------+------------+
                         |
                         v
               +---------+----------+
               |    Nginx/LB        |
               +----+----+----+-----+
                    |    |    |
         +----------+    |    +-----------+
         |               |                |
         v               v                v
 +--------------+ +--------------+ +--------------+
 |  Nacos Node1 | |  Nacos Node2 | |  Nacos Node3 |
 +-------+------+ +-------+------+ +-------+------+
         |                |                 |
         +----------------+-----------------+
                          |
                          v
                  +---------------+
                  |    MySQL      |
                  +---------------+

2. 环境准备

项目 推荐
操作系统 CentOS 7+ / Ubuntu 20+
JDK 17(最低 8)
Nacos 2.2.x / 2.3.x
MySQL 5.7 / 8.0(推荐)
节点数 3 个
服务端口 8848 HTTP / 9848 RPC / 7848 节点间通信

3. MySQL 初始化(所有节点共享)

3.1 创建数据库

CREATE DATABASE nacos CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

3.2 导入初始化结构

在 nacos 解压目录中:

conf/nacos-mysql.sql

执行:

mysql nacos < nacos-mysql.sql

4. 下载并解压 Nacos

wget https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.tar.gz
tar -zxvf nacos-server-2.3.0.tar.gz
cd nacos/bin

5. 配置 Nacos 集群

进入 conf 目录:

cd nacos/conf

5.1 修改 application.properties

修改数据库连接:

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://192.168.10.20:3306/nacos?connectTimeout=1000&socketTimeout=3000&autoReconnect=true&characterEncoding=utf8&useSSL=false
db.user=nacos
db.password=123456

5.2 配置 cluster.conf

创建:

cp cluster.conf.example cluster.conf

内容(使用实际服务器 IP):

192.168.10.11:8848
192.168.10.12:8848
192.168.10.13:8848

必须使用 内网 IP,不要写 127.0.0.1。

6. 启动集群

在每个节点上执行:

cd nacos/bin
./startup.sh -m cluster

查看日志:

tail -f logs/start.out

检查状态:

[main] Nacos started successfully in cluster

7. 配置 Nginx 负载均衡(推荐)

upstream nacos {
    server 192.168.10.11:8848;
    server 192.168.10.12:8848;
    server 192.168.10.13:8848;
}

server {
    listen 8848;

    location /nacos/ {
        proxy_pass http://nacos/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

访问:

http://nginx-ip:8848/nacos

8. Nacos 集群验证

访问:

GET http://nginx-ip:8848/nacos/v1/ns/operator/servers

你应该能看到 3 个节点:

{
  "servers": [
    {"ip":"192.168.10.11","state":"UP"},
    {"ip":"192.168.10.12","state":"UP"},
    {"ip":"192.168.10.13","state":"UP"}
  ]
}

9. Nacos 集群健康检查(重要)

Nacos 有两个关键端口:

端口 含义
8848 HTTP API & Console
9848 gRPC 客户端注册通信
7848 集群内部节点通信

要确保:

  • 三节点间 78489848 能互通(关键!!!)
  • 客户端能访问 9848(否则注册失败)

10. JVM & 性能优化(生产建议)

编辑:bin/startup.sh 或环境变量:

export JVM_XMS=4g
export JVM_XMX=4g
export JVM_XMN=1g
export JVM_MS=128m
export JVM_MMS=320m

Linux 内核参数优化:

sysctl -w net.ipv4.tcp_keepalive_time=300
sysctl -w fs.file-max=655350

11. 常见问题与解决方案

① “节点不在集群中”

多为端口 7848 未打通

telnet 192.168.10.12 7848

② 配置中心不刷新

  • 客户端连的是某个单节点 -> 必须连接 LB
  • 消息推送 port 9848 未开放

③ 服务注册失败

多为 gRPC 端口未开:

telnet nacos 9848

④ 集群不稳定

  • MySQL 无连接池调优
  • 节点 JVM 太小(默认仅 512m)
  • 垃圾回收阻塞 -> 修改 GC 为 G1

12. Nacos 集群最佳实践(总结)

1)最少 3 节点,多为奇数

保证选举不会脑裂。

2)必须使用 MySQL 存储配置

单机模式只能内存存储,不可用于生产。

3)客户端必须接入负载均衡

不要写单节点地址 -> 会导致注册不一致。

4)不要混用不同版本节点

一定要统一版本。

5)开启鉴权 Auth

生产不能裸奔。