温馨提示×

如何在CentOS上从零实现负载均衡

小樊
44
2025-12-31 11:06:49
栏目: 云计算

在 CentOS 上从零实现负载均衡

一、方案总览与准备

  • 常见方案对比
    • HAProxy:同时支持 L4 TCP/UDPL7 HTTP/HTTPS,内置健康检查会话保持统计面板,资源占用低,适合中小规模与快速落地。
    • Nginx:高性能 HTTP/反向代理,通过 upstream + proxy_pass 实现负载均衡,生态成熟,适合 Web/API 场景。
    • LVS + Keepalived:内核级 L4 负载均衡,配合 Keepalived 提供 VIP 与故障切换,适合高吞吐与高可用场景。
  • 实验环境建议(示例网段)
    • 负载均衡器1:10.0.0.10
    • 负载均衡器2:10.0.0.11
    • 虚拟 IP(VIP):10.0.0.100
    • 后端 Web1:10.0.0.2
    • 后端 Web2:10.0.0.3
  • 前置准备
    • 所有节点时间同步(如 chrony)
    • 关闭 SELinux 或配置为 permissive(测试环境)
    • 防火墙放行相关端口(示例为 80/443/8080

二、方案一 HAProxy 快速落地(L4/L7 通用)

  • 安装与基础
    • 安装:yum install -y haproxy
    • 启动:systemctl start haproxy && systemctl enable haproxy
  • 核心配置示例(/etc/haproxy/haproxy.cfg)
    • 全局与默认
      global
          log         127.0.0.1 local2
          chroot      /var/lib/haproxy
          pidfile     /var/run/haproxy.pid
          maxconn     4000
          user        haproxy
          group       haproxy
          daemon
          tune.ssl.default-dh-param 2048
      
      defaults
          mode                    http
          log                     global
          option                  httplog
          option                  dontlognull
          option http-server-close
          option forwardfor       except 127.0.0.0/8
          option                  redispatch
          retries                 3
          timeout http-request    10s
          timeout queue           1m
          timeout connect         10s
          timeout client          1m
          timeout server          1m
          timeout http-keep-alive 10s
          timeout check           10s
          maxconn                 3000
      
    • 前端与后端
      frontend http_front
          bind *:80
          default_backend http_back
      
      backend http_back
          balance roundrobin
          server web1 10.0.0.2:80 check
          server web2 10.0.0.3:80 check
      
      listen stats
          bind *:8080
          stats enable
          stats uri /stats
          stats refresh 30s
          stats auth admin:StrongPass@2025
          stats admin if TRUE
      
  • 日志与防火墙
    • 建议将 local2 日志接入 rsyslog(/etc/rsyslog.d/haproxy.conf):local2.* /var/log/haproxy.log,重启 rsyslog。
    • 防火墙:firewall-cmd --permanent --add-service=http && firewall-cmd --permanent --add-port=8080/tcp && firewall-cmd --reload
  • 校验与访问
    • 校验:haproxy -f /etc/haproxy/haproxy.cfg -c
    • 重载:systemctl reload haproxy
    • 访问:
      • 业务:http://10.0.0.10/(轮询到 web1/web2)
      • 监控:http://10.0.0.10:8080/stats(账号 admin / StrongPass@2025)

三、方案二 Nginx 实现负载均衡(HTTP 反向代理)

  • 安装与启动
    • 安装:yum install -y epel-release && yum install -y nginx
    • 启动:systemctl start nginx && systemctl enable nginx
  • 负载均衡配置(/etc/nginx/conf.d/lb.conf)
    upstream backend_servers {
        server 10.0.0.2:80;
        server 10.0.0.3:80;
    }
    
    server {
        listen 80;
        server_name _;
    
        location / {
            proxy_pass http://backend_servers;
            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;
        }
    }
    
  • 校验与访问
    • 校验:nginx -t && systemctl reload nginx
    • 访问:http://<LB_IP>/,请求将在 web1/web2 之间分发

四、高可用与扩展

  • 基于 Keepalived 的 VIP 漂移(两台 LB:10.0.0.10/11,VIP:10.0.0.100)
    • 安装:yum install -y keepalived
    • 主节点 /etc/keepalived/keepalived.conf
      vrrp_instance VI_1 {
          state MASTER
          interface eth0
          virtual_router_id 51
          priority 100
          advert_int 1
          authentication {
              auth_type PASS
              auth_pass YourPass
          }
          virtual_ipaddress {
              10.0.0.100/24
          }
      }
      
    • 备节点:将 state 改为 BACKUPpriority 设为 90
    • 启动:systemctl start keepalived && systemctl enable keepalived
    • 验证:ip addr show eth0 应看到 VIP 10.0.0.100 在主节点;故障切换后漂移到备节点
  • LVS DR 模式简述(高性能 L4)
    • 安装:yum install -y ipvsadm keepalived
    • Keepalived 配置示例(/etc/keepalived/keepalived.conf)
      vrrp_instance VI_1 {
          state MASTER
          interface eth0
          virtual_router_id 51
          priority 100
          advert_int 1
          authentication { auth_type PASS; auth_pass YourPass }
          virtual_ipaddress { 10.0.0.100/24 }
      }
      
      virtual_server 10.0.0.100 80 {
          delay_loop 6
          lb_algo rr
          lb_kind DR
          protocol TCP
      
          real_server 10.0.0.2 80 {
              weight 1
              TCP_CHECK { connect_timeout 10 connect_port 80 }
          }
          real_server 10.0.0.3 80 {
              weight 1
              TCP_CHECK { connect_timeout 10 connect_port 80 }
          }
      }
      
    • 真实服务器需配置 VIP 回环ARP 抑制(略),然后 systemctl start keepalived 生效

五、验证与常见问题

  • 验证要点
    • 后端页面区分:分别在 web1/web2 放置标识页(如 “Welcome to web1/web2”),多次访问 VIPLB IP 应轮询命中不同节点
    • 健康检查:停掉某台后端,curlHAProxy stats/Nginx 页面应自动剔除异常节点
    • 会话保持:如需粘性会话,HAProxy 可用 cookiesource 策略;Nginx 可用 ip_hash
  • 常见问题
    • 防火墙/安全组未放行导致 502/超时
    • SELinux 拦截(建议测试环境 setenforce 0 或配置策略放行)
    • 后端未设置 X-Forwarded-For,导致源 IP 丢失
    • VIP 不漂移:检查 state/priority/VRID 一致性、网络接口名、以及云厂商安全组/网卡绑定策略

0