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

HAProxy 完整指南:简介、负载均衡原理与安装配置

HAProxy 指南:简介、负载均衡原理与安装配置

在这里插入图片描述

一、HAProxy 核心简介

HAProxy 是一款用 C 语言编写的开源软件,核心定位是高可用(High Availability)负载均衡(Load Balancing),同时支持 TCP 四层和 HTTP 七层应用代理,是企业级架构中常用的流量调度工具。

1. 核心特性

  • 高性能:采用“事件驱动的单一进程模型”,能高效处理数万并发连接(避免多进程/多线程的内存、锁竞争问题)。
  • 多场景支持
    • 四层(TCP)代理:适用于 SSL、SSH、MySQL 等基于 TCP 协议的服务。
    • 七层(HTTP)代理:支持会话保持、URL 路由、HTTP 头修改等精细化操作,特别适合高负载 Web 站点。
  • 安全性:可隐藏后端真实服务器 IP,避免直接暴露到公网,降低攻击风险。
  • 广泛落地:GitHub、Stack Overflow、Twitter、亚马逊 AWS 等知名平台均在使用。

2. 架构优势(事件驱动模型)

HAProxy 采用“单一进程事件驱动模型”,相比传统多进程/多线程模型,优势如下:

对比维度事件驱动模型(HAProxy)多进程/多线程模型
资源占用低(无内存碎片、无锁竞争)高(进程切换、锁竞争消耗资源)
并发处理能力强(支持数万并发连接)弱(通常仅支持数千并发)
多核适配需优化(需配置多实例利用多核)天然适配(但资源消耗高)

二、负载均衡层级划分(四层 vs 七层)

负载均衡按“OSI 网络模型”可分为不同层级,核心差异在于“调度依据”和“处理粒度”,HAProxy 支持四层和七层调度,以下是完整层级对比:

层级技术核心调度依据支持产品适用场景
二层(L2)虚拟 MAC 地址数据链路层(MAC 地址)F5、华为云负载均衡同一局域网内的设备调度(较少用)
三层(L3)虚拟 IP 地址网络层(IP 地址)F5、华为云负载均衡跨网段的简单 IP 路由(较少用)
四层(L4)TCP 端口传输层(IP + 端口)HAProxy、LVS、F5MySQL、Redis、SSL 等 TCP 服务
七层(L7)HTTP 协议应用层(URL、Host、Cookie)HAProxy、Nginx、ApacheWeb 服务(如电商网站、API 接口)

关键区别:四层 vs 七层

  • 四层负载均衡:仅关注“IP + 端口”,不解析应用层数据(如 HTTP 头),速度快、延迟低,但功能简单。
  • 七层负载均衡:会解析应用层数据(如 URL、Cookie),可实现“URL 路由、会话保持、HTTPS 卸载”等精细化操作,但速度略慢于四层。

三、HAProxy 安装与配置(源码安装完整步骤)

HAProxy 支持 yum 安装(简单但版本可能较旧)和 源码安装(灵活,可自定义功能),以下是源码安装完整版(基于 CentOS 系统)。

1. 环境准备(依赖安装)

首先安装编译依赖和系统工具:

# 安装编译依赖(gcc、pcre 等)
[root@dr ~]# yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel gcc-c++ zlib-devel lua# 创建 HAProxy 专用用户(无登录权限,安全)
[root@dr ~]# useradd -r -M -s /sbin/nologin haproxy

2. 源码下载与编译安装

# 1. 下载源码包(可从官方源或 Fedora 源下载,此处以 2.1.3 版本为例)
wget https://src.fedoraproject.org/repo/pkgs/haproxy/haproxy-2.1.3.tar.gz/sha512/...(完整链接需自行补充)# 2. 解压源码包
[root@dr ~]# tar -xzf haproxy-2.1.3.tar.gz
[root@dr ~]# cd haproxy-2.1.3/
[root@dr haproxy-2.1.3]# ls
!         contrib       ebtree    include  MAINTAINERS  reg-tests  src      VERDATE
BRANCHES   CONTRIBUTING  examples  INSTALL  Makefile     ROADMAP    SUBVERS  VERSION
CHANGELOG  doc           haproxy   LICENSE  README       scripts    tests# 3. 编译(开启 OpenSSL、Zlib、PCRE 等功能,适配 systemd)
[root@dr haproxy-2.1.3]# make clean
[root@dr haproxy-2.1.3]# make -j $(grep 'processor' /proc/cpuinfo | wc -l) \  # 按 CPU 核心数并行编译TARGET=linux-glibc \  # 目标系统USE_OPENSSL=1 \       # 开启 HTTPS 支持USE_ZLIB=1 \          # 开启压缩支持USE_PCRE=1 \          # 开启正则表达式支持USE_SYSTEMD=1         # 支持 systemd 管理# 4. 安装(指定安装路径)
[root@dr haproxy-2.1.3]# make install PREFIX=/usr/local/haproxy# 5. 复制二进制文件到系统路径(方便调用)
[root@dr haproxy-2.1.3]# cp haproxy /usr/sbin/

