2026.1.27--负载均衡

定义:负载均衡(Load Balancing)是现代分布式架构中的核心组件。简单来说,它就像是超市里的排队调度员:当大批顾客(流量)涌入时,调度员负责将顾客引导到不同的收银台(服务器),以确保没有任何一个柜台由于压力过大而崩溃,同时也保证顾客能以最快的速度完成结账。

使用场景:

  • 高并发(High Concurrency): 单台服务器的硬件资源(CPU、内存、带宽)是有上限的。当访问量超过单机极限时,通过负载均衡将流量分摊到多台服务器上。

  • 高可用(High Availability): 负载均衡器会持续进行健康检查。如果某台后端服务器宕机,它会自动将流量切换到健康的服务器上,实现故障自愈。

  • 水平扩展(Scalability): 业务增长时,你可以随时向集群中添加新的服务器,而不需要停机,负载均衡会自动发现并开始向新机器分配任务。

  1. 核心原理
  • 四层负载均衡(L4): 运行在 传输层。它只根据 IP 地址和端口号进行流量转发。它不解析应用层数据(如 HTTP 内容),因此速度极快,适用于对性能要求极高的底层架构。

  • 七层负载均衡(L7): 运行在 应用层。它可以识别 HTTP 头部、URL、Cookie 等信息。这使得它能做更智能的决策,比如"动静分离"(静态资源发给 A 服务器,动态接口发给 B 服务器)。

  1. 常用调度算法
  • 轮询 (Round Robin): 依次轮流分配。

  • 加权轮询 (WRR): 根据服务器性能分配权重。

  • 最少连接 (Least Connections): 优先把请求给当前最闲的服务器。

  • 一致性哈希 (Consistent Hashing): 解决服务器增减时,缓存或 Session 大规模失效的问题。

  1. 会话保持

在分布式环境下,如何确保同一个用户的请求落在同一台服务器上?

  • 客户端 IP 绑定: 源 IP 哈希。

  • Cookie 植入: 负载均衡器在响应中插入识别 ID。

  • 后端 Session 共享: 使用 Redis/Memcached 统一管理 Session。

  1. 健康检查

负载均衡器必须实时监控后端服务器的状态:

  • TCP 探测: 检查端口是否存活。

  • HTTP 探测: 检查特定的状态码(如 200 OK)。

主流工具推荐

工具名称 类型 适用场景 优势
Nginx 软件 (L7为主) 绝大多数 Web 应用、反向代理 配置极其灵活,生态丰富,插件多。
LVS 软件 (L4) 超大规模集群的入口 Linux 内核集成,性能几乎接近硬件。
HAProxy 软件 (L4/L7) 高并发、高可用环境 转发性能极高,监控统计功能非常直观。
Traefik 软件 (L7) 云原生、Kubernetes/Docker 原生支持容器发现,自动生成配置。
F5 BIG-IP 硬件 金融、电信等大型企业 极高的吞吐量和稳定性,但价格极其昂贵。
特性 TCP UDP
连接性 面向连接(需三次握手) 无连接
可靠性 (不丢失、不重复、按序) (尽力而为,可能丢包)
传输方式 字节流(无边界,自动拆分/合并) 数据报(有明确边界,原样发送)
速度 较慢(复杂的控制机制) 极快(无握手、无校验确认)
双工性 全双工点对点 一对一、一对多、多对多
资源消耗 较大(维护状态、大头部) 较小(极简头部)

官网链接:https://docs.nginx.com/nginx/admin-guide/load-balancer/

http负载均衡:

HTTP 负载均衡是一种通过在多个应用实例间分配流量来优化资源利用、最大化吞吐量、降低延迟并确保容错能力的各种配置技术。

1. 核心概念与基础配置

HTTP 负载均衡的核心在于将流量代理到一组后端服务器(Upstream Group)。

定义后端组 (Upstream) :使用 upstream 指令定义一组服务器。你可以在这里列出后端服务器的域名或 IP 地址。

配置代理 (Proxy Pass) :在 NGINX 的虚拟服务器(server 块)中,使用 proxy_pass 指令将请求转发到定义好的 upstream

基础配置示例

复制代码
http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server 192.0.0.1 backup; # 备用服务器
    }
    
    server {
        location / {
            proxy_pass http://backend; # 转发流量
        }
    }
}
2. 负载均衡算法(流量分配策略)

决定流量如何分配的关键在于选择合适的算法。NGINX 支持多种策略:

轮询 (Round Robin)默认方法。请求按顺序均匀分配给服务器,会考虑服务器权重。

最少连接 (Least Connections):将请求发送给当前活动连接数最少的服务器,适合处理长连接请求。

IP 哈希 (IP Hash):根据客户端 IP 地址计算哈希值来分配服务器。这能保证来自同一 IP 的请求总是落在同一台服务器上(除非该服务器宕机)。

通用哈希 (Generic Hash) :根据用户定义的键(如 URL request_uri)来分配,支持一致性哈希(Consistent Hashing),适合缓存服务器场景。

高级算法 (仅限 NGINX Plus)

最短时间 (Least Time):基于平均响应时间(Header 或 Full response)和连接数选择服务器。

随机 (Random):随机选择服务器,可结合"最少连接"或"最短时间"作为二级筛选标准。

3. 流量控制与优化

除了简单的分配,你还可以精细控制流量的权重和流向:

服务器权重 (Weights) :通过 weight 参数设置。例如 weight=5 的服务器接收的流量是默认服务器(weight=1)的 5 倍。

慢启动 (Server Slow-Start)(NGINX Plus 功能) 当服务器恢复或新加入时,在指定时间内(如 slow_start=30s)逐渐增加其流量权重,防止瞬间流量压垮刚启动的服务器。

连接限制 :使用 max_conns 限制单台服务器的最大连接数。配合 queue 指令,可以将超过限制的请求放入队列排队,避免直接报错

4. 会话保持 (Session Persistence)

对于有状态应用(如购物车),需要确保用户在同一会话中的请求始终被路由到同一台服务器。

Sticky Cookie:NGINX 生成一个 cookie 植入客户端,后续请求携带该 cookie 以识别目标服务器。

Sticky Route:根据请求中的特定参数(如 URL 或已有 Cookie)路由到指定服务器。

Sticky Learn(高级模式) NGINX 自动学习应用生成的 Session ID 与服务器的对应关系,并将映射表存储在内存共享区中,无需向客户端植入新 Cookie

5. 架构可靠性与监控

在生产环境中,负载均衡不仅仅是转发,还需要确保系统的高可用性。

共享内存区 (Zone)强烈建议配置 。通过 zone 指令,让多个 NGINX 工作进程(Worker Processes)共享后端服务器的状态(如计数器、健康状态)。如果没有它,各进程独立计数,会导致"最少连接"等算法在低负载时不准确,且无法实现动态配置。

DNS 动态负载均衡 :如果后端服务器的 IP 经常变化,可以配置 resolverresolve 参数,让 NGINX 根据 DNS 记录的 TTL 自动更新后端服务器地址,无需重启。

健康检查:配置健康检查可以自动剔除故障服务器,待其恢复后再自动加入集群(文档中提及需参考专门的 HTTP Health Checks 章节)

相关推荐
Leinwin6 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382506 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇6 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7596 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣7 小时前
智能体选型实战指南
运维·人工智能
yy55277 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ8 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔9 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密9 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20159 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