Nacos 集群部署
单机 Nacos 挂了,整个微服务体系都会"失联",生产环境至少要 3 节点成集群,前面再挂一层负载均衡。本章以 2.x 为例讲部署步骤与验证。
集群架构
推荐架构是三部分:Nacos 服务端集群、共享 MySQL、前置负载均衡:
客户端 / SDK
│
Nginx / SLB(负载均衡,对外 8848)
│
Nacos 节点1(8848) ─ 节点2(8848) ─ 节点3(8848) # 通过 cluster.conf 互相发现
└──────────────┬───────────────┘
共享 MySQL(所有节点连同一实例)
前置准备
- 三台机器(或容器),统一系统时钟,节点间网络互通
- 放行端口 8848(HTTP)与 9848(gRPC),本机防火墙、云安全组都要开
- 每节点安装并解压 nacos-server(版本保持一致),先接好 MySQL(见第 11 章)
每节点接入 MySQL
集群模式不要用内嵌 Derby,每个节点把 conf/application.properties 指向同一个 MySQL:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.1.100:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=nacos
db.password.0=你的数据库密码
配置节点列表 cluster.conf
在每节点的 conf/cluster.conf 里写全集群节点地址,一行一个,内容三台机器完全一致:
cat > /opt/nacos/conf/cluster.conf <<EOF
192.168.1.11
192.168.1.12
192.168.1.13
EOF
节点启动时会按该文件自动发现彼此(端口取默认 8848,无需写在行内)。若机器有多个网卡、Nacos 选错了对外 IP,可加启动参数指定:
sh startup.sh -Dnacos.serverIP=192.168.1.11 # 每台填自己的对外 IP
启动与验证
三个节点都用正常模式启动(不要加 -m standalone):
cd /opt/nacos/bin
sh startup.sh
# 等待后观察日志出现成功输出
tail -f /opt/nacos/logs/start.out
验证从两处看:控制台"集群管理 → 节点列表"应能看到 3 个节点且状态正常;命令行探活每个节点:
curl -s http://192.168.1.11:8848/nacos/actuator/health
# 输出示例:{"status":"UP","components":{...}} status 为 UP 表示节点健康
配置负载均衡
客户端只连负载均衡地址,由它把请求分发到各节点:
upstream nacos_cluster {
server 192.168.1.11:8848;
server 192.168.1.12:8848;
server 192.168.1.13:8848;
}
server {
listen 8848;
location /nacos/ {
proxy_pass http://nacos_cluster;
}
}
负载均衡的健康检查建议探测 /nacos/actuator/health(正常返回 status=UP、HTTP 200),只把流量导给存活节点。
升级与滚动重启
- 一次只重启一个节点,其余两个继续服务,避免集群短暂不可用
- 升级前备份 MySQL(配置与持久实例数据都在库里)与 conf 目录
- 跨大版本升级前阅读官方升级说明,必要时先小版本逐级升
小结
集群部署五步走:3 节点装好并连同一 MySQL → cluster.conf 写好节点列表 → 正常模式启动并到"集群管理"确认节点齐 → Nginx/SLB 前置做负载均衡 → 用 /nacos/actuator/health 做健康检查。之后单节点故障就不影响整体注册与配置服务了。