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

HAProxy(一)

四层负载均衡与七层负载均衡区别

四层负载均衡和七层负载均衡是两种不同的负载均衡方式,主要区别在于负载均衡的层级及其所支持的协议不同。

四层负载均衡,也称为传输层负载均衡,工作在 OSI 模型的传输层(第四层),主要是基于 IP 地址和端口号来进行负载均衡,常用的四层负载均衡器有 LVS、HAProxy、Nginx(1.9以后) 等。四层负载均衡可以处理 TCP 和 UDP 协议,可以实现基于轮询、最小连接数、哈希等算法的负载均衡策略,可以实现网络流量的分发和负载均衡,但不能实现应用层的协议解析。

七层负载均衡,也称为应用层负载均衡,工作在 OSI 模型的应用层(第七层),主要是基于应用层协议(如 HTTP、SMTP、FTP 等)进行负载均衡,常用的七层负载均衡器有 HAProxy、Nginx、F5 等。七层负载均衡可以实现基于 URL、域名、Cookie 等信息的负载均衡策略,可以实现更精细的流量控制和负载均衡,同时也可以进行应用层协议解析、缓存、SSL 加速等操作。

因此,四层负载均衡和七层负载均衡各有优缺点,选用哪种方式取决于具体的场景和需求。

简介

