HAPorxy简介

HAProxy(High Availability Proxy)是一款高性能、开源的负载均衡器与反向代理服务器,主要用于 TCP 和 HTTP 协议的流量分发,广泛应用于高并发、高可用的网络架构中

核心特性

超高性能与低资源消耗

        基于单进程、多线程模型,处理并发连接能力极强,单实例可轻松支撑数万并发请求

灵活的负载均衡策略

        支持多种算法如:轮询、加权轮询、源地址哈希、最少链接

强大的健康检查与高可用

        内置多层健康检查机制(TCP 层、HTTP 层),可定期检测后端服务器状态(如端口是否存活、HTTP 响应码是否正常)

精细化的流量控制与安全防护

        可设置连接限速、请求限流,防止后端服务器被流量冲击

        支持 ACL(访问控制列表),基于 IP、请求方法、URL 等条件过滤恶意请求(如拦截爬虫、限制特定 IP 访问)

        集成 SSL/TLS 终止功能,可在负载均衡层处理 HTTPS 加密解密,减轻后端服务器负担

HAProxy的安装和服务信息

安装软件包

dnf install haproxy -y

haproxy基本信息:

软件安装包haproxy-2.4.22-3.el9_3.x86_64.rpm
启动文件/lib/systemd/system/haproxy.service
主配置目录/etc/haproxy/
主配置文件/etc/haproxy/haproxy.cfg
子配置目录/etc/haproxy/conf.d

haproxy的基本配置信息

global配置

参数说明:

log  定义全局的syslog服务器;日志服务器需要开启UDP协议,最多可以定义两个
chroot  锁定运行目录
pidfile   指定pid文件
maxconn指定最大连接数
user指定haproxy的运行用户
group指定haproxy的运行组
daemon指定haproxy以守护进程方式运行

# turn on stats unix socket(在此处可以指定进程数量或者线程数量,多线程和多进程只可以指定一个,不可指定多个

stats socket指定haproxy的套接字文件
nbproc指定haproxy的work进程数量,默认是1个
cpu-map 1 0指定第一个work绑定第一个cpu核心
cpu-map 2 1指定第二个work绑定第二个cpu核心
nbthread 2指定haproxy的线程数量,默认每个进程一个线程

# utilize system-wide crypto-policies

ssl-default-bind-ciphers PROFILE=SYSTEM设置 HAProxy 监听套接字(即接受客户端连接的端口)的默认加密套件
ssl-default-server-ciphers PROFILE=SYSTEM设置 HAProxy 与后端服务器建立 SSL/TLS 连接时使用的加密套件

proxies配置

defaults默认配置项,针对以下的frontend、backend和listen生效
frontend前端servername,类似于Nginx的一个虚拟主机 server和LVS服务集 群
backend后端服务器组,类似于nginx的upstream和LVS中的RS服务器
listen将frontend和backend合并在一起配置
defaults配置

mode http

指定 HAProxy 处理HTTP 协议的流量

log global

继承 global 段定义的日志配置

option httplog

记录完整的 HTTP 日志

option dontlognull

忽略 “空请求” 或 “无意义请求” 的日志

option http-server-close

主动关闭服务器侧的连接

option forwardfor except 127.0.0.0/8

在请求头中插入 X-Forwarded-For(记录客户端真实 IP),但排除 127.0.0.0/8(本地回环地址)

option redispatch

当后端服务器故障时,自动将请求重新分发到其他健康服务器

retries 3

请求失败时,最多重试3 次
timeout http-request 10s客户端发送完整 HTTP 请求的超时(10 秒内未发完请求,直接断开)
timeout queue 1m请求在 HAProxy 队列中等待的超时(1 分钟未分配到后端,返回 503)
timeout connect 10sHAProxy 与后端服务器建立连接的超时(10 秒未连接成功,判定后端故障)
timeout client 1m客户端与 HAProxy 保持连接的超时(1 分钟无数据交互,断开客户端连接)
timeout server 1mHAProxy 与后端服务器保持连接的超时(1 分钟无数据交互,断开后端连接)
timeout http-keep-alive 10sHTTP Keep-Alive 连接的空闲超时(10 秒无新请求,关闭连接)
timeout check 10s健康检查的超时(10 秒未收到后端响应,判定服务器故障)

