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;
}
相关推荐
天国梦5 分钟前
国密门禁品牌怎么选?2026年最新3个避坑要点
运维·服务器·数据库·python
夜之眷属1 小时前
PriorityQueue:for-each 遍历和 poll 取出,顺序一样吗?
java·服务器·数据结构·后端·算法
龙仔7251 小时前
RustDesk 自建服务器 Key 强校验配置笔记
运维·服务器·笔记
KING-WU5122 小时前
Linux GDB 调试实战指南:从编译到断点调试
linux·运维·服务器
贵州诚鑫致达科技有限公司2 小时前
PVID 是什么?端口参数三身份
服务器·经验分享
影视飓风TIM2 小时前
Linux 进程信号原理与剖析
linux·运维·服务器
iCxhust2 小时前
先想好如何测试:让测试驱动你的程序设计
运维·服务器·软件工程·编程的艺术
Philtell3 小时前
突然连接不上内网服务器的问题
运维·服务器
祖力554 小时前
Linux系统移植、烧录与环境的搭建
linux·运维·服务器
skywalk81635 小时前
windows10 explorer占用太多内存问题解决
服务器·内存·windows10·explorer