HAProxy是法国开发者威利塔罗(Wily Tarreau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计。

核心功能

  • 负载均衡:L4和L7两种模式,支持RR/静态RR/LC/IP Hash/URI Hash/URL_PARAM Hash/HTTP_HEADER Hash 等丰富的负载均衡算法

  • 健康检查:支持TCP和HTTP两种健康检查模式

  • 会话保持:对于未实现会话共享的应用集群,可通过 Insert Cookie/Rewrite Cookie/Prefix Cookie,以及上述的多种 Hash 方式实现会话保持

  • SSL:HAProxy 可以解析 HTTPS 协议,并能够将请求解密为 HTTP 后向后端传输

  • HTTP 请求重写与重定向

  • 监控与统计:HAProxy 提供了基于 Web 的统计信息页面,展现健康状态和流量数据。基于此功能,使用者可以开发监控程序来监控 HAProxy 的状态

下载

源码包下载地址 Index of /repo/pkgs/haproxy

产品文档 HAProxy Documentation Converter

配置

/etc/haproxy/haproxy.cfg 配置文件由两大部分组成 Global 和 Proxies

Global:全局配置段

进程及安全配置相关参数

性能调整相关参数

Debug相关参数

chroot /usr/local/haproxy    #锁定运行目录
deamon    #以守护进程运行
#stats socket /var/lib/haproxy/haproxy. sock mode 600 level admin    #socket文件
user,group,uid,gid    #运行haproxy的用户身份,如 user wenzi或uid 666
nbproc    #开启的haproxy进程数,与CPu保持一致
nbthread    #指定每个haproxy进程开启的线程数,默认为每个进程一个线程
cpu-map 1 0    #绑定haproxy进程至指定CPU
maxconn    #每个haproxy进程的最大并发连接数
maxss1conn    #每个haproxy进程ss1最大连接数,用于haproxy配置了证书的场景下
maxconnrate    #每个进程每秒创建的最大连接数量
spread-checks    #后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间
pidfile    #指定pid文件路径
log 127.0.0.1 local3 info    #定义全局的sys1og服务器;最多可以定义两个

Proxies:代理配置段

defaults

为frontend,backend,listen提供默认配置

option redi spatch    #当server Id对应的服务器挂掉后,强制定向到其他健康的服务器,重新派发
option abortonclose    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接,关闭
option http-keep-alive    #开启与客户端的会话保持
option forwardfor    #透传客户端真实IP至后端web服务器
mode http    #设置默认工作类型,7层是http,四层是tcp
timeout http-keep-alive 120s    #session会话保持超时时间,范围内会转发到相同的后端服务器
timeout connect 120s    #客户端请求从haproxy到后端server的最长连接等待时间(TCP之前)
timeout server 600s    #客户端请求从haproxy到后端服务端的请求处理超时时长(TCP之后) 
timeout client 600s    #设置haproxy与客户端的最长非活动时间
timeout check 5s    #对后端服务器的默认检测超时时间

frontend

接收请求的前端虚拟节点,可指定具体使用的后端backend,相当于Nginx中的Server {}

bind [<address>]:<port_range> [,...] [param*]listen http_proxy    #监听http的多个IP的多个端口和sock文件
bind :80,:443,:8801-8810
bind 10.0.0.1:10080,10.0.0.1:10443
bind /var/run/ss1-frontend.sock user root mode 600 accept-proxylisten http_https_proxy    #https监听
bind :80
bind :443 ss7 crt /etc/haproxy/site.pemlisten http_https_proxy_explicit    #监听ipv6、ipv4和unix sock文件
bind ipv6@ :80
bind ipv4@public_ssl:443 ssl crt /etc/haproxy/site.pem
bind unix@ss7-frontend.sock user root mode 600 accept-proxylisten externa7_bind_app1    #监听file descriptor
bind "fd@${FD_APP1]"

backend

后端服务集群的配置,相当于Nginx中的upstream {}

mode http/tcp    #指定负载协议类型
option    #配置选项
server    #定义后端real server

注意:option后面加httpchk,smtpchk,mysql-check,pgsql-check,ss-hello-chk方法,可用于实现更多应用层检测功能。

check    #对指定rea7进行健康状态检查,默认不开启
addr IP    #可指定的健康状态监测IP
port num    #指定的健康状态监测端口
inter num    #健康状态检查间隔时间,默认2000ms
fall num    #后端服务器失效检查次数,默认为3
rise num    #后端服务器从下线恢复检查次数,默认为2
weight    #默认为1,最大值为256,0表示不参与负载均衡backup #将后端服务器标记为备份状态
disab1ed    #将后端服务器标记为不可用状态
redirect prefix http: //www.magedu.net/    #将请求临时重定向至其它URL,只适用于http模式
maxconn <maxconn>:当前后端server的最大并发连接数
backlog <backlog>:当server的连接数达到上限后的后援队列长度

示例

frontend+backend结合配置

#官网业务访问入口
frontend WEB_PORT_80
bind 192.168.7.248:80
mode http
use_backend web_prot_http_nodesbackend web_prot_http_nodes
mode http
option forwardfor
server 192.168.7.101 192.168.7.101:8080  check inter 3000 fall 3 rise 5
server 192.168.7.102 192.168.7.102:8080  check inter 3000 fall 3 rise 5

listen:

同时拥有前端和后端配置

使用listen替代 frontend+backend结合配置的 上述配置

#官网业务访问入口
listen    WEB_PORT_80bind 192.168.7.248:80mode httpoption forwardforserver 192.168.7.101 192.168.7.101:8080  check inter 3000 fall 3 rise 5server 192.168.7.102 192.168.7.102:8080  check inter 3000 fall 3 rise 5

调度算法

静态算法

按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、链接数和相应速度等,且无法实时修改权重,只能靠重启HAProxy生效。

static-rr

基于权重的轮询调度,不支持权重的运行时调整及后端服务器慢启动,其后端主机数量没有限制

first

根据服务器在列表中的位置,自上而下进行调度,但是其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务,因此会忽略服务器的权重设置。

动态算法

基于后端服务器状态进行调度适当调整,比如优先调度至当前负载较低的服务器,且权重可以在haproxy运行时动态调整无需重启。

roundrobin

基于权重的轮询动态调度算法,支持权重的运行时调整,不完全等于lvs中的rr轮训模式,HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数),其每个后端backend中最多支持4095个realserver,roundrobin为默认调度算法,且支持对real server权重动态调整

leastconn

leastconn加权的最少连接的动态,支持权重的运行时调整和慢启动,即当前后端服务器连接最少的优先调度(新客户端连接),比较话合长连接的场景使用,比比如MySOL等场景

其它算法

source:根据请求源ip地址

url:根据请求的URL

url_param:根据请求的url参数进行调度

