在 LAMP 架构中实现负载均衡
一、总体思路与架构选型
- 前端入口使用四层/七层负载均衡器分发请求到多台 Apache+PHP 后端;数据库通常独立为主从/集群,避免成为单点。
- 常见负载均衡器选型与适用场景如下:
| 方案 |
工作层级 |
优点 |
适用场景 |
| Nginx |
七层(HTTP/HTTPS) |
配置简洁、静态资源高效、支持反向代理与健康检查 |
动态+静态混合、需要 URL 级路由与策略 |
| HAProxy |
四层/七层 |
高并发、灵活调度与健康检查、统计报表 |
高并发、对协议与调度细粒度控制 |
| LVS |
四层(IP 转发) |
吞吐极高、内核级转发 |
超大规模入口、长连接场景 |
| DNS 轮询 |
域名解析层 |
实现简单、成本低 |
入门级分流、配合其他方案使用 |
以上方案均为业界常用做法,可单独或组合使用。
二、方案一 Nginx 作为七层负载均衡器(推荐)
- 安装
- Debian/Ubuntu: sudo apt-get install nginx
- CentOS/RHEL: sudo yum install nginx
- 配置示例(/etc/nginx/conf.d/lb.conf)
- 定义后端池与策略(示例为轮询,可按需改为 least_conn、权重等)
- 开启健康检查和传递客户端信息
- 重载生效:sudo nginx -t && sudo systemctl reload nginx
- 关键要点
- 使用 upstream 定义后端组,支持轮询、加权轮询、最少连接、IP 哈希等策略。
- 通过 proxy_set_header 传递 Host、X-Real-IP、X-Forwarded-For,便于后端获取真实客户端信息。
- 建议开启主动健康检查与失败重试,提升可用性。
三、方案二 HAProxy 作为四层/七层负载均衡器
- 安装
- Debian/Ubuntu: sudo apt-get install haproxy
- CentOS/RHEL: sudo yum install haproxy
- 配置示例(/etc/haproxy/haproxy.cfg)
- 定义 frontend 监听 80/443,backend 使用 roundrobin 或 leastconn
- 配置 option httpchk 做应用层健康检查,server 行加 check 参数
- 重载生效:sudo systemctl reload haproxy
- 关键要点
- 支持细粒度的 ACL、会话保持(如 cookie)、限流与统计页面,适合高并发与复杂路由策略。
四、方案三 LVS 四层转发与高可用
- 安装与启用
- 安装 ipvsadm:sudo yum install ipvsadm
- 配置示例(DR 模式思路)
- 创建虚拟服务:ipvsadm -A -t VIP:80 -s rr
- 添加后端:ipvsadm -a -t VIP:80 -r RS1:80 -g;ipvsadm -a -t VIP:80 -r RS2:80 -g
- 配合 Keepalived 提供 VIP 漂移与故障转移,实现高可用
- 关键要点
- LVS 工作在内核 IP 层,吞吐能力强;DR/TUN/NAT 模式需按网络拓扑选择。
- 需保证回程流量与 ARP 策略正确,避免不对称路由。
五、数据与文件一致性、会话保持与运维要点
- 会话保持
- 无状态服务优先:使用 Redis/Memcached 集中存储 Session。
- 有状态场景可选:负载均衡器的 IP Hash 或 Cookie 插入/会话粘滞(注意容灾与扩容影响)。
- 文件与静态资源
- 多台 Web 节点保持内容一致:使用 NFS 共享 DocumentRoot,或结合对象存储/CDN 承载静态资源。
- 数据库与缓存
- 数据库建议 主从复制/读写分离/分库分表;热点数据使用 Redis 缓存,减轻后端压力。
- 健康检查与灰度发布
- 负载均衡器开启 主动健康检查;变更时采用 灰度/金丝雀 与优雅下线,避免全量抖动。
- 监控与日志
- 监控 连接数、5xx 比例、RT、后端存活;集中收集 访问日志与错误日志,便于定位与容量规划。