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

负载均衡群集---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.lryc.cn/news/2394174.html

相关文章:

  • 2025年5月个人工作生活总结
  • 【stm32开发板】单片机最小系统原理图设计
  • 实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.2 R语言解题
  • 2025山东CCPC题解
  • 【解决办法】ubuntu重启不起来,输入用户名和密码进不去,又重新返回登录页。
  • CentOS Stream 9 中部署 MySQL 8.0 MGR(MySQL Group Replication)一主两从高可用集群
  • pycharm 新UI 固定菜单栏 pycharm2025 中文版
  • 跟单业务和量化交易业务所涉及到的设计模式
  • 我的世界Java版1.21.4的Fabric模组开发教程(十一)创建方块
  • VR/AR 视网膜级显示破局:10000PPI 如何终结颗粒感时代?
  • C++ 命令模式:设计与实现详解
  • 系统思考:化繁为简的艺术
  • java/mysql/ES下的日期类型分析
  • Angularjs-Hello
  • Python训练营---Day41
  • Linux 1.0.4
  • Qt -下载Qt6与OpenCV
  • 机器学习无监督学习sklearn实战一:K-Means 算法聚类对葡萄酒数据集进行聚类分析和可视化( 主成分分析PCA特征降维)
  • 可灵2.1 vs Veo 3:AI视频生成谁更胜一筹?
  • C语言之编译器集合
  • 计量表计的演进历程与技术变革:从机械到物联网时代
  • 更换Homebrew 源
  • 人工智能在智能供应链中的创新应用与未来趋势
  • 鸿蒙OSUniApp自定义手势识别与操作控制实践#三方框架 #Uniapp
  • LLM优化技术——Paged Attention
  • 推荐几个不错的AI入门学习视频
  • 采用Bright Data+n8n+AI打造自动化新闻助手:每天5分钟实现内容日更
  • Real SQL Programming
  • Sentinel限流熔断机制实战
  • Java 数据处理 - 数值转不同进制的字符串(数值转十进制字符串、数值转二进制字符串、数值转八进制字符串、数值转十六进制字符串)