Nginx负载均衡策略

Nginx 作为高性能的反向代理服务器,其内置的负载均衡策略非常成熟和强大。这些策略主要在 upstream 模块中配置,用于将客户端请求分发到一组后端服务器。


1. 轮询(Round Robin)

  • 默认策略。如果没有显式指定,Nginx 就使用此策略。

  • 工作原理:将每个新请求按顺序依次分配给后端服务器列表中的下一台。循环往复。

  • 配置示例:

nginx

复制代码
upstream backend_servers {
    server 192.168.1.100;
    server 192.168.1.101;
    server 192.168.1.102;
}
  • 特点:绝对平均,假设所有服务器性能相同且请求处理耗时相似。

2. 加权轮询(Weighted Round Robin)

  • 轮询的增强版,考虑了服务器性能差异。

  • 工作原理 :通过 weight 参数指定权重。权重越高,被分配到的请求比例越大。

  • 配置示例:

nginx

复制代码
upstream backend_servers {
    server 192.168.1.100 weight=3; # 处理3个请求
    server 192.168.1.101 weight=2; # 处理2个请求
    server 192.168.1.102 weight=1; # 处理1个请求
    # 请求分配模式大致为:100, 100, 100, 101, 101, 102, 100, 100, 100...
}
  • 应用场景:服务器配置不均(CPU、内存不同)。

3. 最少连接(Least Connections)

  • 工作原理 :将新请求优先分配给当前活跃连接数最少的后端服务器。

  • 配置指令 :least_conn

  • 配置示例:

nginx

复制代码
upstream backend_servers {
    least_conn;
    server 192.168.1.100;
    server 192.168.1.101;
}
  • 应用场景:请求处理时间长短不一(如有的请求是短 API 调用,有的是长耗时计算),能更公平地分配负载。

4. 加权最少连接(Weighted Least Connections)

  • 最少连接的增强版,同样考虑服务器权重。

  • 工作原理:在考虑活跃连接数的同时,结合权重进行更智能的分配。

  • 配置示例:

nginx

复制代码
upstream backend_servers {
    least_conn;
    server 192.168.1.100 weight=3;
    server 192.168.1.101 weight=2;
}

5. IP 哈希(IP Hash)

  • 工作原理 :根据客户端 IP 地址计算哈希值,将同一 IP 的请求总是路由到同一台后端服务器。

  • 配置指令 :ip_hash

  • 配置示例:

nginx

复制代码
upstream backend_servers {
    ip_hash;
    server 192.168.1.100;
    server 192.168.1.101;
}
  • 关键特性:

    • 会话保持:确保来自同一客户端的请求会话(Session)不丢失,无需额外配置 Session 共享。

    • 缺点:服务器数量变化时(增/删),大部分 IP 的映射会改变,可能导致会话失效。

  • 应用场景:对会话一致性有要求,且没有外部 Session 存储(如 Redis)的应用。


6. 通用哈希(Generic Hash)

  • IP 哈希的通用版本,可以基于任意变量(如 URL、请求参数)进行哈希。

  • 配置指令 :hash

  • 配置示例:

nginx

复制代码
upstream backend_servers {
    hash $request_uri consistent; # 按请求URI哈希
    server 192.168.1.100;
    server 192.1.68.1.101;
}
  • consistent 参数 :启用一致性哈希,能最大程度减少后端服务器增减时带来的缓存失效或会话影响。

  • 应用场景:缓存代理、需要将特定请求固定到特定服务器的场景。


7. 最短响应时间(Least Time)

  • Nginx Plus 专有功能(商业版)。

  • 工作原理 :综合最短平均响应时间 和最少活动连接数两个指标,将请求发给当前响应最快、连接最少的服务器。

  • 配置指令 :least_time header 或 least_time last_byte

    • header: 只计算到接收完响应头的时间。

    • last_byte: 计算到接收完整个响应体的时间。

  • 配置示例:

nginx

复制代码
upstream backend_servers {
    least_time header;
    server 192.168.1.100;
    server 192.168.1.101;
}
  • 应用场景:对延迟极其敏感的应用,追求最优的用户体验。

负载均衡策略对比表

策略 指令 优点 缺点 适用场景
轮询 (默认) 简单,绝对公平 忽略服务器性能差异和请求耗时 服务器同构,请求简单
加权轮询 weight 考虑服务器性能 忽略请求实际处理时间 服务器配置不均
最少连接 least_conn 动态,适合请求耗时不均 忽略服务器性能差异 请求处理时间差异大
IP哈希 ip_hash 会话保持简单 服务器增减影响大,可能负载不均 需要会话保持且无共享Session
通用哈希 hash 灵活,可一致性哈希 配置稍复杂 缓存代理,特定请求路由
最短响应时间 least_time (Plus) 性能最优,延迟最低 Nginx Plus 专有,需付费 对延迟敏感的商业应用

其他关键配置参数

在 server 指令中,除了 weight,还有:

  • max_fails 和 fail_timeout: 定义在特定时间内失败多少次后,将该服务器标记为不可用(健康检查)。

  • backup: 将该服务器标记为备份服务器,只有当所有主服务器都不可用时才会被使用。

  • down: 手动将服务器标记为永久不可用。

nginx

复制代码
upstream backend_servers {
    server 192.168.1.100 max_fails=3 fail_timeout=30s;
    server 192.168.1.101 backup;
}
相关推荐
无足鸟ICT8 小时前
【RHCA+】vmstat命令(监控系统资源)
linux·服务器
垆边人似月.9 小时前
RDMA 文件传输踩坑(五):READY 发送成功后,为什么出现 Work Request Flushed Error?
服务器·网络·tcp/ip
闪亮的路灯9 小时前
Linux 安装mqtt服务mosquitto
linux·运维·服务器
HideF9 小时前
nmcli
linux·服务器·网络
qetfw10 小时前
UOS DHCP Relay:跨网段分配与 IP、DNS、网关验证
linux·服务器·网络·tcp/ip·uos
明航咨询-陈老师10 小时前
ITSS运行维护服务能力成熟度认证技术纵深:标准模型、等级路径、2026审核趋势与CS/CMMI对比
服务器·数据库·cmmi
缓慢更新11 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
叼烟扛炮12 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip
叼烟扛炮12 小时前
Linux 学习笔记(四十四):HTTP 协议解析与极简 Web 服务器实战
linux·服务器·学习
Lsetea14 小时前
Certbot webroot申请SSL证书总是404:Nginx挑战目录与路径映射检查
运维·nginx·https·ssl证书·certbot