当前位置: 首页 > news >正文

Haproxy

目录

Haproxy基础概念

一、架构分层

二、流量处理流程

三、关键特性实现

四、典型部署模式

LVS、HAProxy&Nginx的调度算法类型

一、LVS调度算法(四层负载均衡)

二、HAProxy调度算法(四层/七层负载均衡)

三、Nginx调度算法(七层负载均衡)

对比总结

Haproxy部署

一、部署流程(以Ubuntu为例)

二、配置文件详解 

 PS:haproxy核心工作机制

一、流量处理全链路

二、会话保持技术

三、关键性能优化

四、高可用实现


Haproxy基础概念

一、架构分层

  1. 前端(Frontend)
    监听客户端请求的虚拟服务,定义绑定IP/端口和ACL规则。支持多前端共存,每个前端独立配置监听策略(如HTTP/TCP模式)。

  2. 后端(Backend)
    实际服务集群的抽象,包含服务器池和调度算法。支持动态服务器列表调整,通过server指令定义节点地址、端口及权重。

  3. 流量转发引擎
    基于事件驱动的多线程模型(支持单进程/多进程),采用非阻塞I/O处理连接,单个实例可处理10万+并发连接。

二、流量处理流程

  1. 连接接收阶段

    • TCP层完成三次握手后,内核将连接交给HAProxy

    • 对HTTP模式会解析请求头,TCP模式仅处理原始字节流

  2. 规则匹配阶段

    • 按顺序执行ACL(访问控制列表)规则检查

    • 典型匹配项:源IP、URL路径、Cookie、HTTP头等

    • 支持use_backend动态路由和default_backend默认路由

  3. 负载均衡阶段

    • 根据选定算法(如roundrobin/leastconn)选择后端服务器

    • 记录会话状态(stick-table)实现会话保持

  4. 流量转发阶段

    • 四层模式:直接转发TCP数据包

    • 七层模式:重建HTTP请求头,支持X-Forwarded-For等头注入

三、关键特性实现

  1. 健康检查机制

    • 主动检查:定期发送TCP SYN/HTTP GET请求

    • 被动检查:监测连接超时/错误响应

    • 慢启动(slowstart):新节点逐步增加流量

  2. 会话保持技术

    • 源IP哈希:基于客户端IP的会话绑定

    • Cookie插入:动态生成JSESSIONID等Cookie

    • 表持久化:stick-table存储会话映射关系

  3. 高性能优化

    • 零拷贝技术:减少内核态-用户态数据复制

    • 缓冲池管理:预分配内存避免频繁申请

    • SSL加速:支持OpenSSL硬件加速

四、典型部署模式

客户端 → HAProxy(主动/被动集群)├─→ Web服务器集群(HTTP模式)├─→ 数据库读写分离(TCP模式)└─→ 微服务网关(API路由)

LVS、HAProxy&Nginx的调度算法类型

一、LVS调度算法(四层负载均衡)

  1. 轮询(RR)
    按顺序将请求均匀分配到后端服务器,不考虑服务器负载差异。
  2. 加权轮询(WRR)
    根据服务器权重分配请求,性能高的服务器权重更高。
  3. 最少连接(LC)
    将请求分配给当前连接数最少的服务器。
  4. 加权最少连接(WLC)
    在LC基础上引入权重,优先选择(当前连接数/权重)最小的服务器。
  5. 源地址哈希(SH)
    根据客户端IP哈希值固定分配到同一服务器,适用于会话保持场景。

二、HAProxy调度算法(四层/七层负载均衡)

  1. Round Robin(RR)
    类似LVS的轮询,支持动态调整权重。
  2. Least Connections(LC)
    优先选择连接数最少的后端。
  3. Source Hash(SH)
    基于源IP哈希实现会话保持。
  4. URI Hash
    根据请求URI哈希分配,适用于CDN场景。
  5. 动态算法(如Dynamic Round Robin)
    根据服务器响应时间动态调整权重。

三、Nginx调度算法(七层负载均衡)

  1. 轮询(Round Robin)
    默认算法,均匀分配请求。
  2. 加权轮询(Weighted Round Robin)
    通过配置权重调整分配比例。
  3. IP Hash
    基于客户端IP哈希固定分配,解决Session问题。
  4. Least Connections
    类似HAProxy的LC算法。
  5. 一致性哈希(需第三方模块)
    减少后端节点变动对哈希分布的影响。

对比总结

  • LVS‌:专注四层,算法简单高效,适合高并发但无应用层逻辑。
  • HAProxy‌:支持四/七层,算法丰富,适合复杂业务场景。
  • Nginx‌:七层为主,算法灵活,集成Web服务能力。

Haproxy部署

一、部署流程(以Ubuntu为例)

  1. 安装
dnf -y install haproxy# 安装官方维护版本 
  1. 目录结构
/etc/haproxy/ 
├── haproxy.cfg # 主配置文件 
├── errors/ # 自定义错误页面 
└── ssl/ # SSL证书存放目录 
  1. 服务管理
sudo systemctl enable haproxy # 开机自启 
sudo systemctl start haproxy # 启动服务 
sudo haproxy -c -f /etc/haproxy/haproxy.cfg # 配置文件语法检查

