9.2.7 集群扩缩容与滚动升级

在生产环境中,Nacos集群扩缩容与滚动升级需兼顾可用性、配置一致性与客户端稳定性。核心原则是“先扩后迁、先迁后缩、分批滚动”。扩缩容与升级前请先完成容量评估与变更窗口确认,并准备回滚方案。

文章图片

扩容:新增节点加入集群(示例)#

前提:新节点与现有节点同版本、同配置模板;数据库已就绪;网络互通。

1) 准备新节点配置(/opt/nacos/conf/application.properties

# 关键配置:集群地址与数据库
server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://10.0.0.10:3306/nacos?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
db.user=nacos
db.password=StrongPassw0rd

# 集群列表(必须包含所有节点含新节点)
nacos.inetutils.preferred-networks=10.0.0.

2) 配置集群节点列表(/opt/nacos/conf/cluster.conf

cat > /opt/nacos/conf/cluster.conf <<'EOF'
10.0.0.11:8848
10.0.0.12:8848
10.0.0.13:8848
10.0.0.14:8848
EOF

3) 启动新节点并验证健康

/opt/nacos/bin/startup.sh
sleep 10
curl -s "http://10.0.0.14:8848/nacos/actuator/health" | jq

预期效果statusUP,并能看到 db 连接正常。

4) 逐步引流(以 Nginx 为例)

upstream nacos_cluster {
    server 10.0.0.11:8848 weight=1;
    server 10.0.0.12:8848 weight=1;
    server 10.0.0.13:8848 weight=1;
    server 10.0.0.14:8848 weight=0; # 先不承载
}

引流热身后调整权重:

server 10.0.0.14:8848 weight=1;

解释:新节点权重从 0 到 1,避免冷启动瞬时流量倾斜。

缩容:下线节点(示例)#

1) 将待下线节点从负载均衡中摘除

# 将 10.0.0.12 权重置 0
server 10.0.0.12:8848 weight=0;

2) 观察客户端连接与服务实例迁移情况

# 查看健康与注册数变化
curl -s "http://10.0.0.11:8848/nacos/actuator/metrics" | grep -E "nacos_config|nacos_naming"

3) 停止服务并从集群列表移除

/opt/nacos/bin/shutdown.sh
sed -i '/10.0.0.12:8848/d' /opt/nacos/conf/cluster.conf

注意:确保该节点不再承载配置发布与服务发现流量。

滚动升级:分批替换(示例流程)#

升级前:备份数据库与配置。

# MySQL 备份
mysqldump -h10.0.0.10 -unacos -p nacos > /backup/nacos_$(date +%F).sql

# 备份配置
tar -czf /backup/nacos_conf_$(date +%F).tgz /opt/nacos/conf

单节点滚动升级示例

# 1. 摘除流量(LB/Ingress 操作)
# 2. 停止服务
/opt/nacos/bin/shutdown.sh

# 3. 替换版本
mv /opt/nacos /opt/nacos_bak_$(date +%F)
tar -xzf nacos-server-2.3.2.tar.gz -C /opt
mv /opt/nacos /opt/nacos-2.3.2
ln -sfn /opt/nacos-2.3.2 /opt/nacos

# 4. 还原配置
tar -xzf /backup/nacos_conf_$(date +%F).tgz -C /

# 5. 启动并验证
/opt/nacos/bin/startup.sh
curl -s "http://10.0.0.11:8848/nacos/actuator/health"

升级验证指标建议

# 注册成功率、心跳与推送失败
curl -s "http://10.0.0.11:8848/nacos/actuator/metrics" | grep -E "nacos_naming|nacos_config"

常见问题与排错(示例)#

1) 新节点无法加入集群

# 检查集群列表是否一致
diff /opt/nacos/conf/cluster.conf <(ssh 10.0.0.11 "cat /opt/nacos/conf/cluster.conf")

原因:cluster.conf 不一致或网络不通。

2) 数据库连接失败

grep -E "db.url|db.user" /opt/nacos/conf/application.properties
telnet 10.0.0.10 3306

原因:数据库账号、密码、网络或权限问题。

3) 滚动升级后配置发布异常

# 查看日志
tail -n 200 /opt/nacos/logs/nacos.log

原因:版本不兼容或数据库结构未升级。

练习与演练建议#

1) 扩容演练:新增一台节点,权重从 0 提升到 1,观察注册数与推送延迟变化。
2) 缩容演练:下线一台节点,验证配置发布是否正常。
3) 升级演练:单节点滚动升级并执行回滚。
4) 回滚练习:恢复备份配置与旧版本,确认服务恢复。