maxconn 3000

HAProxy 对后端服务器的最大并发连接数限制 


HAProxy算法

所有算法在主配置文件配置/etc/haproxy/haproxy.cfg

vim /etc/haproxy/haproxy.cfg ---编辑配置文件

静态算法

static-rr---基于权重的轮询调度

statick-rr 按照预先配置的顺序和权重,将客户端请求依次分配给后端服务器。当所有服务器都被分配一次后,算法会从头开始循环

配置文件

访问效果

first

first算法会按照服务器在配置文件中定义的顺序,依次检查每个服务器的状态,优先选择第一个可用的服务器,只有当服务器不可用时才会将流量分配至下一个服务器

配置文件内容:

实验效果:

动态算法

roundrobin

roundrobin是一种经典且常用的动态负载均衡算法,其核心思想是按照顺序循环的方式将请求分配到后端服务器,通过均衡分配流量来充分利用集群资源,会实时根据服务器的健康状态调整分配策略(例如自动排除故障服务器)可利用socat动态调整权重

配置文件:

实验效果:

leastconn

leastconn是一种基于后端服务器当前连接负载分配请求的动态负载均衡算法,核心思想是将新请求分配给当前活跃连接数最少的服务器,从而实现更精细化的负载均衡

支持权重的运行时调整和慢启动,即:根据当前连接最少的后端服务器而非权重进行优先调度(新客户 端连接)  慢启动是指当一台服务器上线被检测到后 haproxy服务器会少量的分配流量慢慢增大

配置文件:

实验效果:

其他算法

source

source是一种通过客户端源 IP 地址实现会话保持的经典策略。其核心逻辑是:对客户端的源 IP 地址进行哈希计算,将结果映射到后端服务器集群中的某台服务器,从而确保来自同一源 IP 的请求始终被转发到同一台后端服务器

配置文件:

实验效果:

map-base 取模法

先对source地址进行hash计算,再基于服务器总权重的取模,最终结果决定将此请 求转发至对应的后端服务器,如:有三台后端服务器(索引分别0、1、2)若客户的ip地址哈希值为5,则5%3=2 分配到索引为2的服务器 此方法是静态的不支持动态调整权重且当有一台服务器下线时会导致多台客户主机被调度的服务器发生改变,会导致会话丢失

一致性hash

一致性哈希算法可以解决map-base取模法的多个会话丢失的问题能够确保当后端服务器数量发生变化时,只有少量请求会被重新路由,从而提高系统稳定性,其原理是将后端服务器的ip取模制成一个哈希环,再将客户端的ip取模落在后端服务器哈希环上,客户端在哈希环上经过逆时针找最近的后端服务器,这样即使有服务器上线或者下线了也只会有少量的会话丢失

一致性哈希问题:当服务器过少时会导致服务器分布不理想,可通过虚拟节点使其分布均匀

uri

path

基于对用户请求的URI的左半部分或整个uri做hash,再将hash结果对总权重进行取模后 根据最终结果将请求转发到后端指定服务器 对/path;params进行哈希 相同的uri访问同一台后端服务器

配置文件:

后端服务器需要有对应文件进行测试测试结果:

url_param

url_param对用户请求的url中的 params 部分中的一个参数key对应的value值作hash计算,并由服务器 总权重相除以后派发至某挑出的服务器,后端搜索同一个数据会被调度到同一个服务器

配置文件

测试结果

hdr取模法

基于请求头(HTTP header,通过hdr指令获取 )中的特定信息进行哈希取模运算,从而决定将请求转发到哪一台后端服务器

配置文件:

测试效果:

HAProxy的高级功能及配置

基于cookie值的会话保持

基于 Cookie 值的会话保持(也称为 "粘性会话")是一种常用的负载均衡策略,确保来自同一客户端的请求始终被路由到同一后端服务器,从而维护会话状态的一致性。这种机制特别适用于不支持分布式会话的应用程序

配置文件:

测试结果:

HAProxy状态页

