technology

LVS 与 HAProxy 完整深度详解

·11 分钟阅读·4264 字
📋 目录

LVS 与 HAProxy 完整深度详解

核心概念 LVS 是 Linux 内核四层负载均衡器,HAProxy 是七层代理软件,两者在高可用架构中常配合使用。

1. 基础定位分层

1.1. LVS(Linux Virtual Server)

四层负载均衡(传输层,基于内核netfilter/ipvs模块)
工作在 TCP/IP 四层,只处理 IP + 端口,不解析HTTP协议,转发性能极强,支撑百万并发。
运行在内核态,几乎无CPU消耗,适合高并发大流量入口。

1.2. HAProxy

七层负载均衡(应用层,用户态程序)
完整解析 HTTP/HTTPS/TCP/MQTT 等应用协议,可基于域名、URL、Cookie、Header 分流;
四层、七层都支持,功能丰富,Web业务主流反向代理。

2. LVS 完整详解

2.1. 核心架构组成

  1. VS VirtualServer 调度器(Director)
    负载均衡入口机器,内核ipvs模块做数据包转发;
  2. RS RealServer 真实后端业务服务器
    提供业务服务(Nginx、Tomcat、Redis等);
  3. 共享VIP:对外统一访问虚拟IP,用户只访问VIP。

2.2. LVS 三种工作模式(核心考点)

2.2.1. (1)NAT 模式(网络地址转换)

原理
用户请求 → VS(VIP) → DNAT 改目的IP转发给RS;
RS回包 → SNAT 修改源IP为VS内网IP,经过VS回传给客户端。

  • 所有进出流量都经过VS,VS容易成为带宽瓶颈;
  • RS网关必须指向VS内网IP;
  • 后端RS可以跨网段;
  • 四层均可,简单易部署,中小流量场景。

缺点:双向流量过VS,大流量带宽瓶颈。

2.2.2. (2)DR 直接路由模式(生产最常用)

原理
入流量:用户→VS,仅修改二层MAC地址,转发给同网段RS;
出流量:RS直接把响应包发给客户端,不经过VS

  • 只有入站流量经过调度器,出站直回,无带宽瓶颈;
  • VS只处理请求包,CPU消耗极低,支撑超大并发;
  • 限制:VS与所有RS必须同一局域网
  • RS需配置本地VIP环回抑制ARP广播(arp_ignore/arp_announce)。

生产首选,互联网高并发四层入口标准方案

2.2.3. (3)TUN 隧道模式

IPIP隧道封装,VS把数据包封装新IP头发给跨机房RS;
RS解封装后处理,响应直回客户端;
适用:跨机房异地多活后端;
缺点:内核IPIP隧道有性能损耗,配置复杂,极少使用。

2.3. LVS 十种调度算法(常用4种)

  1. RR 轮询:依次分发,均等分发,不考虑权重
  2. WRR 加权轮询:根据机器性能设置权重,高配机器承载更多流量
  3. LC 最小连接:连接数少的RS优先分发
  4. WLC 加权最小连接(默认推荐):连接数+权重综合,线上标配
  5. SH 源IP哈希:同一客户端IP固定分配同一RS(会话保持)
  6. DH 目的IP哈希、SED、NQ等线下极少用

2.4. LVS 优缺点

2.4.1. 优点

  1. 内核态转发,性能极高,单机几十万并发无压力;
  2. 仅四层转发,CPU占用极低;
  3. 支持TCP/UDP全四层流量(数据库、MQ、游戏长连接);
  4. 稳定性极强,适合全站流量入口。

2.4.2. 缺点

  1. 四层无法解析HTTP,不能按域名、URL、Cookie分流;
  2. 无健康检查、会话保持弱,需配合脚本/keepalived;
  3. 不能处理HTTPS解密、SSL卸载;
  4. DR模式必须同网段,跨机房部署麻烦。

2.5. LVS 高可用配套 Keepalived

LVS本身无故障转移能力,搭配Keepalived实现:

  1. VIP漂移(MASTER故障,BACKUP抢占VIP);
  2. 自动配置ipvs规则;
  3. RS后端健康检查,故障机器自动剔除调度列表;
  4. VRRP协议实现双机热备,消除调度器单点。

3. HAProxy 完整深度详解

3.1. 分层能力

  • 四层模式:mode tcp,纯端口转发(类似简易LVS);
  • 七层模式:mode http,完整解析HTTP/HTTPS。

3.2. 三大核心配置段

  1. global 全局段:进程、最大连接、日志、系统参数;
  2. defaults 默认模板:统一负载均衡、健康检查、超时、重试规则;
  3. frontend 前端监听:对外暴露端口、VIP、ACL分流规则;
  4. backend 后端池:真实RS服务器、权重、健康检查;
  5. listen 一体化(frontend+backend合并简写)。

