ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

nginx - 负载均衡策略

nginx - 负载均衡策略 文章目录1. 基础负载均衡配置2. 核心负载均衡策略2.1 轮询Round Robin2.2 加权轮询Weighted Round Robin2.3 最少连接Least Connections2.4 IP 哈希IP Hash2.5 响应时间优先Least Time2.6 随机负载均衡Random3. 高级配置技巧3.1 健康检查3.2 备份服务器3.3 长连接优化3.4 分片负载均衡4. 策略选择决策指南5. 可视化策略对比6. 性能监控建议7. 常见问题解决方案Nginx作为高性能的反向代理服务器提供了多种负载均衡算法能有效分配客户端请求到后端服务器群集。1. 基础负载均衡配置http{upstream backend{# 定义后端服务器群server10.0.0.1:80;server10.0.0.2:80;server10.0.0.3:80;}server{listen80;location /{proxy_pass http://backend;}}}2. 核心负载均衡策略2.1 轮询Round Robin默认策略按顺序均匀分配请求upstream backend{server10.0.0.1;# 权重默认为1server10.0.0.2;}特点简单公平的请求分配不考虑服务器负载情况适合服务器性能相近的场景2.2 加权轮询Weighted Round Robin根据服务器性能分配不同权重upstream backend{server10.0.0.1weight3;# 处理3倍请求server10.0.0.2weight1;}特点高性能服务器可承担更多流量权重比为请求分配比例如 3:1需手动配置权重值2.3 最少连接Least Connections优先选择当前连接数最少的服务器upstream backend{least_conn;server10.0.0.1;server10.0.0.2;}特点动态平衡服务器负载适合长连接场景如 WebSocket需要 Nginx 实时监控连接数2.4 IP 哈希IP Hash基于客户端 IP 固定分配服务器upstream backend{ip_hash;server10.0.0.1;server10.0.0.2;}特点保持会话一致性Session Persistence解决分布式会话问题可能导致负载不均2.5 响应时间优先Least TimeNginx Plus 专属基于响应时间和连接数upstream backend{least_time header;# 或last_byteserver10.0.0.1;server10.0.0.2;}特点商业版 Nginx 独有功能选择最快响应的服务器需要服务器性能监控2.6 随机负载均衡Random随机选择后端服务器upstream backend{random;server10.0.0.1;server10.0.0.2;}变种带权重的随机upstream backend{random two;# 随机选2台后根据权重选择server10.0.0.1weight3;server10.0.0.2weight1;}3. 高级配置技巧3.1 健康检查upstream backend{server10.0.0.1max_fails3fail_timeout30s;server10.0.0.2;}max_fails允许失败次数fail_timeout故障服务器暂停服务时间3.2 备份服务器upstream backend{server10.0.0.1;server10.0.0.2 backup;# 仅当主服务器不可用时启用}3.3 长连接优化upstream backend{server10.0.0.1;keepalive32;# 保持的连接池大小}3.4 分片负载均衡# 按URL路径分配到不同集群location /video/{proxy_pass http://video_backend;}location /api/{proxy_pass http://api_backend;}4. 策略选择决策指南场景推荐策略原因常规 Web 应用加权轮询简单高效会话依赖型应用IP 哈希保持会话一致长连接服务最少连接平衡持久连接静态资源分发轮询无状态请求高可用集群健康检查备份故障自动转移商业版环境响应时间优先最优性能5. 可视化策略对比6. 性能监控建议Nginx 状态模块location /nginx_status{stub_status on;allow10.0.0.0/24;deny all;}关键指标请求处理速率Requests/sec后端服务器响应时间活跃连接数日志分析log_format upstream_log $remote_addr - $upstream_addr - $upstream_response_time;7. 常见问题解决方案问题 1会话不一致 方案使用ip_hash或引入 Redis 集中式会话存储问题 2某台服务器过载 方案调整权重或启用least_conn问题 3健康检查不灵敏 方案减小fail_timeout值如改为 10s问题 4DNS 缓存问题 方案在 upstream 中直接使用 IP 地址 感谢阅读想了解更多 我的博客网站 | 记录思考分享干货 我的个人主页 | 关于我、开源项目
返回列表