HAProxy 效能飞跃先锋队

news2024/11/26 20:43:47

目录

一 负载均衡

1.1 四层负载

1.2 七层负载

1.3 四层负载和七层负载的区别

二 Haproxy简介

2.1 概念和内容

2.2 haproxy的基本配置信息

2.2.1 global 配置

2.2.2 proxies 配置

三 Haproxy的算法

3.1 静态算法

3.2 动态算法

3.3 其他算法

四 高级功能及配置

4.,1ACL

4.2 HAproxy的https实现


 

一 负载均衡

1.1 四层负载

四层负载均衡 工作在 OSI 模型的第四层,即传输层。

 

它主要是根据 IP 地址和端口号来分配网络流量。例如,基于 TCP 或 UDP 协议的端口进行负载的分配。

 

当客户端发送请求到负载均衡设备时,四层负载均衡会根据预先设定的策略和算法,选择一个后端服务器,并修改数据包的目的 IP 地址和端口,将请求转发到选定的服务器。

 

常见的四层负载均衡算法包括:

 
  1. 轮询:依次将请求分配到各个后端服务器。
  2. 加权轮询:根据服务器的权重比例分配请求。
  3. 最少连接:将新请求发送到当前连接数最少的服务器。
 

四层负载均衡的优点包括:

 
  1. 性能较高,处理速度快,因为它的工作层次相对较低,处理逻辑相对简单。
  2. 对网络的开销较小。
 

然而,四层负载均衡也有一定的局限性,例如它无法根据应用层的内容(如 HTTP 请求的 URL、方法等)进行更精细的负载分配。

1.2 七层负载

七层负载均衡 工作在 OSI 模型的第七层,即应用层。

 

它能够理解应用层协议(如 HTTP、HTTPS、FTP 等)的内容,并基于这些内容进行更精细和智能的请求分发。

 

例如,对于 HTTP 协议,七层负载均衡可以根据请求的 URL、HTTP 方法(如 GET、POST 等)、HTTP 头部信息(如 Cookie、User-Agent 等)来决定将请求转发到哪台后端服务器。

 

假设一个网站有多个页面,如首页、产品页面、用户登录页面等。七层负载均衡可以配置为将访问首页的请求发送到一组特定的服务器,将登录页面的请求发送到另一组专门处理登录操作的服务器,从而实现更精准的负载分配和优化。

 

七层负载均衡的优点包括:

 
  1. 更精细的流量控制:能够根据应用层的具体特征进行请求分发,提高资源的利用效率。
  2. 更好的安全性:可以对应用层的内容进行检查和过滤,增强系统的安全性。
 

然而,七层负载均衡也存在一些缺点,比如处理性能相对四层负载均衡较低,因为它需要对应用层协议进行深度解析,增加了处理的复杂度和时间开销。

1.3 四层负载和七层负载的区别

负载均衡 是一种将工作负载分布到多个计算资源(如服务器、网络链接等)上的技术或策略,以优化资源利用、提高系统性能、增强可靠性和可扩展性。

 

简单来说,当有大量的客户端请求访问某个服务或应用时,负载均衡器会接收这些请求,并根据预先设定的规则和算法,将请求合理地分配到后端的多个服务器上,确保每个服务器都不会过度负载,从而实现高效的服务响应。

 

负载均衡的主要作用包括:

 
  1. 提高性能:通过将请求均匀分布到多个服务器上,避免单个服务器因负载过高而导致响应延迟或故障,从而提高整体系统的处理能力和响应速度。

  2. 增强可靠性:当某台服务器出现故障时,负载均衡器可以自动将请求转发到其他正常运行的服务器上,确保服务的连续性,减少单点故障的影响。

  3. 优化资源利用:充分利用后端服务器的计算资源,避免某些服务器闲置而其他服务器过载的情况,提高资源的利用率。

  4. 可扩展性:方便地添加或移除后端服务器,以适应业务量的增长或减少,而无需对客户端产生明显的影响。

 

