温馨提示×

CentOS环境如何进行负载均衡

小樊
35
2025-12-19 17:40:57
栏目: 云计算

CentOS环境负载均衡实操指南

一、方案选型与适用场景

  • Nginx:七层反向代理与负载均衡,配置灵活,支持轮询、加权轮询、IP Hash、最少连接等,适合大多数Web与API场景,生态完善、运维简单。
  • HAProxy:专注四/七层负载均衡与高并发,健康检查与统计完善,适合需要细粒度控制与高可用的HTTP/TCP服务。
  • LVS(IPVS)+ Keepalived:内核级四层转发,性能极高,适合大流量入口;结合Keepalived提供VIP与故障切换,常用于生产级高可用架构。
  • 选型建议:中小规模优先Nginx/HAProxy;超大规模或纯四层转发优先LVS+Keepalived

二、快速上手 Nginx 负载均衡

  • 安装与启动
    • 安装:执行 sudo yum install -y epel-release && sudo yum install -y nginx
    • 启动:执行 sudo systemctl start nginx && sudo systemctl enable nginx
  • 核心配置示例(/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/lb.conf)
    • 要点:定义upstream后端组,使用proxy_pass转发,设置X-Real-IP/X-Forwarded-For等头信息,便于后端获取真实客户端信息。
    • 示例:
      http {
        upstream backend {
          server 192.168.1.101:80;
          server 192.168.1.102:80;
        }
      
        server {
          listen 80;
          server_name 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;
          }
        }
      }
      
  • 健康检查与简单监控
    • 被动健康检查:在 upstream 中为节点添加 max_fails=3 fail_timeout=10s,失败超过阈值后暂时剔除。
    • 状态页:启用 stub_status 模块,配置示例:
      location /nginx_status {
        stub_status;
        access_log off;
        allow 127.0.0.1;
        deny all;
      }
      
  • 防火墙放行
    • 执行:sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --reload

三、HAProxy 负载均衡配置

  • 安装与启动
    • 安装:执行 sudo yum install -y haproxy
    • 启动:执行 sudo systemctl start haproxy && sudo systemctl enable haproxy
  • 核心配置示例(/etc/haproxy/haproxy.cfg)
    • 要点:定义 frontend 监听端口,backend 定义后端池与负载算法(如 roundrobin),开启 check 健康检查。
    • 示例:
      global
          log /dev/log    local0
          log /dev/log    local1 notice
          maxconn 4096
          tune.ssl.default-dh-param 2048
      
      defaults
          log     global
          mode    http
          option  httplog
          option  dontlognull
          retries 3
          timeout http-request 10s
          timeout queue 1m
          timeout connect 10s
          timeout client 1m
          timeout server 1m
      
      frontend http-in
          bind *:80
          default_backend servers
      
      backend servers
          balance roundrobin
          server server1 192.168.1.101:80 check
          server server2 192.168.1.102:80 check
      
  • 防火墙放行
    • 执行:sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --reload

四、LVS 四层负载均衡与高可用

  • 安装工具
    • 执行:sudo yum install -y ipvsadm keepalived
  • 启用转发与基本规则
    • 开启转发:echo "1" > /proc/sys/net/ipv4/ip_forward
    • 添加虚拟服务(VIP=192.168.1.100,端口80,调度算法rr):
      sudo ipvsadm -A -t 192.168.1.100:80 -s rr
      sudo ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101:80 -g
      sudo ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -g
      
  • 高可用 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 { 192.168.1.100 }
      }
      
    • 备节点:将 state 设为 BACKUPpriority 设低(如 90),其余一致。
    • 启动:sudo systemctl start keepalived
  • 说明
    • -g 表示 DR 模式,需在各真实服务器上配置回环口别名并关闭ARP响应(生产环境常用做法)。

五、生产实践与优化要点

  • 健康检查与故障隔离
    • Nginx:使用 max_fails/fail_timeout 实现被动健康检查;必要时结合主动健康检查与监控告警。
    • HAProxy:为每个后端配置 check,结合 inter/rise/fall 精细控制摘除与恢复策略。
  • 会话保持与共享
    • 优先方案:将 Session 集中存储Redis/Memcached,实现无状态与水平扩展。
    • 备选方案:使用 IP Hash 实现会话粘滞(可能导致负载不均)。
  • 监控与可观测性
    • Nginx:启用 stub_status 查看连接与请求统计;结合 Prometheus + Grafana 做指标可视化与告警。
  • 高可用与扩展
    • 避免单点:部署主备负载均衡器,使用 Keepalived 提供 VIP 漂移;流量大时考虑横向扩容后端与读写分离。
  • 安全与网络
    • 仅暴露必要端口,启用防火墙与访问控制;对外启用 TLS/HTTPS,在负载均衡器终止或做证书透传。

0