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

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) ↓ 后端服务器集群(健康检查+自动熔断)
http://www.xdnf.cn/news/10080.html

相关文章:

  • 白皮精读:214页数据安全治理白皮书6.0【附全文阅读】
  • 超级对话3:大跨界且大综合的学问融智学应用场景述评(不同第三方的回应)之三
  • 低碳理念在道路工程中的应用-预制路面
  • P23:实现天气预测
  • 宽带不给公网IP?本地内网的网络服务怎么让外网访问?
  • [python] 最大公约数 和 最小公倍数
  • PostgreSQL日常运维
  • Linux | Shell脚本的常用命令
  • 计算机一次取数过程分析
  • AAAI 2025论文分享│STD-PLM:基于预训练语言模型的时空数据预测与补全方法
  • 八N皇后问题
  • 抗辐照加固CANFD芯片:以车规级设计提升商业航天系统可靠性
  • HCIP:MPLS静态LSP的配置及抓包
  • @Docker Compose部署Alertmanager
  • 基于Python的单斜式ADC建模与仿真分析
  • nginx日志分析笔记
  • 每日一题:H指数
  • Vue 3前沿生态整合:WebAssembly与TypeScript深度实践
  • systemctl实现定时任务(比crontab好用)
  • Python中的变量、赋值及函数的参数传递概要
  • ch12 课堂参考代码 及 题目参考思路
  • E. Melody 【CF1026 (Div. 2)】 (求欧拉路径之Hierholzer算法)
  • shadcn/ui
  • 探索智能仓颉:Cangjie Magic开发体验全记录
  • 昂瑞微在蓝牙亚洲大会上隆重推出新一代超低功耗蓝牙SoC芯片OM6627
  • 基于微服务架构的社交学习平台WEB系统的设计与实现
  • 换行符在markdown格式时异常
  • 无人机视角海上漂浮物检测与人员救援检测数据集VOC+YOLO格式2903张6类别
  • Linux安装及管理程序
  • 经营分析会,财务该怎么做?