四层负载均衡和七层负载均衡主要有以下区别:

 
  1. 工作层次

    • 四层负载均衡工作在 OSI 模型的第四层,即传输层,基于 IP 地址和端口号进行流量分配。
    • 七层负载均衡工作在 OSI 模型的第七层,即应用层,能够理解应用层协议的具体内容,如 HTTP 请求的 URL、方法、头部等。
  2. 分析深度

    • 四层负载均衡对数据包的分析较浅,只关注源 IP、目标 IP、源端口和目标端口等信息。
    • 七层负载均衡对数据包的分析深入到应用层,能够解析应用层协议的细节。
  3. 负载分配依据

    • 四层负载均衡主要依据端口和 IP 进行分配,例如将目标端口为 80 的请求分配到一组服务器,目标端口为 443 的请求分配到另一组服务器。
    • 七层负载均衡可以根据更丰富的规则,如 URL 路径、HTTP 方法、Cookie 等进行精准分配。比如将以 /product 开头的 URL 请求分配到处理产品相关的服务器,将登录请求分配到专门的登录服务器。
  4. 性能和开销

    • 四层负载均衡处理速度快,性能较高,因为处理逻辑相对简单,系统开销小。
    • 七层负载均衡由于需要解析应用层协议,处理逻辑复杂,性能相对较低,系统开销较大。

二 Haproxy简介

2.1 概念和内容

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

2.2 haproxy的基本配置信息

haproxy的配置文件有两部分,分别是global:全局配置段和proxies:代理配置段

2.2.1 global 配置

global:全局配置段

进程及安全相关配置的参数;性能调整相关参数;debug参数

  1. log :用于指定日志的输出位置和相关设置。例如,log 127.0.0.1 local0 表示将日志发送到本地的 local0 设施,目的地为 127.0.0.1 。

  2. chroot :如果设置,会在指定的目录下运行 HAProxy ,增强安全性。

  3. user :指定运行 HAProxy 进程的用户。

  4. group :指定运行 HAProxy 进程的用户组。

  5. daemon :如果设置为 true ,HAProxy 会以守护进程的方式在后台运行。

  6. nbproc :指定运行 HAProxy 的进程数量,用于提高性能。

  7. pidfile :指定 HAProxy 进程的 PID 文件路径。

  8. maxconn :设置 HAProxy 能够处理的最大并发连接数。

  9. ulimit-n :设置每个进程可以打开的最大文件描述符数量。

  10. stats socket :指定用于获取统计信息的套接字路径。

2.2.2 proxies 配置

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

frontend:前端,相当于nginx中的server {}

backend:后端,相当于nginx中的upstream {}

listen:同时拥有前端和后端配置,配置简单,生产推荐使用

环境准备

主机名ip角色
haproxy172.25.254.100调度
server1172.25.254.10web1
server2172.25.254.20web2

 

下载安装包

yum install haproxy
yum install socat

ser1 ser2

 echo webserver1 - 172.25.254.10 > /var/www/html/index.html
   systemctl restart httpd
   curl http://172.25.254.10
 echo webserver2 - 172.25.254.20 > /var/www/html/index.html
  systemctl restart httpd
查看服务

[root@localhost ~]# rpm -qc haproxy
/etc/haproxy/haproxy.cfg
/etc/logrotate.d/haproxy
/etc/sysconfig/haproxy
查看错误日志

cat /var/log/message

对配置文件进行配置并测试

6a85e681314647638b3dd4b7acac1733.png

09863072ed484883a8eb0b824d02664f.png

默认情况只有一个进程

1f58ffac5f2b452487496cbc2114479b.png

修改进程为2

a0a8099ad3ab45e98d1d021c0908fa75.png

e5eba580f2964bd48bf4d37001e5c504.pnge7481ec256a34d1e87ca63df46c4ad29.png

定向ha日志

850f44121610450b82e28a5c2bb6e0af.png

3f8426233ce64142ad872fa44e357d0b.png

修改权限

06d87ea068af451a8b354a7a24ab8158.png

三 Haproxy的算法

3.1 静态算法

  1. 轮询(Round Robin):按顺序依次将请求分配到后端的各个服务器。假设后端有服务器 S1、S2、S3,请求会按照 S1、S2、S3、S1、S2、S3 的顺序进行分配。

  2. 加权轮询(Weighted Round Robin):为每个后端服务器设置权重,根据权重比例分配请求。例如,服务器 S1 权重为 2,S2 权重为 3,S3 权重为 5,那么请求分配的比例大致为 2:3:5。

  3. 静态优先级(Static Priority):预先为服务器设置优先级,按照优先级顺序分配请求。优先级高的服务器会先接收到请求,只有当高优先级的服务器不可用时,才会将请求分配给低优先级的服务器。

