原有角色回顾:
网段=小区;交换机=门卫;路由器=交警;防火墙=大门安检
负载均衡LB(Load Balancer,负载均衡器)= 前台接待总台。
原本所有访客全部挤着去找同一间办公室(单台PHP服务器),人多就排队拥堵。总台负责把来访客人,均匀分派到多间相同功能的办公室(多台PHP服务器),分担接待压力。
本源概念
负载均衡LB,就是流量分发器。接收全部客户端请求,再按照预设策略,转发请求到后端多台PHP业务服务器,实现流量分摊。
目的:分担单台服务器压力、扩容承载能力、实现故障转移,一台PHP机器挂了,总台自动不再派客人过去,服务不中断。
LB分三层:四层负载均衡(传输层,LVS)和七层负载均衡(应用层,Nginx),这两种是PHP项目最常用。
一、四层LB(传输层LB,LVS)
类比:总台只看访客信封上的【收件地址+端口】,不拆开信件看里面写的内容。
工作在传输层(TCP/UDP),只解析IP、端口。
- 客户端TCP连接先和LB建立三次握手
- LB根据分发算法,挑选一台后端PHP服务器
- 修改数据包二层头部,转发TCP流量到选中的PHP节点
- PHP服务器返回响应包,回传给LB,再转发给客户端
特点:LB不解析HTTP报文,只搬运TCP数据包,性能很高。连接是客户端 ↔ LB ↔ 后端服务器。
二、七层LB(应用层LB,Nginx,PHP项目最常用)
类比:总台拆开信封,读懂HTTP信件内容,再分配任务。
工作在应用层,可以完整解析HTTP请求报文:看请求路径、Header、Cookie、URL。
- 浏览器发起TCP连接,和Nginx(LB)建立连接
- Nginx完整接收HTTP请求,解析HTTP报文
- 根据负载均衡策略,挑选一台后端PHP-FPM/Hyperf服务器
- Nginx作为新的HTTP客户端,新建一条独立TCP连接,把请求转发给选中的PHP服务器
- PHP处理业务,生成HTTP响应,返回给Nginx
- Nginx拿到响应,回传给浏览器
重点:七层LB会断开客户端的连接,再重新和后端PHP建立连接。它能看懂HTTP,能力更强。
我们PHP集群,绝大多数场景,就是用Nginx充当七层负载均衡。
三、LB常用分发策略(总台分配客人的规则)
- 轮询:挨个轮流派。第1个请求给服务器A,第2个B,第3个A,循环往复。适合服务器性能差不多的集群。
- 加权轮询:性能强的服务器多分配请求。比如A机器性能好权重2,B权重1;A接待2个客人,B接待1个。
- IP哈希:根据用户客户端IP做哈希。同一个用户,每次都分配到同一台PHP服务器。适合需要本地Session保存在服务器的老项目(现在推荐Redis共享Session替代这个方案)。
- 最少连接:看哪台PHP服务器当前处理的连接数最少,就分给谁。适合请求耗时差异大的接口场景。
四、健康检查(总台定期查房)
LB会持续定时探测后端每一台PHP服务器。
如果发现某台PHP服务挂了、端口不通、接口返回5xx错误,就自动把这台机器从可用列表里剔除,不再分配新请求。等机器恢复正常,再重新加入集群。
比喻:总台每隔一段时间,去检查办公室还能不能接待客人,办公室关门了,就不再安排访客过去。
五、完整通信流程(七层Nginx LB,PHP集群场景)
浏览器 → Nginx负载均衡器 → 分发到多台PHP服务器
- 用户发起HTTP请求到Nginx LB
- Nginx执行健康检查列表,挑选一台正常的PHP后端
- Nginx转发HTTP请求到后端PHP
- PHP执行业务代码,生成HTTP响应返回Nginx
- Nginx把响应返回浏览器
六、四层LB和七层LB核心差异
- 四层LB:只管TCP连接,看不懂HTTP,转发速度快;只能基于IP+端口分发。
- 七层LB:解析完整HTTP报文,可以基于URL、Cookie、请求头做更灵活的流量分发;开销略高,适合Web/PHP业务。
七、PHP业务配套注意点
- 会话问题
如果Session存在PHP服务器本地文件,IP哈希之外的策略会出问题:用户第一次访问分到A服务器,第二次分到B,B找不到Session,用户登录状态丢失。
解决方案:把Session存入Redis,所有PHP服务器共用一份会话数据,集群无状态。 - 资源一致性
多台PHP服务器代码、配置必须保持一致;静态资源建议统一放共享存储或者CDN。 - 负载均衡不等于缓存
LB只是分发请求,不会缓存接口结果。每一个请求,都会转发到后端PHP执行业务代码。
八、常见误区澄清
❌ LB会合并多台服务器算力,让单一次PHP请求由多台服务器一起处理。
错。一次请求只会交给其中一台后端服务器处理。LB只是分流,单个请求不会拆分到多台机器。
❌ 负载均衡一定是硬件设备。
不是。Nginx、HAProxy是软件负载均衡,PHP项目最常用,成本低。硬件LB(F5)多用于大型企业。
一句话浓缩
负载均衡就是流量总台,接收全部用户请求,按规则分发到多台PHP服务器,分摊压力;四层LB只转发TCP包,七层Nginx LB可以解析HTTP报文,还自带后端健康检查,单点故障自动摘除节点。