温馨提示×

如何利用Linux LNMP实现负载均衡

小樊
44
2026-01-11 19:31:43
栏目: 云计算

架构选型与总体思路

  • LNMP 场景中,负载均衡通常指在 Nginx 层做反向代理,把请求分发到多台后端 Nginx+PHP-FPM 应用节点;数据库层通过 MySQL 主从复制实现读写分离,避免数据库成为瓶颈。
  • 负载均衡策略可选:轮询 round-robin最少连接 least_connIP 哈希 ip_hash(会话保持)。
  • 高可用方案:在 L4/L7 负载均衡器前再加一层 Keepalived + VIP,实现故障秒切,消除单点。
  • 监控与优化:接入 Prometheus + GrafanaZabbix/Netdata 做指标与健康检查,按负载调整 worker_processes/worker_connections 与后端权重。

方案一 Nginx 层负载均衡(最常用)

  • 拓扑:客户端 → Nginx 负载均衡器 → 多台 Nginx+PHP-FPM 应用节点(相同代码与配置)。
  • 负载均衡器配置示例(/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/lb.conf):
http {
  upstream backend {
    least_conn;                 # 可按需改为 ip_hash; 或默认轮询
    server 10.0.0.11:80 weight=3 max_fails=2 fail_timeout=30s;
    server 10.0.0.12:80 weight=1 max_fails=2 fail_timeout=30s;
    server 10.0.0.13:80 backup; # 仅当其他节点都不可用时启用
  }

  server {
    listen 80;
    server_name www.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;
      proxy_next_upstream error timeout http_502 http_503 http_504;
    }
  }
}
  • 后端节点要点:
    • 各节点部署相同站点目录与代码;Nginx 处理静态资源,PHP 通过 PHP-FPM 处理。
    • PHP-FPM 建议配置(/etc/php-fpm.d/www.conf):
      • 动态进程管理:pm = dynamic
      • 进程数:pm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers
      • 通信方式:可用 TCP 127.0.0.1:9000Unix socket /var/run/php-fpm/php-fpm.sock
  • 数据库层建议:部署 MySQL 主从复制,应用写主库、读从库,降低主库压力。

方案二 LVS + Keepalived 四层高可用负载均衡

  • 适用场景:更高并发与更高可靠性需求;LVS 做四层转发,Keepalived 提供 VRRP 主备与 VIP 漂移。
  • 基本拓扑:客户端 → VIP(漂移在 LVS 主备之间)→ LVS-DR 模式 → 多台 Nginx+PHP-FPM 后端。
  • 核心配置要点(示例思路):
    • 两台 LVS 调度器安装 keepalived,配置 vrrp_instancevirtual_ipaddress(同一 VRID 的主备不同优先级),实现 VIP 自动切换。
    • LVS 配置 virtual_server 使用 lb_algo rrlb_kind DRprotocol TCP,后端 realserver 指向各 Nginx 节点 80 端口。
    • 后端 realserver 开启 ARP 抑制lo:0 绑定 VIP,确保 DR 模式回包正确;健康检查可用 HTTP_GET 等。
  • 该方案在出现节点故障时可实现 秒级切换,适合生产环境。

验证与优化

  • 健康检查与故障演练:
    • 临时停止某台后端,验证 proxy_next_upstream 是否生效、请求是否自动落到健康节点。
    • 对 LVS 方案,停止主调度器 keepalived,确认 VIP 漂移到备机且业务不中断。
  • 性能与容量:
    • 调整负载均衡器 worker_processes(通常设为 CPU 核数)与 worker_connections(如 10240),并开启 gzip、合理的 keepalive 与缓存策略。
    • 后端 PHP-FPM 依据内存与 QPS 调整 pm.max_children 等参数,避免 OOM 与排队过长。
  • 监控与日志:
    • 接入 Prometheus + Grafana 采集 Nginx/php-fpm 指标与后端健康;或 Zabbix/Netdata 做告警与可视化。
    • 集中收集 Nginx access/errorphp-fpm slowlog,定位长尾与异常。

0