3. 系统内核参数优化(关键)

HAProxy 需调整 Linux 内核参数,确保高并发支持:

# 1. 编辑内核参数配置文件
[root@dr ~]# vim /etc/sysctl.conf# 2. 添加以下参数(粘贴到文件末尾)
net.ipv4.ip_nonlocal_bind = 1  # 允许绑定非本地 IP(虚拟 IP 必备)
net.ipv4.ip_forward = 1        # 开启 IP 转发(四层代理必备)# 3. 生效内核参数
[root@dr ~]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1

4. 核心配置文件(/etc/haproxy/haproxy.cfg)

HAProxy 配置文件分为 5 个核心段,各段职责明确,以下是“基础 Web 负载均衡 + 监控页面”的完整配置:

[root@dr ~]# /etc/haproxy/haproxy.cfg# -------------------------- 1. 全局配置(global)--------------------------
# 进程级配置,与操作系统相关
globallog 127.0.0.1 local0 info  # 日志输出:本地 0 设备,级别 infomaxconn 20480              # 全局最大并发连接数pidfile /var/run/haproxy.pid  # PID 文件路径user haproxy               # 运行用户group haproxy              # 运行用户组daemon                     # 后台运行模式# -------------------------- 2. 默认配置(defaults)--------------------------
# 所有 frontend/backend/listen 会继承此配置,可被局部覆盖
defaultsmode http                  # 默认运行模式:七层 HTTP(四层需改为 tcp)log global                 # 继承 global 段的日志配置option dontlognull         # 不记录空请求日志option httpclose           # 关闭 HTTP 长连接(每次请求后断开)option httplog             # 记录 HTTP 详细日志(含 URL、状态码等)option redispatch          # 服务下线后,重新分配请求到其他节点balance roundrobin         # 负载均衡算法:轮询(四层/七层通用)# 超时配置(单位:s=秒,ms=毫秒)timeout connect 10s        # 与后端服务器连接超时timeout client 10s         # 客户端请求超时timeout server 10s         # 后端服务器响应超时timeout check 10s          # 健康检查超时maxconn 60000              # 每个前端/后端的最大并发连接retries 3                  # 连接失败重试次数(3次失败则标记节点下线)# -------------------------- 3. 监控页面配置(listen)--------------------------
# listen 是 frontend + backend 的组合,适合简单场景(如监控)
listen admin_statsbind 0.0.0.0:8189          # 监控页面端口(可自定义)stats enable               # 开启监控功能mode http                  # 监控页面用 HTTP 模式log global                 # 继承日志配置stats uri /haproxy_stats   # 监控页面 URL(访问路径)stats realm Haproxy\ Statistics  # 监控页面提示语stats auth admin:admin     # 监控页面登录账号密码(admin:admin)stats admin if TRUE        # 允许手动启用/禁用后端节点stats refresh 30s          # 监控页面自动刷新间隔(30秒)# -------------------------- 4. Web 负载均衡配置(listen)--------------------------
# 前端监听 80 端口,后端转发到两台 Web 服务器(rs1、rs2)
listen webclusterbind 0.0.0.0:80            # 前端监听端口(Web 服务默认 80)mode http                  # 七层 HTTP 模式log global                 # 继承日志配置maxconn 3000               # 此负载均衡实例的最大并发balance roundrobin         # 负载均衡算法:轮询cookie SESSION_COOKIE insert indirect nocache  # 会话保持(基于 Cookie)# 后端真实服务器(check 表示开启健康检查)server rs1 192.168.100.20:80 check  # 第一台 Web 服务器server rs2 192.168.100.30:80 check  # 第二台 Web 服务器

5. 配置文件核心段说明

HAProxy 配置文件的 5 个核心段,职责划分清晰:

配置段作用适用场景
global全局配置(进程、日志、用户等)所有实例共享的基础配置
defaults默认配置(超时、负载算法等)为后续段提供默认值,减少重复配置
frontend前端请求接收(端口、ACL 规则)复杂场景(如多域名、多 URL 路由)
backend后端服务集群(真实服务器、健康检查)复杂场景(如多组后端服务分离)
listenfrontend + backend 组合简单场景(如监控页面、单组后端)

6. 服务管理(systemd 配置)

为 HAProxy 配置 systemd 服务,方便启停和开机自启:

