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 headerleast_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_failsfail_timeout: 定义在特定时间内失败多少次后,将该服务器标记为不可用(健康检查)。

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

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

nginx

复制代码
upstream backend_servers {
    server 192.168.1.100 max_fails=3 fail_timeout=30s;
    server 192.168.1.101 backup;
}
相关推荐
咕噜签名-铁蛋18 小时前
火山云豆包:重新定义AI交互,让智能触手可及
服务器
安当加密18 小时前
电力系统如何防“明文传输”?某电网公司用SM2+UKey构建“端到端加密”实战
服务器·数据库·安全·阿里云
石像鬼₧魂石18 小时前
Kali Linux 内网渗透:深度工程实施手册
linux·运维·服务器
sg_knight19 小时前
工厂方法模式(Factory Method)
java·服务器·python·设计模式·工厂方法模式·工厂模式
半桶水专家19 小时前
什么是 Unix Socket?
服务器·unix
LXY_BUAA20 小时前
《嵌入式操作系统》_内核编译练习与配置文件讲解_20260119
linux·运维·服务器
xlq2232221 小时前
4.LInux权限
linux·运维·服务器
txinyu的博客21 小时前
(续篇):手写 C++ 完整 HTTP/1.1 服务器
服务器·网络协议·http
Bdygsl21 小时前
Linux(10)—— 进程控制(等待)
linux·运维·服务器
c++逐梦人21 小时前
进程的优先级与切换
linux·服务器·操作系统