3.3. 七层核心特色功能(LVS不具备)

  1. SSL 证书卸载
    前端443解密HTTPS,后端走明文80,节省后端机器CPU;
    支持证书动态加载、多域名SNI。
  2. 基于HTTP内容分流 ACL
  • 按域名分流:www.a.com / admin.a.com 不同后端;
  • 按URL路径分流:/api 走接口服务,/static 走静态资源;
  • 按Cookie、请求头、客户端IP、参数分流灰度发布。
  1. 丰富健康检查
  • TCP端口检查;
  • HTTP GET健康探测(访问/status接口判断业务存活,不只是端口通);
  • 故障自动下线,恢复自动加入。
  1. 会话保持
  • source 源IP哈希;
  • insert cookie 植入会话Cookie,同一用户固定后端。
  1. 限流、黑白名单、请求限速
    acl匹配IP实现封禁,限制单IP最大并发、QPS防刷。
  2. 内置监控页面 stats
    /haproxy-stats 查看前后端连接、在线RS、错误码、流量统计。
  3. gzip 压缩、重定向、Header 修改添加真实客户端IP X-Forwarded-For 传递给后端Nginx。

3.4. HAProxy 调度算法

  1. roundrobin 加权轮询(默认)
  2. leastconn 最少连接(长连接服务推荐,数据库/IM)
  3. source 源IP哈希会话保持
  4. uri 按URL哈希,缓存服务固定后端

3.5. HAProxy 四层TCP场景适用

mode tcp 模式下可代理:MySQL、Redis、MQ、游戏长连接;
支持端口转发、四层健康检查、权重调度。

3.6. HAProxy 优缺点

3.6.1. 优点

  1. 七层功能完备,Web业务必备;
  2. 配置简单,开箱即用,内置监控;
  3. 支持SSL卸载、灰度、限流、分流;
  4. 同时兼容四层+七层,中小型集群单组件搞定负载均衡;
  5. 社区成熟,稳定,免费开源。

3.6.2. 缺点

  1. 用户态程序,单机并发上限低于LVS;十万连接后CPU消耗明显;
  2. 大流量入口场景性能弱于内核LVS;
  3. 四层转发无DR直回模式,所有流量经过自身,带宽易瓶颈。

4. LVS vs HAProxy 核心对比表

对比维度LVS(ipvs)HAProxy
工作层级四层传输层(内核)四层+七层(用户态)
性能极高,百万并发,CPU极低中等,十万级并发
协议解析仅IP+端口,不解析HTTP完整解析HTTP/HTTPS
SSL卸载不支持原生支持,七层核心能力
分流规则仅源/目的IP哈希域名、URL、Cookie、Header灰度分流
流量路径 DR模式入站过VS,出站直回无瓶颈双向流量全部经过代理
健康检查依赖Keepalived脚本内置HTTP/TCP深度健康检查
会话保持源IP哈希,能力弱Cookie/source多种方案
适用场景全站大流量四层入口、长连接网关Web七层反向代理、灰度、SSL卸载、中小四层TCP代理
单点高可用搭配Keepalived VRRP自身主备、也可配合Keepalived

5. 企业标准分层架构(LVS + HAProxy 组合)

5.1. 标准互联网流量架构

客户端 → LVS(DR模式四层调度器双机) → HAProxy集群(七层反向代理) → Nginx/业务服务

  1. 第一层 LVS
    承载全网海量流量,四层调度,解决高并发带宽瓶颈;双机Keepalived做VIP高可用;
  2. 第二层 HAProxy
    承接LVS转发的流量,做七层处理:SSL解密、域名分流、灰度发布、限流、监控;
    优势:兼顾LVS高性能四层转发 + HAProxy灵活七层业务能力。

5.2. 仅用HAProxy场景

中小型业务、内部服务、管理后台、灰度环境;流量不大,不需要独立四层调度层,单套HAProxy搞定所有代理需求。

5.3. 仅用LVS场景

纯四层TCP长连接集群(Redis集群、MySQL读写分离、游戏网关),无需HTTP七层处理。

6. 生产常见问题与最佳实践

6.1. LVS 生产要点

  1. DR模式必须统一配置RS环回VIP,抑制ARP广播;
  2. 搭配Keepalived实现VIP漂移与后端健康检查;
  3. 大规模集群WRR/WLC加权最小连接调度;
  4. 内网同网段优先DR,跨机房隧道TUN极少使用。

6.2. HAProxy 生产要点

  1. Web业务使用mode http,开启X-Forwarded-For传递真实客户端IP;
  2. 配置HTTPS SNI多证书,前端SSL卸载减轻后端压力;
  3. 开启业务HTTP健康检查(不要只做端口检查);
  4. 长连接服务(MySQL/Redis)使用leastconn最少连接算法;
  5. 配置监控页面,开启日志记录请求耗时、状态码用于排查;
  6. 多实例横向扩容,避免单机连接打满。

7. 面试核心速记总结

  1. LVS是四层内核负载均衡,DR模式性能最强,适合全站高并发流量入口;三种模式:DR/NAT/TUN;依赖Keepalived实现高可用;无法处理七层HTTP逻辑。
  2. HAProxy是用户态四层/七层代理,擅长Web业务SSL卸载、域名/URL灰度分流,内置完善健康检查与监控;性能弱于LVS。
  3. 标准企业架构:外层LVS四层调度 + 内层HAProxy七层业务处理,兼顾性能与灵活性。
  4. 选型区分:超大流量四层长连接选LVS;Web业务、灰度、HTTPS、中小流量直接HAProxy。

关联文档