HAProxy 效能飞跃先锋队

目录

一 负载均衡

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.rhkb.cn/news/400841.html

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

相关文章

Mysql原理与调优-索引原理及使用

目录 1.绪论 2.索引原理 2.1 索引采用的数据结构 2.1.1 B树 1.什么是B树 2.B树的优缺点 2.1.2 B树 1.什么是B树 3.B树的优缺点 2.2.3 hash 2.2.4 总结 2.2 InnoDB数据存储结构(聚簇索引) 2.2.1 自底向上探寻索引 3.2.2 查询一条数据的完整流程 3.2.3 聚簇索引 2…

奥运科技观察:AI PC,如何成为当代体育精神的数字捍卫者?

作者 | 曾响铃 文 | 响铃说 数字孪生帮助体育馆建设、超高清直播……这届奥运会科技感拉满,几乎所有前沿技术都能在奥运的赛事运营中发现。 而AI大时代,AI如何帮助帮助奥运会顺利举办、如何帮助运动员拥有更好的表现,同样值得业界关注&…

haproxy最强攻略

1、负载均衡 负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是 尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。 负载均衡的主要作用如下: 高并发…

# Spring Cloud Alibaba Nacos_配置中心与服务发现(四)

Spring Cloud Alibaba Nacos_配置中心与服务发现(四) 一、Nacos 配置管理-集群部署 1、 把 nacos 应用程序包,复制3份,分别命名为 nacos1, nacos2, nacos3 分别在 conf 目录下,修改 application.properties 配置文件…

数据结构——循环队列

目录 循环队列的基本知识 循环队列的实现 定义 各个接口的实现 循环队列的基本知识 循环队列的定义 循环队列(Circular Queue)是一种使用固定大小的数组实现的队列,它将数组的首尾相连,形成环形,以充分利用空间并实…

Spring Boot的配置文件

目录 一、配置文件 1.properties为后缀的配置文件 1.1基本语法 1.2读取配置文件 1.3properties的优缺点 1.4加中文注释出现乱码 2.yml格式的配置文件 2.1基础语法 2.2读取配置文件 2.2.1对象存储到配置文件中 2.3yml的优缺点 2.4用不用加单引号或者双引号呢&#xf…

【C语言篇】编译和链接以及预处理介绍(上篇)

文章目录 前言翻译环境和运行环境翻译环境编译预处理(预编译)编译词法分析语法分析语义分析 汇编 链接 运行环境预处理(预编译)详解预定义符号#define定义常量#define定义宏带有副作用的宏参数宏替换的规则宏和函数的对比 写在最后…

opencv基础的图像操作

1.读取图像,显示图像,保存图像 #图像读取、显示与保存 import numpy as np import cv2 imgcv2.imread(./src/1.jpg) #读取 cv2.imshow("img",img) #显示 cv2.imwrite("./src/2.jpg",img) #保存 cv2.waitKey(0) #让程序进入主循环(让…

RAG系列之四:深入浅出 Embedding

在 RAG 系列之三:文本切分中介绍了如何将文本切分成更小的语义单元,接下来便是将拆分的文本块进行向量化。 什么是文本向量化? 文本向量化就是将文本数据转成数字数据,例如:将文本 It was the best of times, it was…

Android全面解析之context机制(二): 从源码角度分析context创建流程(上)

前言 这篇文章从源码角度分析context创建流程。 在上一篇Android全面解析之Context机制(一) :初识context一文中讲解了context的相关实现类。经过前面的讨论,读者对于context在心中有了一定的理解。但始终觉得少点什么:activity是什么时候被创建的&…

Python数据可视化案例——地图

目录 简单案例: 进阶案例: 继上文数据可视化案例,今天学习用pyecharts练习数据可视化案例2-构建地图。 简单案例: 首先构建一个简单的地图。 代码: import json from pyecharts.charts import MapmapMap() data[…

培训学校课程管理系统-计算机毕设Java|springboot实战项目

🍊作者:计算机毕设残哥 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目、 源…

大数据面试SQL(八):求连续段的起始位置和结束位置

文章目录 求连续段的起始位置和结束位置 一、题目 二、分析 三、SQL实战 四、样例数据参考 求连续段的起始位置和结束位置 一、题目 有一张表t2_id记录了id,id不重复,但是会存在间断,求出连续段的起始位置和结束位置。 样例数据&…

结构体structure、共用体union

目录 结构体 结构体类型的定义形式 结构体类型的大小 内存计算例子 共用体union 用共用体判断大小端 结构体和共用体对比 qsort() 结构体 结构体类型——用来描述复杂数据的一种数据类型 构造类型(用户自定义类型) struc…

CUDA+tensorflow+python+vscode在GPU下环境安装及问题汇总与解答

2024.8.14 因为要做深度学习,需要安装tensorflowgpu的环境,每次都搞不好整的很生气,本次将安装过程中参考的一些大佬的博客和安装过程中遇到的问题及解决方案总结一下,希望以后不要在这件事情上浪费时间。安装环境其实也没有想象中…

Halcon图像平滑与去噪

Halcon图像平滑与去噪 文章目录 Halcon图像平滑与去噪1. 均值滤波2. 中值滤波3. 高斯滤波5. 光照不均匀 有时拍摄的图像中会存在很多杂点和噪声,对于比较均匀的噪声,可以考虑用软件的算法进行 消除。例如,可以用图像平滑的方法进行去噪&#…

uniapp 自定义全局弹窗

自定义全局弹窗可在js和.vue文件中调用&#xff0c;unipop样式不满足&#xff0c;需自定义样式。 效果图 目录结构 index.vue <template><view class"uni-popup" v-if"isShow"><view class"uni-popup__mask uni-center ani uni-cust…

数学建模——启发式算法(蚁群算法)

算法原理 蚁群算法来自于蚂蚁寻找食物过程中发现路径的行为。蚂蚁并没有视觉却可以寻找到食物&#xff0c;这得益于蚂蚁分泌的信息素&#xff0c;蚂蚁之间相互独立&#xff0c;彼此之间通过信息素进行交流&#xff0c; 从而实现群体行为。 蚁群算法的基本原理就是蚂蚁觅食的过程…

R语言的算数运算

下面内容摘录自《R 语言与数据科学的终极指南》专栏文章的部分内容&#xff0c;每篇文章都在 5000 字以上&#xff0c;质量平均分高达 94 分&#xff0c;看全文请点击下面链接&#xff1a; 3章3节&#xff1a;R的赋值操作与算术运算_r 链式赋值-CSDN博客文章浏览阅读172次。掌…

Ajax-02.Axios

Axios入门 1.引入Axios的js文件 <script src"js/axios-0.18.0.js"></script> Axios 请求方式别名: axios.get(url[,config]) axios.delete(url[,config]) axios.post(url[,data[,config]]) axios.put(url[,data[,config]]) 发送GET/POST请求 axios.get…