温馨提示×

CentOS虚拟机如何进行负载均衡

小樊
36
2025-12-21 09:07:00
栏目: 云计算

CentOS 虚拟机负载均衡实操指南

一、方案选型与适用场景

  • Nginx:应用层(L7)反向代理与负载均衡,配置灵活,支持 HTTP/HTTPS/TCP,适合大多数 Web 与 API 场景,生态完善、运维简单。
  • HAProxy:专精于 L4/L7 负载均衡与高可用,性能稳定,配置直观,适合高并发与协议多样化的场景。
  • LVS + Keepalived:内核级 L4 负载均衡(IPVS),转发性能极强,适合大流量入口;配合 Keepalived 实现 VIP 漂移与双机热备,常用于生产核心入口。

二、快速上手 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/default.conf)
    • 在 http 块中定义后端组与算法,在 server 块中反向代理:
      http {
        upstream backend {
          server 192.168.1.101:8080;
          server 192.168.1.102:8080;
          server 192.168.1.103:8080;
          # 可选:least_conn; 最少连接;默认轮询
        }
        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;
          }
        }
      }
      
  • 防火墙放行
    • 执行:sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --reload
  • 验证
    • 访问 http://example.com,并在后端页面加入标识(如显示 IP),确认请求被分发到不同后端。

三、快速上手 HAProxy 负载均衡

  • 安装与启动
    • 安装:执行 sudo yum install -y haproxy
    • 启动:执行 sudo systemctl start haproxy && sudo systemctl enable haproxy
  • 配置示例(/etc/haproxy/haproxy.cfg)
    • 定义前端监听与后端服务器池,指定负载算法(如 roundrobin):
      global
        daemon
        maxconn 256
      defaults
        mode http
        option httplog
        option dontlognull
        timeout connect 5000
        timeout client 50000
        timeout server 50000
      frontend http-in
        bind *:80
        default_backend servers
      backend servers
        balance roundrobin
        server server1 192.168.1.101:8080 check
        server server2 192.168.1.102:8080 check
        server server3 192.168.1.103:8080 check
      
  • 防火墙放行
    • 执行:sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --reload
  • 验证
    • 访问 http://<LB_IP>/,观察后端是否按轮询分发。

四、高性能入口 LVS + Keepalived(DR 模式)

  • 拓扑与角色
    • Director/负载均衡器(主/备):部署 Keepalived,对外提供 VIP(如 192.168.1.200
    • Real Server(后端):承载实际业务(如 192.168.1.111、192.168.1.115
  • Director 配置要点(Keepalived)
    • 启用 VIP 漂移与 LVS 规则,示例片段:
      vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 66
        priority 100
        advert_int 1
        authentication { auth_type PASS auth_pass 1111 }
        virtual_ipaddress { 192.168.1.200 }
      }
      virtual_server 192.168.1.200 8080 {
        delay_loop 6
        lb_algo wrr
        lb_kind DR
        persistence_timeout 0
        real_server 192.168.1.111 8080 { weight 1; TCP_CHECK { connect_timeout 3; } }
        real_server 192.168.1.115 8080 { weight 1; TCP_CHECK { connect_timeout 3; } }
      }
      
  • Real Server 配置要点(每台后端)
    • 在回环接口绑定 VIP,并抑制 ARP 响应,确保 DR 模式正确转发:
      #!/bin/bash
      VIP=192.168.1.200
      case "$1" in
        start)
          ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
          /sbin/route add -host $VIP dev lo:0
          echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
          echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
          echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
          echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
          sysctl -p >/dev/null 2>&1
          echo "RealServer Start OK"
          ;;
        stop)
          ifconfig lo:0 down
          route del -host $VIP >/dev/null 2>&1
          echo 0 >/proc/sys/net/ipv4/conf/lo/arp_ignore
          echo 0 >/proc/sys/net/ipv4/conf/lo/arp_announce
          echo 0 >/proc/sys/net/ipv4/conf/all/arp_ignore
          echo 0 >/proc/sys/net/ipv4/conf/all/arp_announce
          echo "RealServer Stopped"
          ;;
        *)
          echo "Usage: $0 {start|stop}"
          exit 1
      esac
      exit 0
      
    • 启动脚本后,客户端通过 VIP:8080 访问即可被 LVS 按 WRR 等算法分发到后端。
  • 说明
    • LVS 调度器本身不需要开启 Web 服务,它仅负责流量转发;业务服务运行在 Real Server 上。

五、健康检查、监控与会话保持

  • 健康检查
    • Nginx:在 upstream 中使用 max_failsfail_timeout 实现被动健康检查,例如:
      upstream backend {
        server 192.168.1.101:8080 max_fails=3 fail_timeout=10s;
        server 192.168.1.102:8080 max_fails=3 fail_timeout=10s;
      }
      
    • HAProxy:在 backend 的 server 行添加 check 参数启用 TCP/HTTP 健康检查。
    • LVS+Keepalived:通过 TCP_CHECK 或应用层检查脚本对后端做健康检查,异常节点自动摘除。
  • 监控
    • Nginx:启用 stub_status 模块查看连接与请求统计,便于日常巡检与告警接入。
  • 会话保持
    • 无状态服务优先使用 无会话 设计;需要会话保持时可选:
      • IP Hash(Nginx:ip_hash;)实现简单,但可能造成负载不均;
      • 集中式 Session(如 Redis/Memcached)更通用、可扩展。

0