9.2.6 负载均衡与高可用接入
负载均衡与高可用接入是 Nacos 集群对外稳定服务的关键环节,需明确接入层拓扑、健康检查、会话与鉴权透传,并通过演练验证切换效果。
- 原理与接入拓扑草图
- 健康检查与节点状态验证
- 常用健康检查路径(以版本为准):
/nacos/actuator/health - 验证命令与预期结果:
# 检查单节点健康
curl -sS http://10.0.0.11:8848/nacos/actuator/health
# 预期输出: {"status":"UP"} 或类似健康状态
# 检查集群节点列表(旧版接口)
curl -sS "http://10.0.0.11:8848/nacos/v1/ns/operator/servers"
# 预期输出包含各节点IP与状态
- Nginx 负载均衡接入示例(完整配置)
- 文件路径:
/etc/nginx/conf.d/nacos.conf - 配置说明:轮询、健康失败阈值、超时与重试策略
upstream nacos_cluster {
server 10.0.0.11:8848 max_fails=3 fail_timeout=10s;
server 10.0.0.12:8848 max_fails=3 fail_timeout=10s;
server 10.0.0.13:8848 max_fails=3 fail_timeout=10s;
# 可选:ip_hash; # 需要会话粘性时启用
}
server {
listen 80;
server_name nacos.example.com;
location / {
proxy_pass http://nacos_cluster;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 3s;
proxy_read_timeout 30s;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
}
}
# 检查语法并重载
nginx -t
nginx -s reload
# 访问验证
curl -sS http://nacos.example.com/nacos/actuator/health
- HAProxy 负载均衡接入示例(含 HTTP 健康检查)
- 文件路径:
/etc/haproxy/haproxy.cfg - 说明:HTTP 模式、轮询策略、健康探测路径
global
maxconn 20000
defaults
mode http
timeout connect 3s
timeout client 30s
timeout server 30s
frontend nacos_in
bind *:80
default_backend nacos_back
backend nacos_back
balance roundrobin
option http-keep-alive
option httpchk GET /nacos/actuator/health
http-check expect status 200
server nacos1 10.0.0.11:8848 check inter 3s fall 3 rise 2
server nacos2 10.0.0.12:8848 check inter 3s fall 3 rise 2
server nacos3 10.0.0.13:8848 check inter 3s fall 3 rise 2
# 启动/重载
systemctl restart haproxy
systemctl status haproxy -l
- Keepalived VIP 高可用示例(双机热备)
- 主节点:
/etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 120
advert_int 1
virtual_ipaddress {
10.0.0.100/24
}
}
- 备节点(priority 低):
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
virtual_ipaddress {
10.0.0.100/24
}
}
# 启动并验证 VIP 漂移
systemctl restart keepalived
ip addr show eth0 | grep 10.0.0.100
- 会话与鉴权透传
- 建议客户端只配置 VIP 或 LB 域名,不直连节点。
- 若启用 Nacos 鉴权,需确保 LB 透传 Header/Cookie。
-
老版本 SDK 如出现短连接抖动,可启用会话保持(
ip_hash或balance source)。 -
故障排错与常见问题
- 健康检查失败导致节点被摘除
- 排查命令:
curl -i http://10.0.0.11:8848/nacos/actuator/health
tail -f /usr/local/nacos/logs/nacos.log
- LB 单点导致整体不可用
- 通过 VIP 或双活 LB 规避;验证 VIP 在主机故障时漂移:
# 关闭主LB验证漂移
systemctl stop keepalived
# 在备机查看VIP是否接管
ip addr show eth0 | grep 10.0.0.100
-
连接超时或重试放大
- 检查 LB 超时参数与 SDK 重试策略,避免重试风暴。
-
演练与练习
1. 节点故障演练:停止一台 Nacos 节点,验证 LB 不影响服务。
bash systemctl stop nacos curl -sS http://nacos.example.com/nacos/actuator/health
2. LB 故障切换:停止主 LB 的 Keepalived,观察 VIP 漂移。
3. 压力验证:使用ab或wrk验证均衡分布与响应稳定性。
bash ab -n 1000 -c 50 http://nacos.example.com/nacos/actuator/health
通过上述拓扑、配置与演练,确保 Nacos 集群在节点故障、LB 切换与高并发下仍保持注册与配置服务的连续性。