Nginx负载均衡常用算法
Nginx 作为反向代理服务器时,支持多种负载均衡策略,常用的核心策略可归纳为 4 种基础策略 + 2 种扩展策略,以下是详细分类和配置说明:
一、4 种基础负载均衡策略
1. 轮询(Round Robin)
• 原理:默认策略,按顺序依次将请求分配给后端服务器。
• 配置示例:
upstream backend {
server 10.0.0.1;
server 10.0.0.2;
}
• 适用场景:后端服务器性能均匀,无特殊会话保持需求。
2. 加权轮询(Weighted Round Robin)
• 原理:根据服务器权重分配请求,权重越高分配的请求越多。
• 配置示例:
upstream backend {
server 10.0.0.1 weight=3; # 60% 流量
server 10.0.0.2 weight=2; # 40% 流量
}
• 适用场景:后端服务器性能不均衡(如 CPU、内存差异)。
3. IP 哈希(IP Hash)
• 原理:根据客户端 IP 地址计算哈希值,固定将同一 IP 的请求分配到同一服务器。
• 配置示例:
upstream backend {
ip_hash;
server 10.0.0.1;
server 10.0.0.2;
}
• 适用场景:需要会话保持(如登录状态依赖同一后端服务器)。
4. 最少连接(Least Connections)
• 原理:将请求分配给当前连接数最少的服务器。
• 配置示例:
upstream backend {
least_conn;
server 10.0.0.1;
server 10.0.0.2;
}
• 适用场景:后端服务器处理时间差异较大(如长连接服务)。
二、2 种扩展负载均衡策略
1. 通用哈希(Hash)
• 原理:自定义哈希键(如 URL、请求头、变量),保证相同键的请求分配到同一服务器。
• 配置示例:
upstream backend {
hash $request_uri consistent; # 按请求 URI 分配
server 10.0.0.1;
server 10.0.0.2;
}
• 适用场景:缓存优化、特定资源固定到特定服务器。
2. 随机(Random)
• 原理:随机选择服务器,可配合权重使用。
• 配置示例:
upstream backend {
random;
server 10.0.0.1 weight=2;
server 10.0.0.2 weight=1;
}
• 适用场景:大规模后端集群,避免算法开销影响性能。
三、高级策略(需第三方模块)
1. 基于响应时间(Response Time)
• 原理:选择响应时间最短的服务器(需 nginx-upstream-fair 模块)。
• 配置示例:
upstream backend {
fair;
server 10.0.0.1;
server 10.0.0.2;
}
• 适用场景:动态感知后端服务器性能波动。
2. 健康检查(Health Check)
• 原理:自动屏蔽故障节点(需 nginx_upstream_check_module 模块)。
• 配置示例:
upstream backend {
server 10.0.0.1;
server 10.0.0.2;
check interval=3000 rise=2 fall=3 timeout=1000;
}
四、策略对比与选择建议
| 策略 | 会话保持 | 动态权重 | 性能开销 | 适用场景 |
|---|---|---|---|---|
| 轮询 | 否 | 否 | 低 | 简单均衡 |
| 加权轮询 | 否 | 是 | 低 | 服务器性能不均 |
| IP 哈希 | 是 | 否 | 低 | 会话保持需求 |
| 最少连接 | 否 | 是 | 中 | 长连接或处理时间差异大 |
| 通用哈希 | 是 | 否 | 中 | 缓存优化、资源固定分配 |
| 随机 | 否 | 是 | 低 | 大规模集群 |
五、完整配置示例
http {
upstream backend {
least_conn; # 最少连接策略
server 10.0.0.1 weight=3; # 权重 3
server 10.0.0.2 weight=2; # 权重 2
server 10.0.0.3 backup; # 备份服务器(主节点宕机时启用)
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
}
六、最佳实践
- 会话保持需求:优先选择
ip_hash或hash。 - 动态性能感知:使用
least_conn或第三方响应时间策略。 - 故障容灾:通过
backup标记备份服务器。 - 监控与调优:结合日志和监控工具(如 Prometheus)分析流量分布。
通过合理选择负载均衡策略,可以显著提升应用的可用性和性能。
本文来自博客园,作者:dashery,转载请注明原文链接:https://www.cnblogs.com/ydswin/p/18049496
浙公网安备 33010602011771号