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

负载均衡群集---Haproxy

目录

一、HAproxy

一、概念

二、核心作用

三、主要功能特性

四、应用场景

五、优势与特点

二、 案例分析

1. 案例概述

2. 案例前置知识点

(1)HTTP 请求

(2)负载均衡常用调度算法

(3)常见的 web 群集调度器

三、实验案例(HAproxy 搭建Web群集)


一、HAproxy

一、概念

HAProxy 是一款 开源、高性能的负载均衡与反向代理工具,基于 C 语言 开发,支持 四层(传输层) 和 七层(应用层) 流量处理,广泛用于高并发场景下的服务调度、流量分发和系统高可用性保障。

  • 核心定位:介于客户端和后端服务器之间的中间层,将客户端请求均匀分配到多个后端服务器,同时监控服务器状态,确保请求高效、可靠地处理。
  • 官网:www.haproxy.org
二、核心作用
  1. 负载均衡(Load Balancing)
    • 将客户端请求按预设算法(如轮询、最少连接、源 IP 哈希等)分发到多个后端服务器,避免单点压力过大,提升系统吞吐量。
  2. 高可用性(High Availability)
    • 通过 健康检查(如定期发送心跳包)实时监测后端服务器状态,自动隔离故障节点,待节点恢复后重新纳入负载均衡池,保障服务连续性。
  3. 会话保持(Session Persistence)
    • 基于 Cookie、源 IP 或请求头 等信息,将同一用户的请求固定路由到同一后端服务器,确保会话状态一致(如登录用户的请求始终由同一服务器处理)。
  4. 协议处理与转发
    • 四层代理:处理 TCP/UDP 流量,基于 IP + 端口转发(如数据库、Redis 服务)。
    • 七层代理:解析 HTTP/HTTPS 协议,基于 URL、Header、Cookie 等应用层信息精细化路由(如 Web 服务、API 网关)。
  5. 流量优化与安全
    • 支持 HTTP 压缩、SSL 卸载(HTTPS 解密)、请求缓存,减少服务器负载;
    • 提供基本的 ACL(访问控制列表),阻挡恶意流量(如限制特定 IP 访问)。
三、主要功能特性
特性说明
多模式支持- TCP 模式(四层):适用于任意基于连接的协议(如 MySQL、MQ);
- HTTP 模式(七层):支持 HTTP/HTTPS 协议解析与处理。
负载均衡算法支持轮询(Round Robin)、最少连接(Least Connections)、源 IP 哈希(Source Hash)、URI 哈希等多种算法。
健康检查机制支持 HTTP/HTTPS、TCP、ICMP 等协议的健康检查,可自定义检查频率、超时时间。
动态配置与热更新支持通过配置文件或 API 动态调整后端服务器列表,无需重启服务即可生效。
监控与统计内置 stats 页面,实时展示请求量、错误率、服务器状态等指标,便于运维监控。
连接管理优化支持连接复用(Keep-Alive)、连接队列管理,减少 TCP 三次握手开销,提升并发性能。
四、应用场景
  1. Web 服务负载均衡
    • 作为 Web 服务器(如 Nginx、Tomcat)的前端代理,按 URL 路径、用户地域等规则分流请求。
  2. API 网关与微服务架构
    • 在微服务架构中,对 API 请求进行路由、流量控制和熔断处理,保障服务稳定性。
  3. TCP 协议服务代理
    • 为数据库(如 MySQL、PostgreSQL)、消息队列(如 Kafka、RabbitMQ)提供四层负载均衡,提升连接效率。
  4. 混合架构中的中间层
    • 常与 LVS(四层负载均衡) 结合使用:LVS 作为流量入口进行初步分发,HAProxy 作为二级代理进行七层精细化处理。
五、优势与特点
  • 高性能:单台服务器可支持数万并发连接,吞吐量接近硬件负载均衡器(如 F5)。
  • 轻量级与灵活性:配置简单,支持复杂路由逻辑,适合中小规模集群和复杂业务场景。
  • 稳定性:在金融、电商等对可用性要求高的行业中广泛使用(如 GitHub、Spotify 等)。
  • 开源免费:社区活跃,文档丰富,支持二次开发。

典型架构 :

客户端 <----> HAProxy(负载均衡与代理) <----> 后端服务器集群(Web/API/数据库)↑└── 健康检查 & 动态调度

二、 案例分析

1. 案例概述

HAproxy 是目前比较流行的群集调度工具,同类群集调度有很多,如LVS和Nginx.

LVS性能最好,但部署复杂;Nginx的upstream 模块支持群集功能但对群集节点健康检查功能不强,高并发性能没有HAproxy好。

2. 案例前置知识点

(1)HTTP 请求

通过 URL 访问网站使用协议是HTTP协议,称为HTTP请求。

请求方式常见为GET和POST方式。当访问时,会根据请求URL返回状态码。

关键步骤

  1. 客户端发送 HTTP 请求(方法 + URL + Headers + Body)

  2. 负载均衡器根据调度算法选择后端节点

  3. Web 服务器解析请求,访问缓存/数据库

  4. 生成响应(状态码 + Headers + HTML/JSON)

(2)负载均衡常用调度算法

