温馨提示×

Ubuntu如何实现负载均衡

小樊
33
2025-12-20 06:25:22
栏目: 云计算

Ubuntu实现负载均衡的实用方案

一、方案总览与选型

  • 四层高性能分发:使用内核级 LVS(IPVS),适合 TCP/UDP 高并发、低延迟场景,常见模式有 DR、NAT、TUN。可配合 Keepalived 做主备与 VIP 漂移,消除单点故障。
  • 七层灵活路由:使用 NginxHAProxy,支持 HTTP/HTTPS/TCP 负载均衡、内容路由、健康检查、限流与 WAF 集成,部署与运维简单。
  • 高可用控制面:用 Keepalived 提供 VRRP 虚拟IP与故障切换;对 HAProxy 也可采用 Corosync+Pacemaker 的集群方案。
  • 入口安全与统一接入:在负载均衡器上做 SSL/TLS 终止、隐藏后端拓扑、统一认证与日志审计。
  • 基础网络冗余:如需提升链路可靠性,可在服务器侧做 网卡绑定(bonding),但需注意 bonding 解决的是“链路冗余/聚合”,并非应用流量分发。

二、快速上手示例

  • 示例一 Nginx 七层负载均衡(HTTP)

    1. 安装:sudo apt update && sudo apt install nginx -y
    2. 配置 /etc/nginx/conf.d/lb.conf:
    upstream backend {
        least_conn;
        server 10.0.1.11:80 max_fails=3 fail_timeout=30s;
        server 10.0.1.12:80 max_fails=3 fail_timeout=30s;
    }
    server {
        listen 80;
        server_name app.example.com;
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    
    1. 生效:sudo nginx -t && sudo systemctl reload nginx
      说明:Nginx 支持轮询、最少连接、IP 哈希、一致性哈希等算法,可按 URL、Header、Cookie 做细粒度路由。
  • 示例二 HAProxy 四层/七层负载均衡

    1. 安装:sudo apt update && sudo apt install haproxy -y
    2. 配置 /etc/haproxy/haproxy.cfg(HTTP 示例):
    global
        log /dev/log local0
        daemon
        maxconn 4096
    
    defaults
        log global
        mode http
        timeout connect 5s
        timeout client  50s
        timeout server  50s
    
    frontend http-in
        bind *:80
        default_backend web-backend
    
    backend web-backend
        balance roundrobin
        option httpchk GET /health
        server web1 10.0.1.11:80 check
        server web2 10.0.1.12:80 check
    
    1. 生效:sudo systemctl restart haproxy
      说明:HAProxy 对 HTTP/TCP 都友好,支持丰富的健康检查与统计页面,适合做业务网关。

三、高可用部署模式

  • LVS + Keepalived(四层 + VIP 漂移)

    • 两台负载均衡器共享 VIP(如 192.168.226.150),主节点故障自动切换至备节点。
    • 示例要点(Keepalived 配置片段):
      vrrp_instance VI_1 {
          state MASTER
          interface eth0
          virtual_router_id 51
          priority 120
          advert_int 1
          authentication { auth_type PASS; auth_pass 1111 }
          virtual_ipaddress { 192.168.226.150 }
      }
      virtual_server 192.168.226.150 80 {
          delay_loop 6
          lb_algo wrr
          lb_kind DR
          protocol TCP
          real_server 10.0.1.11 80 { weight 1; TCP_CHECK { connect_timeout 8; retry 3; } }
          real_server 10.0.1.12 80 { weight 1; TCP_CHECK { connect_timeout 8; retry 3; } }
      }
      
    • 真实服务器(DR 模式)需配置 lo:0 绑定 VIP 并调 ARP 参数,避免响应冲突。
  • Nginx/HAProxy + Keepalived(七层 + VIP 漂移)

    • 两台七层负载均衡器运行 Nginx/HAProxy,通过 Keepalived 管理 VIP;配合健康检查脚本(如检测进程存活或 /health 接口)实现故障切换。
    • 健康检查脚本示例(/etc/keepalived/nginx_chk.sh):
      #!/usr/bin/env bash
      curl -f http://127.0.0.1/health || exit 1
      
    • Keepalived 中通过 vrrp_script 引用脚本并 track_script,主备优先级不同实现自动切换。

四、生产优化与排障要点

  • 内核与 IPVS 优化(/etc/sysctl.d/lvs-optimization.conf)
    • 连接跟踪与超时:net.netfilter.nf_conntrack_max、nf_conntrack_tcp_timeout_established
    • 网络与缓冲区:net.core.rmem_max/wmem_max、netdev_max_backlog、tcp_rmem/wmem
    • IPVS 行为:net.ipv4.vs.conn_reuse_mode、expire_nodest_conn、expire_quiescent_template
    • TCP:tcp_keepalive_time、tcp_tw_reuse、tcp_max_syn_backlog 等
      应用:sudo sysctl -p /etc/sysctl.d/lvs-optimization.conf
  • 观测与诊断
    • LVS:ipvsadm -L -n/-n --stats/-n -c;查看 /proc/net/ip_vs_stats 与连接跟踪计数
    • 系统:top/vmstat/ss -s;抓包 tcpdump;后端健康接口与日志
  • 会话保持与算法选择
    • 需要会话粘滞:Nginx 用 ip_hashhash $request_uri consistent;LVS/HAProxy 提供源地址哈希与持久化选项
    • 长连接/突发:考虑 least_conn 或带权重的调度(如 wrr/wlc)
  • 安全与合规
    • 在负载均衡器做 TLS 终止、开启 HTTP/2/gRPC、限制请求速率与 WAF 规则,减少后端暴露面

五、常见误区与建议

  • bonding(链路聚合/冗余) 与“负载均衡”混为一谈:bonding 提升链路可靠性,不负责把请求分发到多台应用服务器。
  • LVS DR 模式 忘记配置后端 ARP 抑制VIP 回环,会导致响应错乱或 VIP 冲突。
  • 健康检查配置不当(间隔过长/无重试/无失败阈值),会造成流量打到异常实例。
  • 单实例负载均衡器未做 主备,形成单点故障;建议至少双机 + VIP 漂移。

0