二、配置文件详解 

# 全局配置段
globallog /dev/log local0 info   # 日志输出到syslog的local0设施maxconn 10000              # 单进程最大连接数user haproxy               # 运行用户group haproxy              # 运行组daemon                     # 以守护进程模式运行stats socket /run/haproxy/admin.sock mode 660 level admin  # 管理接口# 默认参数段
defaultsmode http                  # 默认工作模式(http/tcp)timeout connect 5s         # 连接后端超时时间timeout client 30s         # 客户端空闲超时timeout server 30s         # 服务端响应超时log global                 # 继承全局日志配置option httplog             # 记录HTTP日志option dontlognull         # 不记录空连接日志# 监控页面配置
frontend statsbind *:8404                # 监控页面监听端口stats enable               # 启用统计页面stats uri /haproxy?stats   # 访问路径stats refresh 10s          # 自动刷新间隔stats admin if TRUE        # 启用管理功能# 前端服务配置
frontend web_frontbind *:80                  # 监听80端口bind *:443 ssl crt /etc/haproxy/ssl/example.com.pem  # SSL配置acl is_static path_end -i .jpg .css .js  # 定义静态文件ACL规则use_backend static_servers if is_static  # 静态请求路由default_backend app_servers             # 默认路由# 后端服务器池
backend app_serversbalance roundrobin         # 使用轮询算法server app1 192.168.1.10:8080 check maxconn 100  # 节点1带健康检查server app2 192.168.1.11:8080 check backup       # 备用节点backend static_serversbalance leastconn          # 最少连接算法server static1 192.168.1.20:80 checkserver static2 192.168.1.21:80 check

 PS:haproxy核心工作机制

一、流量处理全链路

  1. TCP/UDP流量代理
    四层模式下直接转发原始数据包,通过内核级TCP协议栈优化实现微秒级延迟。支持TCP连接复用(connection pooling)降低后端服务器压力。

  2. HTTP协议解析
    七层模式下完整解析HTTP/1.1和HTTP/2头部,支持:

    • 请求/响应重写(header manipulation)
    • 基于ACL的内容路由(路径/域名/Cookie)
    • 压缩/解压缩(gzip/deflate)
  3. SSL/TLS卸载
    支持TLS 1.3终止与透传,通过OpenSSL引擎实现:

    • 证书热加载(SIGUSR2信号触发)
    • SNI多域名托管
    • 会话票据复用(session ticket reuse)

二、会话保持技术

  1. 源IP哈希
    对客户端IP进行一致性哈希计算,确保相同IP始终路由到固定后端。

  2. Cookie注入
    动态插入SRVID Cookie(如SERVERID=app1),后端服务器需配合识别。

  3. Stick-table持久化
    内存表中存储五元组映射关系,支持:

    • 会话超时控制(stick-table timeout)
    • 跨进程同步(peers协议)
    • 分布式会话一致性

三、关键性能优化

  1. 零拷贝转发
    使用Linux内核的splice()系统调用避免数据拷贝。

  2. 事件驱动模型
    单进程非阻塞I/O架构,通过epoll/kqueue实现C10K级别并发。

  3. 内存管理
    预分配缓冲池(buffer pool)防止内存碎片,每个连接仅消耗约1KB内存。

四、高可用实现

客户端 → Keepalived VIP 
├─→ HAProxy主节点(active) 
└─→ HAProxy备节点(backup) ↓ 后端服务器集群(健康检查+自动熔断)

相关文章:

  • 不用 apt 的解决方案(从源码手动安装 PortAudio)
  • MiniMax V-Triune让强化学习(RL)既擅长推理也精通视觉感知
  • MyBatisPlus--快速入门
  • 【仿muduo库实现并发服务器】实现时间轮定时器
  • 接口自动化测试用例的编写方法
  • [paddle]paddle2onnx无法转换Paddle3.0.0的json格式paddle inference模型
  • Kotlin JVM 注解详解
  • ElasticSearch迁移至openGauss
  • Spring Boot 整合 Spring Security
  • 【软件】在 macOS 上安装 MySQL
  • Vue3使用vue-web-screen-shot实现截图功能
  • 第六十一节:深度学习-使用 OpenCV DNN 模块
  • 短剧系统开发文案:打造沉浸式互动娱乐新体验
  • Vue Element tree lable组合展示
  • Android JNI开发
  • React基础教程(13):路由的使用
  • HTML5 列表、表格与媒体元素、页面结构分析
  • Android全局网络监控最佳实践(Kotlin实现)
  • t015-预报名管理系统设计与实现 【含源码!!!】
  • Hive在实际应用中,如何选择合适的JOIN优化策略?
  • 做文学网站用什么域名/小说推广平台有哪些
  • 网站单个页面紧张搜索引擎蜘蛛/搜索引擎营销简称seo
  • 御花园网站建设公司/线上培训课程
  • 12306网站多少钱做的/石家庄疫情太严重了
  • 免费做司考真题的网站/近期国际热点大事件
  • 南京门户网站制作/域名注册服务网站哪个好