3.2 动态算法

  1. 最少连接(Least Connections):将新的请求发送到当前活动连接数最少的服务器。例如,服务器 S1 有 10 个连接,S2 有 5 个连接,S3 有 8 个连接,新请求会被分配到 S2。

  2. 加权最少连接(Weighted Least Connections):结合服务器的权重和当前连接数来决定请求的分配。权重越高且当前连接数越少的服务器越容易被选中。

  3. 基于源地址的最少连接(Source Based Least Connections):根据请求的源地址来选择当前针对该源地址连接数最少的服务器。

  4. 基于源地址的哈希(Source Based Hash):根据请求的源地址进行哈希计算,将来自相同源地址的请求始终分配到同一台服务器。

  5. 基于目标地址的哈希(Destination Based Hash):根据请求的目标地址进行哈希计算,将请求分配到相应的服务器。

3.3 其他算法

source

源地址hash,基于用户源地址hash并将请求转发到后端服务器,后续同一个源地址请求将被转发至同一 个后端web服务器。此方式当后端服务器数据量发生变化时,会导致很多用户的请求转发至新的后端服 务器,默认为静态方式,但是可以通过hash-type支持的选项更改这个算法一般是在不插入Cookie的TCP 模式下使用,也可给拒绝会话cookie的客户提供最好的会话粘性,适用于session会话保持但不支持 cookie和缓存的场景源地址有两种转发客户端请求到后端服务器的服务器选取计算方式,分别是取模法 和一致性hash

一致性hash

一致性哈希,当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动hash(o) mod n 该hash算法是动态的,支持使用 socat等工具进行在线权重调整,支持慢启动

90d40a7c891a40ffbdc549997e0fcd82.png

 

四 高级功能及配置

4.1 ACL

基于文件后缀名实现动静分离

f386877685274db888ffe518c2174bfa.png

eb7b0a8e2a9e401082f256692fd2c61f.png

f8bc69c4c6b84430b6de8f3fc19c21ca.png

web2同上

匹配访问路径实现动静分离

vim /etc/haproxy/haproxy.cfg
1715a8a595964507b6f08ed3a47b1d18.png

c40da15fef2c40f1b4bbd80f81795eec.png

74c30add4674458e84662062ffb2606f.png

 

4.2 HAproxy的https实现

33e27487199346aea08de247066175c6.png

bbb9b8e28f874263a08d0d9e923913a5.png

269587e0fe52434d8956d29c7dac7f64.png

5bb730ec4ac947d9af85e0f180cda8e0.png

07516d66dfe54053a382b7fc5aac298d.png

7f0b90eb75544b01857837bef9231ec8.png

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进程编程及其函数的使用

1. 创建进程 创建进程的核心操作是使用 fork() 系统调用。 1.1 fork() 系统调用 fork() 创建一个新进程(子进程),新进程几乎是父进程的完整拷贝。fork() 返回两次: 在父进程中,返回子进程的 PID。在子进程中&#…

Typescript在AI产品中应用越来越广泛

AI产品中的应用 TypeScript 在 AI 产品中的应用逐渐增多,主要得益于其提供的类型安全、面向对象编程和模块化等特性,这些特性使得开发者能够构建可维护、可扩展和高性能的应用程序。 首先,TypeScript 作为 JavaScript 的超集,通…

C++类和对象(2)——取地址运算符重载

一、const成员函数 const放在成员函数参数列表后面进行修饰,那么这个成员函数就是const成员函数;const实际修饰的是成员函数形参中包含的this指针的形参,表明在这个成员函数内部不能对成员进行修改。 例如日期类里面的Print成员函数&#x…

【HarmonyOS NEXT星河版开发学习】综合测试案例-拼夕夕首页

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面(暂未发布) 前言 该实战案例并没有用到太多的知识点,只不过用到的一些新东西,要多花时间去熟悉手机app的一些页面,对…

【Python】Python单元测试基础

文章目录 01-单元测试基础什么是单元测试常用的文件结构运行单元测试 01-单元测试基础 什么是单元测试常用的文件结构编写第一个单元测试运行单元测试 什么是单元测试 单元测试是指一个自动化的测试: 用来验证一小段代码(单元)的正确性&#…

【LLM】医疗大语言模型:CareGPT

向AI转型的程序员都关注公众号 机器学习AI算法工程 CareGPT (关怀GPT)是一个医疗大语言模型,同时它集合了数十个公开可用的医疗微调数据集和开放可用的医疗大语言模型,包含LLM的训练、测评、部署等以促进医疗LLM快速发展。 特性: 添加ChatG…

