Nacos 集群
下面是一套 生产级、可直接落地的 Nacos 集群方案,从架构 -> 安装 -> 配置 -> MySQL -> Nginx -> 健康检查 -> 性能优化 -> 故障排查,一站式完整整理。
生产环境推荐 3 节点或 5 节点。架构如下:
+-----------------------+
| Client |
+----------+------------+
|
v
+---------+----------+
| Nginx/LB |
+----+----+----+-----+
| | |
+----------+ | +-----------+
| | |
v v v
+--------------+ +--------------+ +--------------+
| Nacos Node1 | | Nacos Node2 | | Nacos Node3 |
+-------+------+ +-------+------+ +-------+------+
| | |
+----------------+-----------------+
|
v
+---------------+
| MySQL |
+---------------+
| 项目 | 推荐 |
|---|---|
| 操作系统 | 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 节点间通信 |
CREATE DATABASE nacos CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
在 nacos 解压目录中:
conf/nacos-mysql.sql
执行:
mysql nacos < nacos-mysql.sql
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
进入 conf 目录:
cd nacos/conf
修改数据库连接:
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
创建:
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。
在每个节点上执行:
cd nacos/bin
./startup.sh -m cluster
查看日志:
tail -f logs/start.out
检查状态:
[main] Nacos started successfully in cluster
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
访问:
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"}
]
}
Nacos 有两个关键端口:
| 端口 | 含义 |
|---|---|
| 8848 | HTTP API & Console |
| 9848 | gRPC 客户端注册通信 |
| 7848 | 集群内部节点通信 |
要确保:
- 三节点间 7848、9848 能互通(关键!!!)
- 客户端能访问 9848(否则注册失败)
编辑: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
① “节点不在集群中”
多为端口 7848 未打通
telnet 192.168.10.12 7848
② 配置中心不刷新
- 客户端连的是某个单节点 -> 必须连接 LB
- 消息推送 port 9848 未开放
③ 服务注册失败
多为 gRPC 端口未开:
telnet nacos 9848
④ 集群不稳定
- MySQL 无连接池调优
- 节点 JVM 太小(默认仅 512m)
- 垃圾回收阻塞 -> 修改 GC 为 G1
保证选举不会脑裂。
单机模式只能内存存储,不可用于生产。
不要写单节点地址 -> 会导致注册不一致。
一定要统一版本。
生产不能裸奔。