通过web界面,显示当前HAProxy的运行状态

状态页配置参数:

stats enable基于默认的参数启用stats page
stats hide-version将状态页中haproxy版本隐藏
stats refresh 设定自动刷新时间间隔,默认不自动刷新
stats uri自定义stats page uri,默认值:/haproxy?stats
stats auth认证时的账号和密码,可定义多个用户,每行指定一个用户

状态页配置文件:

状态页内容

状态页参数

session rate(每秒的连接会话信息):
cur:每秒的当前会话数量 :
max:每秒新的最大会话数量 
limit:每秒新的会话限制量
sessions(会话信息):
cur:当前会话量
max:最大会话量
limit: 限制会话量
Total:总共会话量 
LBTot:选中一台服务器所用的总时间 
Last:和服务器的持续连接时间 
Wght:权重
Bytes(流量统计): 
In:网络的字节输入总量 
Out:网络的字节输出总量 
Dwn:后端服务器连接后都是DOWN的数量
Denied(拒绝统计信息): 
Req:拒绝请求量 
Resp:拒绝回复量
Errors(错误统计信息):
Req:错误请求量
conn:错误链接量
Resp:错误响应量
Warnings(警告统计信息):
Retr:重新尝试次数
Redis:再次发送次数
Server(real server信息):
Status:后端机的状态,包括UP和DOWN
LastChk:持续检查后端服务器的时间
Act:活动链接数量
Bck:备份的服务器数量
Chk:心跳检测时间
Dwntme:总的downtime时间
Thrtle:server 状态

IP透传

四层IP透传

hapeoxy配置文件:

后端服务器nginx配置文件

实验效果:

访问后查看日志

七层IP透传使用http默认是开启的

ACL

访问控制列表ACL,是一种基于包过滤的访问控制技术,它可以根据设定的条件对经过服务器传输的数据包进行过滤(条件匹配)即对接收到的报文进行匹配和过 滤,基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内容进行匹配并执行进一步操作

ACL匹配规范

hdr_beg(<name>[, <occ>])   ---匹配请求头中指定字段值的开头部分

hdr_end(<name>[, <occ>])  ---匹配请求头中指定字段值的结尾部分

hdr_dom(<name>[, <occ>]) ---域名部分匹配(带子域名),主要用于 host

hdr_dir(<name>[, <occ>]) ---路径匹配(针对 URI)

hdr_len(<name>[, <occ>]) ---匹配请求头字段值的长度

hdr_reg(<name>[, <occ>]) ---正则表达式匹配,自定义表达式(regex)模糊匹配

hdr_sub(<name>[, <occ>]) ---子串匹配,即字段值中包含某个子字符串即可

ACL匹配规则        
-i不区分大小写
-m使用指定的正则表达式匹配方法
-n不做DNS解析
-u禁止acl重名,否则多个同名ACL匹配或关系
ACL操作符

整数比较

         eq(等于) ge(大于等于) gt(大于) le(小于等于) lt(小于)

字符比较

exact match完全一致才匹配
substring match包含子串就匹配
suffix  match 结尾一致才匹配
prefix match开头一致才匹配
subdir match按 / 分割,任意段匹配
domain match按 . 分割,任意段匹配
ACL示例实验
基于域名匹配

haproxy配置文件:

实验效果

基于源IP或子网调度访问

haproxy配置文件:

实验效果:

基于源地址的访问控制

haproxy配置文件:

实验效果:

基于浏览器类型

实验效果

HAProxy四层负载

针对除HTTP以外的TCP协议应用服务访问的应用场景

对MySQL四层负载示例:

在后端服务器下载mariadb-server

编辑配置文件(修改数据库id为了观察实验效果)

haproxy配置文件:

实验结果:

自定义错误页面

可以指定错误时跳转页面

配置文件内容:

错误页面文件内容将后端服务器关闭模拟错误

实验效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90804.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90804.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/90804.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 的16 KB内存页设备需要硬件支持吗,还是只需要手机升级到Android15系统就可以

