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
预期效果:status 为 UP,并能看到 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) 回滚练习:恢复备份配置与旧版本,确认服务恢复。