温馨提示×

Debian LAMP集群如何实现负载均衡

小樊
35
2025-12-22 16:10:35
栏目: 云计算

Debian LAMP集群负载均衡实现指南

一、架构与方案选型

  • 流量分发层:使用NginxHAProxy做反向代理与负载均衡,将请求分发到多台运行Apache+PHP的后端;大规模或四层转发场景可用LVS;简单入门可用DNS轮询(不具备健康检查与故障隔离能力,仅作补充)。
  • 应用层:各后端运行Apache HTTP Server + PHP-FPM(或mod_php),对外提供动态内容服务。
  • 数据层:部署MariaDB/MySQL复制(主从/主主)以分担读负载与提升可用性;写操作通常指向主库,读操作可指向从库。
  • 高可用与容错:在负载均衡器前叠加Keepalived VIP实现故障漂移;用Monit/Nagios/Prometheus+Grafana做服务与健康监测与告警。

二、方案一 Nginx作为负载均衡器

  • 安装与启用
    • 执行:sudo apt update && sudo apt install nginx
  • 配置示例(/etc/nginx/conf.d/load_balancer.conf)
    • 全局与上游
      http {
        upstream lamp_backend {
          least_conn;                 # 可选:最少连接
          server 10.0.0.11:80 max_fails=3 fail_timeout=30s;
          server 10.0.0.12:80 max_fails=3 fail_timeout=30s;
          # 可选:ip_hash;            # 会话保持(基于客户端IP)
        }
      
        server {
          listen 80;
          server_name www.example.com;
      
          location / {
            proxy_pass http://lamp_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;
          }
        }
      }
      
    • 说明:Nginx支持轮询、加权轮询、最少连接、IP哈希等策略;通过max_fails/fail_timeout实现被动健康检查与摘除异常节点。
  • 生效与验证
    • 执行:sudo nginx -t && sudo systemctl reload nginx
    • 验证:访问域名观察请求在后端间分发,停一台后端验证自动摘除与恢复。

三、方案二 HAProxy作为负载均衡器

  • 安装与启用
    • 执行:sudo apt update && sudo apt install haproxy
  • 配置示例(/etc/haproxy/haproxy.cfg)
    global
      log /dev/log local0
      maxconn 4096
      user haproxy
      group haproxy
      daemon
    
    defaults
      mode http
      timeout connect 5s
      timeout client  30s
      timeout server  30s
    
    frontend http-in
      bind *:80
      default_backend lamp_servers
    
    backend lamp_servers
      balance roundrobin
      option httpchk GET /health          # 健康检查路径
      server web1 10.0.0.11:80 check
      server web2 10.0.0.12:80 check
    
  • 生效与验证
    • 启用:sudo systemctl enable --now haproxy
    • 验证:访问/health观察返回;停一台后端验证摘除与恢复。

四、数据库与共享存储要点

  • MariaDB/MySQL复制(主从示例)
    • 主库配置(/etc/mysql/mysql.conf.d/mysqld.cnf)
      [mysqld]
      server-id=1
      log_bin=/var/log/mysql/mysql-bin.log
      
    • 从库配置
      [mysqld]
      server-id=2
      relay_log=/var/log/mysql/mysql-relay-bin.log
      read_only=1
      
    • 主库创建复制用户并授权,记录SHOW MASTER STATUS;的File与Position;从库执行CHANGE MASTER TO ...START SLAVE;
  • 会话与文件一致性
    • 会话保持:在负载均衡器启用IP哈希或将会话存入数据库/Redis/Memcached实现无状态化。
    • 文件一致性:用户上传等写共享目录可用NFS集中存放,各Web节点挂载同一共享路径,避免内容不一致。
  • 监控与告警
    • 使用Monit/NagiosPrometheus+Grafana监控Nginx/HAProxy、Apache、PHP-FPM、MariaDB等关键指标并设置告警。

五、高可用与故障转移

  • 负载均衡器高可用
    • 两台负载均衡器部署Keepalived,配置VRRP虚拟IP(VIP);健康检查脚本监控本地Nginx/HAProxy进程,异常时降低优先级触发VIP漂移
    • 示例思路(/etc/keepalived/keepalived.conf片段)
      vrrp_script chk_nginx {
        script "killall -0 nginx"
        interval 2
        weight 2
      }
      vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication { auth_type PASS; auth_pass 42 }
        virtual_ipaddress { 192.168.1.100/24 }
        track_script { chk_nginx }
      }
      
  • 扩展建议
    • 大规模与四层转发:在L4层使用LVS配合Keepalived实现更高吞吐与更细粒度调度。
    • 安全与运维:启用UFW/firewalld限制访问,定期更新系统与组件,完善备份与应急流程。

0