【Datawhale AI 夏令营】动手学大模型应用开发Task1 Baseline 精读

【Datawhale AI 夏令营】动手学大模型应用开发Task1 Baseline 精读 开源大模型文件预览 Baseline 1.导入库 # 导入所需的库 from transformers import AutoTokenizer, AutoModelForCausalLM import torch import streamlit as st2.模型下载 # 源大模型下载 from modelscope…

将电脑打造成私人网盘,支持外网访问之详细操作教程

你想过把自己电脑打造成随时随地访问的网盘吗?就是那种拥有一个属于自己的影音库,不用担心被和谐,随时可以登录访问电脑上的各种文件,相比传统网盘省心又安全。 使用Everything和节点小宝将电脑搭建成私人网盘,可以实现…

嵌入式面经篇三——数据类型

文章目录 前言一、数据类型1、用变量 a 给出下面的定义2、下面的代码输出是什么,为什么?3、写出 float x 与“零值”比较的 if 语句。4、下面代码有什么错误?5、下面代码输出是什么?6、下面代码运行后会是什么现象?7、…

24年日语能力(JLPT)考试报名流程图解

报名方式 搜索JLPT中国教育考试网,在线报名,一般学生党从教育网入口登录,社会人士从公网入口登录 报名时间 N1-N5 8月20日 7:00 - 8月27日14:00 注册时间 8月13日7:00 - 8月27日14:00 报名步骤 阅读报考提示,注册个人信息→…

此处不允许使用 ‘空‘ 类型

说明:受最近看的书《设计模式之美》(小争哥)的影响,最近编码有意将一些业务逻辑写在对象里面,增强封装性。在此记录一次项目启动时的报错,如下: 原因:当你在实体类对象中&#xff0c…

UniApp开发的开源工厂设备管理维护系统

本文来自:UniApp开发的开源工厂设备管理维护系统 - 源码1688 前端小程序演示地址: 后台测试网址: https://shebeiguanli.azheteng.cn/pyswkAWtig.php/addon?refaddtabs 测试账户: admin 测试密码: admin888 前端…

【Python】python泰坦尼克号生存预测 (源码+数据集+PPT+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

黑神话悟空游戏攻略大全 黑神话悟空内存占用多少 国产3A级游戏《黑神话:悟空》评测代码已发 黑神话悟空测试画质130g MacBook可以玩黑神话悟空吗

《黑神话:悟空》的评测代码已向媒体与测评人员发放,评测解禁日期定在8月16日。目前发放的评测代码仅限于PC版,并未涉及PS5版。《黑神话:悟空》将于8月20日发售,登陆PC(Steam/Epic/WeGame)和PS5。玩家将扮演一位“天命人…

Mybatis原理分析

一、总结 MyBatis的基本工作原理就是:先封装SQL,接着调用JDBC操作数据库,最后把数据库返回的表结果封装成Java类。 1. JDBC有四个核心对象: (1)DriverManager,用于注册数据库连接。 &#xf…

基于单片机的智能楼道灯光控制系统设计

摘要:基于单片机的智能楼道灯光控制系统设计由人体感应模块、光照强度检测模块、灯光控制模块、声音传感器模块、声光报警模块等组成。以单片机为核心,通过检测光照强度和红外人体感应相结合,实现了对楼道内灯光的控制,从而达到节…

vue-cli 中 配置 productionSourceMap 为 false 失效?

背景 最近 发现 vuecli 构建的 项目中配置的 productionSourceMap 为 false 后 ,生产代码 还是能够看到 sourceMap 文件 。 原因 生效前提条件 得设置 NODE_ENV 为 production 才会生效! 解决 直接修改生产环境的配置 NODE_ENV 为 production 直接覆…

二.PhotoKit - 相册权限(彻底读懂权限管理)

引言 用户的照片和视频算是用户最私密的数据之一,由于内置的隐私保护功能,APP只有在用户明确授权的前提下才能访问用户的照片库。从iOS14 开始,PhotoKit进一步增强了用户的隐私控制,用户可以选择指定的照片或者视频资源的访问权限…

阿里淘天landing,是结束也是新的开始(附校/社招内推码)

阿里3个多月landing成功,是结束也是新开始,望我们往后一切顺利~ 因为个人发展规划,今年开始找工作,但负责的业务实在繁忙,所以一边面试一边整理资料,每天都在挤海绵。 今年的就业形势着实不乐观&#xff0c…