当前位置: 首页 > 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   (自动生成,重新访问网站会生成)会显示日志信息

相关文章:

负载均衡群集---Haproxy

目录 一、HAproxy 一、概念 二、核心作用 三、主要功能特性 四、应用场景 五、优势与特点 二、 案例分析 1. 案例概述 2. 案例前置知识点 &#xff08;1&#xff09;HTTP 请求 &#xff08;2&#xff09;负载均衡常用调度算法 &#xff08;3&#xff09;常见的 web …...

2025年5月个人工作生活总结

本文为 2025年5月工作生活总结。 研发编码 一个项目的临时记录 月初和另一项目同事向业主汇报方案&#xff0c;两个项目都不满意&#xff0c;后来领导做了调整&#xff0c;将项目合并&#xff0c;拆分了好几大块。原来我做的一些工作&#xff0c;如数据库、中间件等&#xff…...

【stm32开发板】单片机最小系统原理图设计

一、批量添加网络标签 可以选择浮动工具中的N&#xff0c;单独为引脚添加网络标签。 当芯片引脚非常多的时候&#xff0c;选中芯片&#xff0c;右键选择扇出网络标签/非连接标识 按住ctrl键即可选中多个引脚 点击将引脚名称填入网络名 就完成了引脚标签的批量添加 二、电源引…...

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.2 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.2 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用。 dataframe<-data.frame( Surfacec(74,64,60,92…...

2025山东CCPC题解

文章目录 L - StellaD - Distributed SystemI - Square PuzzleE - Greatest Common DivisorG - Assembly Line L - Stella 题目来源&#xff1a;L - Stella 解题思路 签到题&#xff0c;因为给出的字母不是按顺序&#xff0c;可以存起来赋其值&#xff0c;然后在比较。 代码…...

【解决办法】ubuntu重启不起来,输入用户名和密码进不去,又重新返回登录页。

项目场景&#xff1a; ubuntu重启不起来&#xff0c;输入用户名和密码进不去&#xff0c;又重新返回登录页。 问题描述 在华硕天选一代笔记本上面安装了ubuntu22.04.5桌面版&#xff0c;但是重启以后出现&#xff0c;输入了用户名和密码&#xff0c;等待一会还让输入用户名和…...

CentOS Stream 9 中部署 MySQL 8.0 MGR(MySQL Group Replication)一主两从高可用集群

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《MySQL技术精粹》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、MySQL 8.0 中的高可用方案 2、适用场景 二、环境准备 1、系统环境说明…...

pycharm 新UI 固定菜单栏 pycharm2025 中文版

pycharm 新UI 文件 -> 设置 -> 外观与行为 -> 外观 -> UI选项 -> 主菜单:显示在主工具栏上方. 即可固定...

跟单业务和量化交易业务所涉及到的设计模式

&#x1f501; 跟单业务中常用的设计模式&#xff1a; 1. 观察者模式&#xff08;Observer&#xff09; 场景&#xff1a;一个大V下单&#xff0c;系统需要自动通知所有跟随者进行同步下单。好处&#xff1a;解耦下单者与跟随者&#xff0c;支持灵活扩展、异步通知。面试亮点…...

我的世界Java版1.21.4的Fabric模组开发教程(十一)创建方块

这是适用于Minecraft Java版1.21.4的Fabric模组开发系列教程专栏第十一章——创建方块。想要阅读其他内容&#xff0c;请查看或订阅上面的专栏。 方块(Block) 是构成Minecraft世界的主要组成部分&#xff0c;是组成游戏地图的最基本单元&#xff0c;也是模组开发的核心元素之一…...

VR/AR 视网膜级显示破局:10000PPI 如何终结颗粒感时代?

一、传统液晶 “纱窗效应”&#xff1a;VR 沉浸体验的最大绊脚石 当用户首次戴上 VR 头显时&#xff0c;眼前密密麻麻的像素网格往往打破沉浸感 —— 这正是传统液晶显示在近眼场景下的致命缺陷。受限于 500-600PPI 的像素密度&#xff0c;即使达到 4K 分辨率&#xff0c;等效到…...

C++ 命令模式:设计与实现详解

一、引言 在软件开发中,我们经常需要将“请求”或“操作”封装成对象,以便在不同的上下文环境中传递、存储、延迟执行或撤销。命令模式(Command Pattern)正是为解决这类问题而生的行为设计模式。本文将深入探讨 C++ 中命令模式的设计理念、实现方式及其应用场景。 二、命…...

系统思考:化繁为简的艺术

系统思考&#xff0c;其实是一门化繁为简的艺术。当我们能够把复杂的问题拆解成清晰的核心以及更加简单&#xff0c;从而提升团队的思考品质和行动品质&#xff0c;发挥最大的合力。 每个公司都想在某方面成为最优秀的&#xff0c;但是实际上具有穿透性的洞察力和摆脱虚荣心的清…...

java/mysql/ES下的日期类型分析

mysql的timestamp和datetime mysql的TIMESTAMP类型内部存的是unix时间戳&#xff0c;可认为是一个32位的整型&#xff0c;它记录了1970.1.1以来的秒数。因为存储长度4字节的限制&#xff0c;所以有2038年限制。 DATETIME类型内部存的是long型&#xff0c;记录了1000.1.1以来的…...

Angularjs-Hello

1 关于Angularjs 最近因为项目需要又要做这个&#xff0c;所以简单复习下。其实这个大概7&#xff0c;8年前就用过&#xff0c;当时做了几个简单页面觉得太简单就还是回去做嵌入式了。按照互联网技术的进化速度&#xff0c;本来以为早死在 沙滩上了&#xff0c;没想到现在还在坚…...

Python训练营---Day41

DAY 41 简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; 1. 输入 → 卷积层 …...

Linux 1.0.4

父子shell linux研究的就是shell 打开两个窗口就是两个shell 终端的软件有很多 bash也是一个软件 我们在terminal里面再打开一个bash&#xff0c;然后再次使用ps命令发现多出来一个bash&#xff0c;之后点击exit只是显示了一个exit&#xff0c;这个只是退出了在terminal中打开…...

Qt -下载Qt6与OpenCV

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【暂无】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 前言 呃啊&#xff0c;本来就想在 Qt 里简单几个 OpenVC 的函数&#xff0c;没想到一搞就是一天。 我之前的开发环境是 Qt 5.14.2&#xff0c;使用 MinGW 7.3.0 64-bit 编…...

机器学习无监督学习sklearn实战一:K-Means 算法聚类对葡萄酒数据集进行聚类分析和可视化( 主成分分析PCA特征降维)

本项目代码在个人github链接&#xff1a;https://github.com/KLWU07/Machine-learning-Project-practice/tree/main/1-Wine%20cluster%20analysis 如果对于聚类算法理论不理解可参考这篇之前文章机器学习中无监督学习方法的聚类&#xff1a;划分式聚类、层次聚类、密度聚类&…...

可灵2.1 vs Veo 3:AI视频生成谁更胜一筹?

在Google发布Veo 3几天后,可灵显然感受到了压力,发布了即将推出的视频模型系列可灵 2.1的早期体验版。 据我了解,有三种不同的模式: 可灵 2.1 标准模式: 720p分辨率 仅支持图像转视频(生成更快,一致性更好) 5秒视频仍需20积分 可灵 2.1 专业模式: 1080p分辨率 仅在图…...

C语言之编译器集合

C语言有多种不同的编译器&#xff0c;以下是常见的编译工具及其特点&#xff1a; 一、主流C语言编译器 GCC&#xff08;GNU Compiler Collection&#xff09; 特点&#xff1a;开源、跨平台&#xff0c;支持多种语言&#xff08;C、C、Fortran 等&#xff09;。 使用场景&…...

计量表计的演进历程与技术变革:从机械到物联网时代

前言 近期在用python写一些关于计量表计数据集采模型。主要就是针对计量表计采集的相关数据&#xff0c;按照通讯协议格式进行解析&#xff0c;最后根据自己需求&#xff0c;编制界面进行数据的展示&#xff0c;存储&#xff0c;以及运算的内容。现在就个人关于计量表计的一点…...

更换Homebrew 源

以下是查看和修改 Homebrew 源的详细步骤&#xff0c;适用于需要切换到国内镜像以加速下载的场景&#xff1a; 1. 查看当前 Homebrew 源 # 查看 brew 主仓库地址 git -C "$(brew --repo)" remote get-url origin# 查看 homebrew-core 仓库地址 git -C "$(brew…...

人工智能在智能供应链中的创新应用与未来趋势

随着全球化的加速和市场竞争的加剧&#xff0c;供应链管理的复杂性和重要性日益凸显。传统的供应链管理面临着诸多挑战&#xff0c;如需求预测不准确、库存管理效率低下、物流配送延迟等。智能供应链通过引入人工智能&#xff08;AI&#xff09;、物联网&#xff08;IoT&#x…...

鸿蒙OSUniApp自定义手势识别与操作控制实践#三方框架 #Uniapp

UniApp自定义手势识别与操作控制实践 引言 在移动应用开发中&#xff0c;手势交互已经成为提升用户体验的重要组成部分。本文将深入探讨如何在UniApp框架中实现自定义手势识别与操作控制&#xff0c;通过实际案例帮助开发者掌握这一关键技术。我们将以一个图片查看器为例&…...

LLM优化技术——Paged Attention

在Transformer decoding的过程中&#xff0c;需要存储过去tokens的所有Keys和Values&#xff0c;以完成self attention的计算&#xff0c;称之为KV cache。 &#xff08;1&#xff09;KV cache的大小 可以计算存储KV cache所需的内存大小&#xff1a; batch * layers * kv-he…...

推荐几个不错的AI入门学习视频

引言&#xff1a;昨天推荐了几本AI入门书&#xff08;AI入门书&#xff09;&#xff0c;反响还不错。今天&#xff0c;我再推荐几个不错的AI学习视频&#xff0c;希望对大家有帮助。 网上关于AI的学习视频特别多。有收费的&#xff0c;也有免费的。我今天只推荐免费的。 我们按…...

采用Bright Data+n8n+AI打造自动化新闻助手:每天5分钟实现内容日更

一、引言 在信息爆炸的时代&#xff0c;作为科技领域的内容创作者&#xff0c;我每天都要花费2-3小时手动收集行业新闻、撰写摘要并发布到各个社群。直到我发现Bright Datan8nAI这套"黄金组合"&#xff0c;才真正实现了从"人工搬运"到"智能自动化&qu…...

Real SQL Programming

目录 SQL in Real Programs Options Stored Procedures Advantages of Stored Procedures Parameters in PSM SQL in Real Programs We have seen only how SQL is used at the generic query interface --- an environment where we sit at a terminal and ask queries …...

Sentinel限流熔断机制实战

1、核心概念 1.1、流量控制 流量控制是为了 防止系统被过多的请求压垮&#xff0c;确保资源合理分配并保持服务的可用性&#xff0c;比如对请求数量的限制。 流量控制的 3 个主要优势&#xff1a; 防止过载&#xff1a;当瞬间涌入的请求量超出系统处理能力时&#xff0c;会…...