# 1. 创建 systemd 服务文件
vim /usr/lib/systemd/system/haproxy.service# 2. 写入以下内容
[Unit]
Description=HAProxy Load Balancer  # 服务描述
After=syslog.target network.target  # 依赖服务(日志、网络)[Service]
# 启动前检查配置文件语法
ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
# 启动命令(-Ws 表示多进程模式,适配多核)
ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid
# 重载配置(不中断服务)
ExecReload=/bin/kill -USR2 $MAINPID[Install]
WantedBy=multi-user.target  # 多用户模式下开机自启# 3. 生效配置并启动服务
systemctl daemon-reload       # 重新加载 systemd 配置
systemctl start haproxy       # 启动 HAProxy
systemctl enable haproxy      # 开机自启
systemctl status haproxy      # 查看服务状态

7. 日志配置(rsyslog)

HAProxy 日志需通过 rsyslog 存储,配置步骤如下:

# 1. 编辑 rsyslog 配置文件
vim /etc/rsyslog.conf# 2. 添加日志规则(将 local0 设备的日志写入 /var/log/haproxy.log)
local0.*        /var/log/haproxy.log# 3. 重启 rsyslog 服务
systemctl restart rsyslog
systemctl enable rsyslog# 4. 验证日志(启动 HAProxy 后,查看日志是否生成)
tail -f /var/log/haproxy.log

四、验证与使用

1. 监控页面访问

在浏览器中访问 http://HAProxy服务器IP:8189/haproxy_stats,输入账号密码(admin:admin),可查看(本实验HAProxy服务器IP为192.168.100.10):
在这里插入图片描述
在这里插入图片描述

  • 后端服务器状态(在线/离线)
  • 连接数、请求数、错误数等指标
  • 可手动启用/禁用后端节点(需开启 stats admin if TRUE

2. 负载均衡验证

  1. 确保后端两台 Web 服务器(192.168.100.20、192.168.100.30)的 80 端口正常提供服务(本实验已经在两台 Web 服务器上部署了http服务,分别写入网页内容为RS1和RS2)。
  2. 在客户端浏览器访问 http://HAProxy服务器IP,多次刷新页面,观察是否轮询到两台后端服务器(可通过修改 index.html 内容区分)。
    在这里插入图片描述
    在这里插入图片描述

五、关键补充:负载均衡算法

HAProxy 支持多种负载均衡算法,核心算法适用场景如下:

算法名称原理适用场景
roundrobin轮询(依次分配请求)后端服务器配置一致的场景
source源 IP 哈希(同一 IP 固定分配到同一节点)需要会话保持的场景(如未开启 Cookie)
leastconn最少连接(分配到连接数最少的节点)后端服务器配置不一致的场景
uriURL 哈希(同一 URL 固定分配到同一节点)静态资源缓存场景(如图片服务器)

通过以上步骤,即可完成 HAProxy 的安装、配置与验证,实现 Web 服务的高可用和负载均衡。实际生产环境中,需根据业务需求调整“超时时间、并发数、负载算法”等参数,并做好日志监控与故障告警。

http://www.dtcms.com/a/398003.html

相关文章:

  • 领码课堂 | React 核心组件与高级性能优化全实战指南
  • 涡轮丝杆升降机的丝杆材质有哪些?
  • 前端笔记:vue中 Map、Set之间的使用和区别
  • 中美关系最新消息视频重庆seo优化公司
  • 【Cesium 开发实战教程】第六篇:三维模型高级交互:点击查询、材质修改与动画控制
  • 英雄联盟视频网站源码做产品设计之前怎么查资料国外网站
  • Vue3-接入飞书H5应用
  • 四川省建设厅网站川北医学院广告网站怎么建设
  • 七彩喜智慧养老:科技向善,让晚年生活绽放“喜”悦之光
  • 模型驱动的 AI Agent架构:亚马逊云科技的Strands框架技术深度解析
  • 【数据结构】——外部排序(K路归并)
  • 【观成科技】活跃黑产团伙“黑猫”攻击武器加密通信分析
  • 高斯过程(Gaussian Process)回归:一种贝叶斯非参数方法
  • 微算法科技(NASDAQ MLGO)创新基于账户加权图与后量子密码学的区块链
  • 中国银行信息科技岗位笔试
  • WXML 编译错误修复总结
  • 怎么给网站wordpress游戏网站策划书
  • Halcon学习--(3)图像阈值处理
  • 知识导航新体验:Perplexica+cpolar 24小时智能服务
  • 全面解析Redis分布式锁
  • 自由学习记录(103)
  • 大模型部署基础设施搭建 - Dify
  • 没有网站怎么推广企业建设网站能否报销
  • 天津道路运输安全员考试报名条件
  • dbpystream webapi: 从阿里云福州站点到上海站点的迁移之旅
  • 解读 2025 《可信数据空间 使用控制技术要求》
  • Java多线程编程:阻塞队列、wait-notify锁协调机制、线程安全[条件产生渡送执行]
  • 绕过UAC开机自启动程序方法
  • 东莞市南城装饰工程东莞网站建设系统门窗品牌排行前十名
  • Nginx负载均衡算法与IP透传、跨域实战指南