Android 的16 KB内存页设备需要硬件支持吗&#xff0c;还是只需要手机升级到Android15系统就可以&#xff1f; deepseek回答&#xff1a; DeepSeek R1 思考 3 秒 思考过程 好的&#xff0c;用户现在问的是Android的16 KB内存页设备是否需要硬件支持&#xff0c;还是只需要升级到…

相机内外参矩阵:从3D世界坐标到2D像素坐标变换

相机内外参矩阵&#xff1a;从3D世界坐标到2D像素坐标变换介绍**1. 内参矩阵&#xff08;Intrinsic Matrix, K&#xff09;****2. 外参矩阵&#xff08;Extrinsic Matrix, [R|t]&#xff09;****3. 完整投影过程&#xff08;世界坐标 → 像素坐标&#xff09;****步骤1&#xf…

哈希指针与数据结构:构建可信数字世界的基石

一、哈希指针的核心原理哈希指针是一种创新型数据结构&#xff0c;融合了传统指针的定位功能与密码学哈希的验证能力&#xff1a;双重功能&#xff1a;既存储数据地址&#xff0c;又包含该数据的哈希值&#xff0c;实现数据定位与完整性验证的统一。抗篡改机制&#xff1a;数据…

java实现一个方法,isTure则程序继续往下,为false则return的链式写法

以下是实现链式条件检查的Java方法&#xff0c;采用函数式风格设计。代码包含一个Chainable类&#xff0c;支持连续的check方法和多个终止操作&#xff08;如then, orElse等&#xff09;&#xff0c;满足在条件为false时中断链式调用并返回默认值的需求&#xff1a;import java…

数据结构学习之堆

本篇我们将学习新的数据结构——二叉树。 作者的个人gitee&#xff1a;楼田莉子 (riko-lou-tian) - Gitee.com 目录 树的概念 树形结构 非树形结构 树的相关术语 树的表示 树在实际生活上的应用 二叉树 慢二叉树 完全二叉树 二叉树的储存结构 二叉树的存储结构 顺序结构…

【csdn问答社区分析】前端开发热点问题全解析

前端时间我在csdn问答社区的前端部分"视察”了一圈发现了大家的问题主要集中在以下方面一、框架与组件库使用问题 Vue相关问题 组件化开发&#xff1a;如avue-crud组件自定义样式不生效、el-select大数据分页懒加载、element-plus表格动态列校验等。功能实现&#xff1a;包…

Pycharm2025 安装教程 免费分享 没任何套路

Pycharm 安装也是很简单的&#xff0c;简单过一下流程&#xff0c;如果需要的可以转存下载到自己电脑上。我用夸克网盘分享了「pycharm2025」&#xff0c;复制链接浏览器打开转存后即可下载。链接&#xff1a;https://pan.quark.cn/s/4bb74a939332备注&#xff1a;附带2023-202…

Javaweb————什么是超文本传输协议?

&#x1f3cd;️&#x1f3cd;️&#x1f3cd;️引言&#xff1a;什么是协议&#xff1f; 协议是一种约定&#xff0c;规定好一种信息的格式&#xff0c;如果发送方按照这种请求格式发送信息,那么接 收端就要按照这样的格式解析数据,否则就会出错&#xff0c;这就是协议 常用协…

UniappDay03

1.热门推荐-准备工作// 用defineProps获取页面参数,query const query defineProps<{type: string }>() const currHot hotMap.find((v) > v.type query.type) // 动态设置标题 uni.setNavigationBarTitle({ title: currHot!.title }) </script>2.获取热门推…

基于动态增强的 LLM 置信度方法研究

基于动态增强的 LLM 置信度方法研究 一、引言(Introduction) 大型语言模型(LLM)的性能提升高度依赖于对模型内部表征的精准调控 —— 表征工程通过优化模型中间层隐藏状态的传递规律,能够在不改变模型参数的前提下显著提升任务适应性(Wei et al., 2022)。当前主流方法中…

ComfyUI中运行Wan 2.1工作流,电影级视频,兼容Mac Windows

魔当(LM Downloader)是一个大模型应用下载工具 &#xff0c;目前 魔当 已经支持ComfyUI下载Wan 2.1视频模型。 魔当下载地址 https://seemts.com/ 先看生成效果 原始图片&#xff0c;你可以保存到自己电脑上测试 生成视频&#xff1a; 推荐提示词&#xff1a; A futurist…