hdr(name):根据HTTP请求头来锁定每一次HTTP请求

rdp-cookie:根据cookie名来锁定并hash每一次TCP请求。

使用场景

first:使用较少

static-rr:session共享的web集群

leastconn:数据库

source:基于客户端公网IP的会话保持

uri:缓存服务器,CDN服务商

hdr:基于客户端请求报文头做下一步处理

rdp-cookie:很少使用

相关文章:

HAProxy(一)

四层负载均衡与七层负载均衡区别 四层负载均衡和七层负载均衡是两种不同的负载均衡方式&#xff0c;主要区别在于负载均衡的层级及其所支持的协议不同。 四层负载均衡&#xff0c;也称为传输层负载均衡&#xff0c;工作在 OSI 模型的传输层&#xff08;第四层&#xff09;&am…...

LeetCode--HOT100题(46)

目录 题目描述&#xff1a;114. 二叉树展开为链表&#xff08;中等&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;114. 二叉树展开为链表&#xff08;中等&#xff09; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链…...

深度探索JavaScript中的原型链机制

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责…...

一种基于WinDump自动抓包实现方法

本发明的技术方案包括以下步骤和组件&#xff1a; 配置抓包参数&#xff1a;设置抓包的IP、端口以及过滤包大小等参数&#xff0c;以控制抓取的数据范围。循环自动抓包&#xff1a;利用WinDump工具实现循环自动抓包功能&#xff0c;类似于记录日志的方式保留抓包数据。当抓包数…...

taro 支付宝/微信小程序/h5 上传 - base64的那些事儿

