业务量上来了,一台服务器扛不住了,怎么办?加机器是第一反应,但加完之后怎么把流量合理分配到每台机器上?这就是负载均衡要解决的问题。
一、什么是负载均衡?
负载均衡(Load Balancing)是将网络流量分发到多台服务器的技术,目的是:
- 提高可用性:单台服务器故障不影响服务
- 提升性能:多台服务器并行处理,吞吐量更大
- 弹性扩展:根据负载动态增减服务器
二、负载均衡类型
1. 硬件负载均衡
- 专用硬件设备,如F5 BIG-IP
- 性能强劲,价格昂贵
- 适合大型企业
2. 软件负载均衡
- 运行在普通服务器上的软件
- 如Nginx、HAProxy、LVS
- 成本低,灵活性高
3. 云负载均衡
- 云服务商提供的托管服务
- 无需运维,按需付费
- 如AWS ELB、阿里云SLB
三、负载均衡算法
1. 轮询(Round Robin)
请求依次分发到每台服务器。
- 优点:简单均匀
- 缺点:不考虑服务器性能差异
2. 加权轮询(Weighted Round Robin)
根据服务器权重分配请求,权重高的服务器接收更多请求。
- 适合服务器配置不同的场景
3. 最少连接(Least Connections)
将请求分发到当前连接数最少的服务器。
- 适合请求处理时间差异大的场景
4. IP哈希(IP Hash)
根据客户端IP计算哈希值,同一IP总是分配到同一服务器。
- 适合需要会话保持的场景
5. URL哈希
根据请求URL计算哈希值,相同URL分配到同一服务器。
- 适合配合缓存使用
四、健康检查
负载均衡器需要检测后端服务器的健康状态:
检查方式
- TCP检查:检测端口是否可连接
- HTTP检查:检测特定URL返回是否正常
- 自定义检查:执行自定义脚本
检查参数
- 检查间隔:多久检查一次
- 超时时间:多久没响应算失败
- 失败阈值:连续失败几次标记为不健康
- 恢复阈值:连续成功几次恢复健康
五、会话保持
有些应用需要同一用户的请求发送到同一服务器:
实现方式
- Cookie方式:在响应中设置Cookie标识
- 源IP方式:根据客户端IP绑定服务器
- Header方式:根据特定HTTP头绑定
更好的方案
将会话存储到共享存储(如Redis),使应用无状态,避免会话保持的复杂性。
六、Nginx负载均衡配置示例
upstream backend {
# 加权轮询
server 192.168.1.1:8080 weight=3;
server 192.168.1.2:8080 weight=2;
server 192.168.1.3:8080 weight=1;
# 健康检查(需要模块支持)
# health_check interval=5s;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
飞盾云负载均衡
- 多种算法:支持轮询、加权、最少连接等算法
- 健康检查:自动检测故障服务器并摘除
- 会话保持:支持Cookie和IP方式
- 高可用:负载均衡器本身高可用,无单点故障
- 结合CDN:与CDN无缝集成,一站式加速防护
总结
负载均衡是构建高可用系统的基础设施,选择合适的负载均衡类型和算法,配合健康检查机制,可以有效提升系统的可用性和性能。