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_hashbalance 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. 压力验证:使用 abwrk 验证均衡分布与响应稳定性。
    bash ab -n 1000 -c 50 http://nacos.example.com/nacos/actuator/health

通过上述拓扑、配置与演练,确保 Nacos 集群在节点故障、LB 切换与高并发下仍保持注册与配置服务的连续性。