算法原理适用场景案例选择
轮询 (RR)按序分配请求服务器性能均衡静态资源分发
加权轮询 (WRR)根据权重分配请求服务器性能差异大Web 服务器集群
最小连接 (LC)优先选择当前连接数最少的节点长连接服务(如数据库)Redis 访问
IP 哈希 (SH)相同 IP 固定分配到同一节点需要会话保持的场景用户购物车

(3)常见的 web 群集调度器

类型代表工具工作层级案例应用特点
四层调度器LVS传输层入口流量分发高性能,支持百万并发
七层调度器Nginx应用层HTTP/HTTPS 请求处理支持 URL 重写、SSL 卸载
云原生调度Kubernetes Ingress应用层容器化环境自动扩缩容,服务发现

三、实验案例(HAproxy 搭建Web群集)

境:Web:102 103   代理服务器:101

部署 :

#web部署
102 103:
dnf -y install httpd
systemctl stop firewalld
systemctl distable firewalld
setenforce 0101:
echo "test2">/var/www/html/index.html
102:
echo "test3">/var/www/html/index.htmlsystemctl restart httpd
systemctl enable httpd
#HA代理部署
-测试网站 curl 192.168.10.102/103
-安装haproxy
dnf -y install haproxy#日志文件  /var/log/messages-配置文件
vim /etc/haproxy/haproxy.cfg
====================================
globallog         127.0.0.1 local2chroot      /var/lib/haproxy   //禁锢目录pidfile     /var/run/haproxy.pid    //pid文件,运行时生成user        haproxy    //用户group       haproxy     //用户组daemon       //守护进程maxconn     4000   //最大连接数defaults     //默认模式,决定haproxy工作在哪一层mode                    httplog                     global   //日志记录为全局模式option                  httplog   //开启 HTTP 格式的日志记录option                  dontlognull   //不记录空值相关的日志retries                 3     //默认重试次数timeout http-request    5s   // HTTP 请求超时时间timeout queue           1m     //等待时间timeout connect         5s     //规定连接建立的超时时间timeout client          1m		//客户端连接的超时时间timeout server          1m		//服务器端连接的超时时间timeout http-keep-alive 5s   	//持久连接超时时间timeout check           5s    //检查的超时时间maxconn                 3000   //最大并发连接数#删除defaults下面内容
配置新内容------
listen myweb   bind 0.0.0.0:80   //监听所有网卡的80端口(haproxy 的端口取决于监听的服务端口是多少它就是多少)option httpchk GET /index.html  //通过发送请求到服务器来进行健康检查balance roundrobin //负载均衡算法 为 轮询算法server inst1 192.168.10.102:80 check inter 2000 fall 3   //用于服务器相关配置或监测server inst2 192.168.10.103:80 check inter 2000 fall 3 #启动服务
systemctl start haproxy
#HA proxy 日志(默认在系统syslog日志中,不方便,单独定义出来)
配置文件
vim /etc/haproxy/haproxy.cfg
globallog     127.0.0.1 local2log   	127.0.0.1 local3配置Rsyslog服务
vim /etc/rsyslog.d/haproxy.conf     //添加一个日志服务的配置文件
$ModLoad imudp
$UDPServerRun 514
local3.*/var/log/haproxy.log
&~      //标注参数的结束重启
systemctl restart haproxy
systemctl restart rsyslog测试日志信息
cat  /var/log/haproxy.log
tail -f /var/log/haproxy.log   (自动生成,重新访问网站会生成)会显示日志信息

http://www.xdnf.cn/news/10050.html

相关文章:

  • 不用 apt 的解决方案(从源码手动安装 PortAudio)
  • ReactHook有哪些
  • 物流项目第十期(轨迹微服务)
  • 实现一个免费可用的文生图的MCP Server
  • OpenCV---minAreaRect
  • RK3588和FPGA桥片之间IO电平信号概率性不能通信原因
  • 使用摄像头推流+VLC软件拉流
  • Spring Boot微服务架构(九):设计哲学是什么?
  • FreeRTOS通俗理解指南:基础概念 + 架构+ 内核组件+练手实验
  • Paraformer语音模型:一种语音模型加速方法
  • deepseek问答记录:请讲解一下torch.full_like()
  • adb 常用命令笔记
  • 02 APP 自动化-Appium 运行原理详解
  • 【cpp-httplib】 安装与使用
  • 【ArcGIS微课1000例】0147:Geographic Imager6.2下载安装教程
  • PCB设计实践(三十)地平面完整性
  • 【孙悟空喝水】2022-2-7
  • 使用flex实现三栏布局,两边固定,中间自适应
  • 烟草工业数字化转型:科技领航,重塑传统产业新生态
  • OpenCV中的重要、常用知识点汇总(图像处理、特征检测与匹配、图像分割与轮廓分析、视频处理与分析和机器学习与深度学习等)
  • 强化学习的前世今生(五)— SAC算法
  • WPF的交互核心:命令系统(ICommand)
  • golang 实现基于redis的并行流量控制(计数锁)
  • Joern项目第三方库依赖分析
  • 系统架构设计综合知识与案例分析
  • 深入 RAG(检索增强生成)系统架构:如何构建一个能查资料的大语言模型系统
  • MCU STM32搭配存储SD NAND(贴片式T卡)于智能皮电手环(Galvanic Skin Response, GSR 手环)的全方位评测
  • 硬件工程师笔记——运算放大电路Multisim电路仿真实验汇总
  • 三格电子——如何解决消防设备联网问题
  • [JVM] JVM内存调优