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;
}
相关推荐
江公望10 小时前
Ubuntu htop命令,10分钟讲清楚
linux·服务器
哎呦,帅小伙哦10 小时前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
张小姐的猫11 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
YuanDaima204811 小时前
Linux 进阶运维与 AI 环境实战:进程管理、网络排错与 GPU 监控
linux·运维·服务器·网络·人工智能
lolo大魔王13 小时前
Linux 数据文件处理实战:排序、搜索、压缩、归档一站式详解
linux·运维·服务器
1892280486113 小时前
NY382固态MT29F32T08GSLBHL8-24QM:B
大数据·服务器·人工智能·科技·缓存
xhbh66613 小时前
网关端口映射和路由器端口转发有什么区别?配置要点全解析
运维·服务器·网络·智能路由器·端口映射·映射·无痕网关
STDD13 小时前
Soulmask《灵魂面具》 专用服务器搭建教程
运维·服务器·github
半壶清水14 小时前
用P4 Tutorial、BMv2 和 Mininet‌解析网络第一集------模拟环境搭建
运维·服务器·网络·网络协议·tcp/ip
.YYY14 小时前
RHCE--Linux循环执行的例行性任务:crontab从入门到精通
linux·运维·服务器