支付宝小程序临时path转base64 - 基础库2.0以下 function getImageInfo(path) {return new Promise(resolve > {my.getImageInfo({src: path,success: res > {resolve(res)}})}) } export async function getBase64InAlipay({ id, path }) {const { width, height } awa…...

java之SpringBoot基础、前后端项目、MyBatisPlus、MySQL、vue、elementUi

文章目录 前言JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作&#xff08;一&#xff09;JC-1-2.SpringBoot入门程序制作&#xff08;二&#xff09;JC-1-3.SpringBoot入门程序制作&#xff08;三&#xff09;JC-1-4.SpringBoot入门程序制作&#xff08;四&#xff09;…...

Vue-Router 一篇搞定 Vue3

前言 在 Web 前端开发中&#xff0c;路由是非常重要的一环&#xff0c;但是路由到底是什么呢&#xff1f; 从路由的用途上讲 路由是指随着浏览器地址栏的变化&#xff0c;展示给用户不同的页面。 从路由的实现原理上讲 路由是URL到函数的映射。它将 URL 和应用程序的不同部分…...

深度解读智能媒体服务的重组和进化

统一“顶设”的智能媒体服务。 邹娟&#xff5c;演讲者 大家好&#xff0c;首先欢迎各位来到LVS的阿里云专场&#xff0c;我是来自阿里云视频云的邹娟。我本次分享的主题为《从规模化到全智能&#xff1a;智能媒体服务的重组与进化》。 本次分享分为以上四部分&#xff0c;一是…...

亲测有效!Win7中如何安装高版本的NodeJS

正常情况下&#xff0c;Win7支持的Node.js最高版本是V13.14&#xff0c;但在开发过程中&#xff0c;有不少Vue项目或其他需要依赖Node环境的项目&#xff0c;对Node版本要求都比较高。对此&#xff0c;我们要么重装操作系统到Win8以上&#xff0c;要么就得想办法在Win7中安装高…...

Python基础__with open()用法

1、open与with open区别 open&#xff08;&#xff09;完成后必须调用close()方法关闭文件&#xff0c;因为文件对象会占用操作系统的资源&#xff0c;并且操作系统同一时间能打开的文件数量也是有限的&#xff0c;由于文件读写时都有可能产生IOError&#xff0c;一旦出错&…...

深入理解 JavaScript 对象、属性、解构和增强语法

ECMA-262将对象定义为一组属性的无序集合。 1 内部属性描述 1.1 数据属性 [[Configurable]]&#xff1a;可配置性&#xff0c;直接定义在对象的属性该特性默认为true&#xff0c;表示可以对属性进行删除、修改等操作。[[Enumerable]]&#xff1a;可枚举性&#xff0c;直接定…...

2023年IT服务行业研究报告

第一章 行业概况 1.1 定义 IT服务行业是一个广泛的术语&#xff0c;涵盖了所有提供技术支持和服务的公司。这些服务包括系统集成&#xff0c;云计算服务&#xff0c;软件和硬件支持&#xff0c;网络服务&#xff0c;咨询服务&#xff0c;以及一系列其他类型的技术服务。此外&…...

腾讯云服务器镜像TencentOS Server有用过的吗?

腾讯云服务器镜像TencentOS Server操作系统有用过的吗&#xff1f;踩过坑吗&#xff1f;TencentOS性能和稳定性如何&#xff1f;TencentOS Server与CentOS保持兼容&#xff0c;在稳定性、性能、容器基础设施等核心能力方面做了全面的增强和优化&#xff0c;能为企业提供稳定高可…...

小区村庄集中生活废水处理设备厂家直销价格

小区村庄集中生活废水处理设备厂家直销价格 设备的构造 1、填料 该填料选用特制塑料和树脂组成&#xff0c;结构科学、新颖、填料比表面积达1000m2/m3&#xff0c;比重轻0.97g/cm3&#xff0c;不堵塞、易挂膜。 该填料是由纤细球体&#xff0c;网络外壳和通心多孔柱体组成的球形…...

Redisson实现分布式锁案例

Redisson实现分布式锁案例 引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.23.2</version> </dependency>创建Redisson配置类 Configuration pub…...

Generated Knowledge Prompting for Commonsense Reasoning

本文是知识图谱系列相关的文章&#xff0c;针对《Generated Knowledge Prompting for Commonsense Reasoning》的翻译。 常识推理的生成知识提示 摘要1 引言2 生成知识提示3 实验设置4 实验结果5 相关工作6 结论 摘要 结合外部知识是否有利于常识推理&#xff0c;同时保持预训…...

mybatisPlus多数据源方案

背景 在微服务李娜一般一个服务只有一个数据源&#xff0c;但是在有的老项目或者一些特定场景需要多数据源链接不同的数据库&#xff0c;本文以mybatisPlus为基础给出解决方案 多数据源场景分类 情形一&#xff1a;项目启动就确定了情形一&#xff1a;一些sass系统里面动态确…...

MonoDETR: Depth-guided Transformer for Monocular 3D Object Detection 论文解读

MonoDETR论文解读 abstract 单目目标检测在自动驾驶领域&#xff0c;一直是一个具有挑战的任务。现在大部分的方式都是沿用基于卷积的2D 检测器&#xff0c;首先检测物体中心&#xff0c;后通过中心附近的特征去预测3D属性。 但是仅仅通过局部的特征去预测3D特征是不高效的&…...

Vulnhub内网渗透DC-7靶场通关

个人博客: xzajyjs.cn DC系列共9个靶场&#xff0c;本次来试玩一下一个 DC-7&#xff0c;下载地址。 下载下来后是 .ova 格式&#xff0c;建议使用vitualbox进行搭建&#xff0c;vmware可能存在兼容性问题。靶场推荐使用NAT(共享)模式&#xff0c;桥接模式可能会造成目标过多不…...

acunetix2023安装教程

1、解压之后一键安装exe文件 2、将解压出来的Awv2023.6[Windows]文件夹下的wvsc.exe文件放置于AWVS安装目录&#xff0c;与原文件进行替换&#xff0c;如图所示。&#xff08;注&#xff1a;如果是默认安装&#xff0c;则文件位置位于C:\Program Files (x86)\Acunetix\14.2.210…...

IQR四分位数法是什么?

一、核心概念&#xff1a;四分位数与IQR1. 四分位数&#xff08;Quartiles&#xff09;将一组有序数据&#xff08;从小到大排列&#xff09;划分为4个相等部分的三个关键分割点&#xff0c;分别记为&#xff1a;Q1&#xff08;第一四分位数&#xff0c;25%分位数&#xff09;&…...

告别GDAL依赖!用Rasterio和TensorFlow 2.6搞定BigEarthNet-MM数据集划分与TFRecord转换

告别GDAL依赖&#xff01;用Rasterio和TensorFlow 2.6搞定BigEarthNet-MM数据集划分与TFRecord转换 在遥感图像处理领域&#xff0c;BigEarthNet-MM数据集因其多模态特性&#xff08;Sentinel-1 SAR和Sentinel-2 MSI数据&#xff09;成为研究热点。但许多开发者在处理该数据集时…...

从零构建32位MIPS单周期处理器:Logisim实战与24条核心指令实现详解

1. 从零理解MIPS单周期处理器 第一次接触CPU设计时&#xff0c;我盯着教科书上的数据通路图看了整整三天——那些密密麻麻的连线和缩写让我头晕目眩。直到用Logisim动手搭建了一个最简单的加法器&#xff0c;才突然明白处理器不过是精心设计的电子积木。单周期MIPS处理器就像乐…...

手把手教你用ZEMAX复现Thorlabs锥透镜生成贝塞尔光束(附Edmund透镜库文件)

手把手教你用ZEMAX复现Thorlabs锥透镜生成贝塞尔光束&#xff08;附Edmund透镜库文件&#xff09; 在光学工程领域&#xff0c;贝塞尔光束因其无衍射特性和自修复能力&#xff0c;在激光加工、光学捕获和生物成像等应用中展现出独特优势。本文将带您从零开始&#xff0c;在ZEM…...

WPF进阶:Canvas动态图形绘制与交互实现

1. Canvas动态图形绘制基础 WPF中的Canvas就像一块无限延伸的画布&#xff0c;我们可以在这块画布上自由地绘制各种图形元素。与静态绘制不同&#xff0c;动态绘制的魅力在于图形能够根据用户操作实时变化。我刚开始接触Canvas时&#xff0c;最让我兴奋的就是看到鼠标移动时能实…...

Redis 单线程真的是单线程吗?源码角度全面解析

Redis 是单线程的——这句话流传太广了&#xff0c;以至于很多人真的以为 Redis 就一个线程在跑。但实际上&#xff0c;如果你 ps -ef 或者 top 看一眼正在运行的 Redis 进程&#xff0c;会发现线程数不止一个。 到底怎么回事&#xff1f;这篇文章从源码角度把这个问题彻底说清…...

从LIF神经元到STDP学习:一个SNN识别MNIST的完整故事线(不只是代码)

从LIF神经元到STDP学习&#xff1a;揭秘脉冲神经网络如何"看见"数字 想象一下&#xff0c;当你看到数字"7"时&#xff0c;大脑中的神经元是如何协同工作&#xff0c;让你瞬间识别出这个符号的&#xff1f;这正是脉冲神经网络(SNN)试图模拟的生物智能过程。…...

DVB-S系统设计:从理论到FPGA实现的完整指南

1. DVB-S系统概述&#xff1a;卫星数字电视的核心技术 DVB-S&#xff08;Digital Video Broadcasting - Satellite&#xff09;是卫星数字电视广播的国际标准&#xff0c;它定义了从信号编码、调制到传输的完整技术规范。我第一次接触DVB-S系统是在2015年参与一个卫星接收机项目…...

颠覆教育资源获取:3分钟搞定电子课本下载的秘密武器

颠覆教育资源获取&#xff1a;3分钟搞定电子课本下载的秘密武器 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具&#xff0c;帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff0c;让您更方便地获取课本内容。 项目地址: …...

工控机驱动安全自查:5分钟用DriverView揪出可疑第三方驱动(附分析技巧)

工控机驱动安全自查&#xff1a;5分钟用DriverView揪出可疑第三方驱动&#xff08;附分析技巧&#xff09; 工业自动化设备的稳定运行离不开安全的驱动环境。想象一下&#xff0c;当你负责的生产线突然出现不明原因的停机&#xff0c;经过层层排查&#xff0c;最终发现是一个来…...