温馨提示×

如何在CentOS上配置负载均衡

小樊
39
2025-12-19 14:31:05
栏目: 云计算

在 CentOS 上配置负载均衡

一、方案速览与选择

  • Nginx:常用作反向代理与负载均衡,配置灵活,支持 HTTP/HTTPS、轮询、最少连接、IP Hash、加权 等,适合大多数 Web 场景与四层/七层转发。
  • HAProxy:专注负载均衡与高可用,七层能力完善,内置 健康检查、统计页面、ACL 等,适合高并发与复杂路由策略。
  • LVS(IPVS):内核级四层负载均衡,性能极高,适合超大规模流量;常与 Keepalived 配合做 VIP 漂移 与故障切换。
  • 选型建议:中小规模 Web 优先 Nginx/HAProxy;超高性能与四层转发优先 LVS+Keepalived

二、方案一 Nginx 负载均衡(快速上手)

  • 安装
    • 安装 EPEL 源并安装 Nginx:
      sudo yum install -y epel-release
      sudo yum install -y nginx
  • 配置(/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/lb.conf)
    • 定义后端与策略(示例为轮询,可按需改为 least_connip_hash):
      http {
      upstream backend {
      server 192.168.1.101:80;
      server 192.168.1.102:80;
      # server 192.168.1.103:80 weight=3; # 加权示例
      }
      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;
      }
      }
      }
  • 可选:状态页与简单健康判定
    • 在 server 块内添加:
      location /nginx_status { stub_status; access_log off; allow 127.0.0.1; deny all; }
    • 开源版可用 max_fails/fail_timeout 做被动健康检查:
      server 192.168.1.101:80 max_fails=3 fail_timeout=10s;
  • 启动与放行
    • 启动:sudo systemctl start nginx && sudo systemctl enable nginx
    • 防火墙:sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --reload
  • 验证
    • 访问域名/IP,刷新观察是否分发到不同后端;查看状态页 /nginx_status

三、方案二 HAProxy 负载均衡(含监控与高可用)

  • 安装
    • sudo yum install -y haproxy
  • 配置(/etc/haproxy/haproxy.cfg,示例为 HTTP)
    • global
      log 127.0.0.1 local2
      chroot /var/lib/haproxy
      pidfile /var/run/haproxy.pid
      maxconn 4000
      user haproxy
      group haproxy
      daemon
      stats socket /var/lib/haproxy/stats
    • defaults
      mode http
      log global
      option httplog
      option dontlognull
      option http-server-close
      option forwardfor except 127.0.0.1/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
    • listen stats
      bind *:8080
      mode http
      stats enable
      stats uri /haproxy?stats
      stats realm Haproxy\ Statistics
      stats auth admin:YourStrongPass
      stats refresh 30s
    • frontend web_frontend
      bind *:80
      mode http
      default_backend app_servers
    • backend app_servers
      balance roundrobin
      option httpchk GET / HTTP/1.0
      server web1 192.168.1.10:80 check inter 2000 rise 2 fall 3
      server web2 192.168.1.11:80 check inter 2000 rise 2 fall 3
  • 启动与放行
    • 启动:sudo systemctl start haproxy && sudo systemctl enable haproxy
    • 放行:sudo firewall-cmd --permanent --add-port=80/tcp --add-port=8080/tcp && sudo firewall-cmd --reload
  • 验证
    • 访问 http://<LB_IP>/haproxy?stats 查看统计与健康状态;访问业务域名/IP 验证分发。
  • 高可用(HAProxy+Keepalived)
    • 两台 LB 分别安装 Keepalived,配置 VIPVRRP 优先级;主节点故障自动漂移到备节点,保障负载均衡器不单点。

四、方案三 LVS 四层负载均衡(高性能场景)

  • 安装与启用转发
    • sudo yum install -y ipvsadm
    • echo 1 > /proc/sys/net/ipv4/ip_forward
  • 配置虚拟服务与后端(示例:轮询)
    • 添加虚拟服务:sudo ipvsadm -A -t VIP:80 -s rr
    • 添加真实服务器:sudo ipvsadm -a -t VIP:80 -r RS1:80 -g
    • 说明:VIP 为虚拟 IP,RS1/RS2 为后端服务器 IP;-g 表示 DR 模式(需在各 RS 上配置回环别名与 ARP 抑制)。
  • 高可用
    • 结合 Keepalived 管理 VIP 与故障切换,实现 LVS 主备自动漂移。

五、生产要点与排错清单

  • 健康检查与故障隔离
    • Nginx 开源版可用 max_fails/fail_timeout 做被动探测;HAProxy 支持主动 HTTP/TCP 检查rise/fall 阈值,异常节点自动摘除。
  • 会话保持
    • 需要会话一致时可用 ip_hash(Nginx)或 source(HAProxy);更优方案是应用无状态化或将 Session 存入 Redis/Memcached 实现集中共享。
  • 监控与日志
    • Nginx 启用 stub_status;HAProxy 自带 统计页面;建议接入 Prometheus + Grafana 做指标与告警。
  • 防火墙与 SELinux
    • 放行 80/443/8080 等端口;必要时调整 SELinux 策略或临时设为 permissive 做排查。
  • 性能与连接
    • 调整 worker_connections / maxconn,开启 keepalive 复用连接;后端应用需具备水平扩展与幂等性。

0