CentOS 7 Linux 用 yum 安装 Docker,含 Docker 镜像无法拉取问题(即 docker pull 失败)的解决方案

CentOS 7 Linux 用 yum 安装 Docker,含 Docker 镜像无法拉取问题(即 docker pull 失败)的解决方案 本文对应的讲解视频链接:https://www.bilibili.com/video/BV1C48wzqE6T/ 文章目录 CentOS 7 Linux 用 yum 安装 Docker,含 Docker 镜像无法拉取问题(即 docker pull 失败…

XML的简略知识点

文章目录1. 基本概念2. 基本语法3. 示例4. 相关技术5. 应用场景XML&#xff08;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言&#xff0c;核心特点是可扩展性和自我描述性。以下是其核心知识点&#xff1a; 1. 基本概念 用途&#xff1a;主要用于数据的存储…

RustDesk 完整部署教程:支持 Web 管理后台和网页客户端远程,保姆级教学来了!

RustDesk API本项目使用 Go 实现了 RustDesk 的 API&#xff0c;并包含了 Web Admin 和 Web 客户端。RustDesk是一个远程桌面软件&#xff0c;提供了自托管的解决方案&#xff0c;官方API是收费的&#xff0c;这次咱们用到的是Github开源的第三方API源码。✅特性PC端API支持 …

​​GOFLY LIVE CHAT:Golang製オープンソース・ライブチャットシステム​

以下是为日本技术受众优化的日语版介绍文章&#xff0c;采用IT行业惯用术语和简洁表达&#xff1a; ​​GOFLY LIVE CHAT&#xff1a;Golang製オープンソース・ライブチャットシステム​​ ​​現代的なカスタマーサポートのための高性能ソリューション​​ GOFLY LIVE CHATは…

ISIS GR实验案例

一、实验拓扑路由器R1和R2都为双主控设备&#xff0c;主用板和备用板间形成备份关系。路由器间通过IS-IS协议实现网络互连&#xff0c;并提供GR机制。要求当R1通过GR方式重启IS-IS进程或者进行主备倒换时转发不中断。1、基础配置AR1 system sysname AR1 int g 0/0/0 ip add 10.…

智慧农业病虫害识别准确率↑32%:陌讯多模态融合算法实战解析

原创声明本文为原创技术解析&#xff0c;核心技术参数与架构设计引用自《陌讯技术白皮书》&#xff0c;禁止未经授权的转载与篡改。一、行业痛点&#xff1a;智慧农业的识别困境智慧农业中&#xff0c;作物病虫害的精准识别是实现精准植保的核心&#xff0c;但田间复杂环境始终…

# JsSIP 从入门到实战:构建你的第一个 Web 电话

前言 欢迎来到实时通信&#xff08;Real-Time Communication, RTC&#xff09;的世界&#xff01;如果你是一名 JavaScript 开发者&#xff0c;渴望让你的 Web 应用拥有语音通话、视频聊天甚至即时消息的能力&#xff0c;那么你来对地方了。这本书是为你量身打造的指南&#x…

【RHCSA 问答题】第 12 章 安装和更新软件包

目录什么是 RPM&#xff1f;dnf 是什么&#xff0c;它和 rpm 有什么联系和区别&#xff1f;如何设置禁止直接远程登录 root 账户&#xff1f;RHEL 中如何做才能启用对第三方存储库的支持&#xff1f;怎么理解 RHEL9 中的应用流(Application Streams)和模块(Modules)&#xff1f…

GEO优化实战:如何在DeepSeek、豆包等AI平台抢占推荐位?

在当今竞争激烈的 AI 领域&#xff0c;GEO 优化在抢占 AI 平台推荐位上的重要性日益凸显。各大平台都在为优质内容和企业争取更好的展示机会&#xff0c;与此同时&#xff0c;一个现象引发了众人关注&#xff1a;众多企业大力推荐天津诚智未来公司&#xff0c;这背后究竟隐藏着…