HAProxy 和负载均衡概念简介
简介
HAProxy,全称高可用代理,是一款流行的开源软件 TCP/HTTP 负载均衡器和代理解决方案,可在 Linux、macOS 和 FreeBSD 上运行。它最常见的用途是通过将工作负载分布到多台服务器(例如 Web、应用程序、数据库)上来提高服务器环境的性能和可靠性。它被广泛应用于许多知名环境,包括 GitHub、Imgur、Instagram 和 Twitter。
在本指南中,您将获得 HAProxy 的概述,了解负载平衡术语,并举例说明如何使用它来提高您自己服务器环境的性能和可靠性。
HAProxy 术语
在讨论负载平衡和代理时,有许多重要的术语和概念。您将在以下小节中了解常用术语。
在深入了解基本负载平衡类型之前,您应该先了解 ACL、后端和前端。
访问控制列表(ACL)
在负载平衡方面,ACL 用于测试某些条件并根据测试结果执行操作(例如选择服务器或阻止请求)。使用 ACL 可以根据各种因素(如模式匹配和对后端的连接数)灵活地转发网络流量。
ACL 示例:
acl url_blog path_beg /blog
如果用户请求的路径以 /blog 开头,则匹配此 ACL。例如,这将匹配请求 http://yourdomain.com/blog/blog-entry-1。
有关 ACL 使用的详细指南,请查看 HAProxy 配置手册。
后端
后端是接收转发请求的一组服务器。后端在 HAProxy 配置的 backend 部分中定义。在其最基本形式中,后端可以通过以下方式定义:
- 使用的负载平衡算法
- 服务器和端口列表
后端可以包含一个或多个服务器。一般来说,向后端添加更多服务器将通过在多台服务器上分发负载来增加潜在的负载容量。通过这种方式还可以实现增加可靠性,以防一些后端服务器不可用。
以下是一个包含两个后端配置的示例,web-backend 和 blog-backend,每个后端中有两台 Web 服务器,监听端口 80:
backend web-backendbalance roundrobinserver web1 web1.yourdomain.com:80 checkserver web2 web2.yourdomain.com:80 checkbackend blog-backendbalance roundrobinmode httpserver blog1 blog1.yourdomain.com:80 checkserver blog1 blog1.yourdomain.com:80 check
balance roundrobin 行指定了负载平衡算法,详细信息请参阅负载平衡算法部分。
mode http 指定将使用第 7 层代理,这在负载平衡类型部分有解释。
server 指令末尾的 check 选项指定应对这些后端服务器执行健康检查。
前端
前端定义了如何将请求转发到后端。前端在 HAProxy 配置的 frontend 部分中定义。它们的定义由以下组件组成:
- 一组 IP 地址和端口(例如 10.1.1.7:80、*:443 等)
- ACL
use_backend规则,根据匹配的 ACL 条件定义使用哪个后端,和/或一个default_backend规则,处理其他所有情况
前端可以配置到各种类型的网络流量,如下一节所述。
负载平衡类型
现在您已经了解了负载平衡中使用的基本组件,可以进入基本负载平衡类型。
无负载平衡
没有负载平衡的简单 Web 应用环境可能如下所示:
!无负载平衡
在此示例中,用户直接连接到您的 Web 服务器,位于 yourdomain.com,没有负载平衡。如果您的单个 Web 服务器宕机,用户将无法访问您的 Web 服务器。此外,如果许多用户尝试同时访问您的服务器,而服务器无法处理负载,他们可能会体验缓慢或无法连接的情况。
第 4 层负载平衡
将网络流量负载均衡到多台服务器的最简单方法是使用第 4 层(传输层)负载平衡。通过这种方式进行负载平衡将根据 IP 范围和端口转发用户流量(即,如果请求进入 http://yourdomain.com/anything,流量将被转发到处理 yourdomain.com 上 port 80 所有请求的后端)。有关第 4 层的更多详细信息,请查看我们的网络入门中的 TCP 小节。
以下是第 4 层负载平衡的简单示例图:
!第 4 层负载平衡
用户访问负载均衡器,负载均衡器将用户的请求转发到后端服务器组 web-backend。选择的后端服务器将直接响应用户的请求。一般来说,web-backend 中的所有服务器应提供相同的内容,否则用户可能会收到不一致的内容。请注意,两台 Web 服务器都连接到同一数据库服务器。
第七层负载均衡
另一种更复杂的负载均衡网络流量的方式是使用第七层(应用层)负载均衡。使用第七层允许负载均衡器根据用户请求的内容将请求转发到不同的后端服务器。这种负载均衡模式允许您在相同的域和端口下运行多个 Web 应用服务器。有关第七层的更多细节,请查看我们的网络入门指南中的 HTTP 子部分。
以下是一个简单示例的第七层负载均衡的图表:
!Layer 7 Load Balancing
在这个示例中,如果用户请求 yourdomain.com/blog,他们将被转发到 blog 后端,这是一组运行博客应用的服务器。其他请求将被转发到 web-backend,可能正在运行另一个应用程序。在这个示例中,两个后端都使用相同的数据库服务器。
示例前端配置的片段如下:
frontend httpbind *:80mode httpacl url_blog path_beg /bloguse_backend blog-backend if url_blogdefault_backend web-backend
这配置了一个名为 http 的前端,它处理端口 80 上的所有传入流量。
acl url_blog path_beg /blog 匹配用户请求路径以 /blog 开头的请求。
use_backend blog-backend if url_blog 使用 ACL 将流量代理到 blog-backend。
default_backend web-backend 指定所有其他流量将被转发到 web-backend。
负载均衡算法
所使用的负载均衡算法决定了在负载均衡时将选择后端中的哪个服务器。HAProxy 提供了几种算法选项。除了负载均衡算法外,服务器可以被分配一个 weight 参数,以调整服务器相对于其他服务器的选择频率。
一些常用的算法如下:
roundrobin
Round Robin 按顺序选择服务器。这是默认算法。
leastconn
选择连接数最少的服务器。这适用于较长的会话。同一后端中的服务器也会以 Round Robin 方式轮换。
source
根据用户发起请求的源 IP 地址的哈希选择要使用的服务器。此方法确保相同的用户将连接到相同的服务器。
粘性会话
一些应用程序要求用户继续连接到相同的后端服务器。这可以通过 粘性会话 实现,使用后端中需要的 appsession 参数。
健康检查
HAProxy 使用健康检查来确定后端服务器是否可用于处理请求。这避免了在服务器变得不可用时手动从后端移除服务器。默认的健康检查是尝试建立到服务器的 TCP 连接。
如果服务器未通过健康检查,因此无法提供服务,它将自动在后端中禁用,并且流量将不会被转发到它,直到它再次变得健康。如果后端中的所有服务器都失败,服务将变得不可用,直到其中至少一个后端服务器再次变得健康。
对于某些类型的后端,比如数据库服务器,默认的健康检查未必是为了确定服务器是否仍然健康。
Nginx Web 服务器也可以用作独立的代理服务器或负载均衡器,并且通常与 HAProxy 一起使用,以利用其缓存和压缩功能。
高可用性
本教程中描述的第四层和第七层负载均衡设置都使用负载均衡器将流量引导到多个后端服务器之一。然而,在这些设置中,负载均衡器是一个单点故障;如果它崩溃或被请求压倒,它可能会导致服务的高延迟或停机。
高可用性(HA)设置广义上定义为没有单点故障的基础架构。通过为架构的每一层添加冗余,它可以防止单个服务器故障成为停机事件。负载均衡器为后端层(Web/应用服务器)提供了冗余,但要实现真正的高可用性设置,您还需要具有冗余负载均衡器。
以下是一个高可用性设置的图表:
!HA Setup
在这个示例中,您有多个负载均衡器(一个活动和一个或多个被动)位于静态 IP 地址后面,可以从一个服务器重新映射到另一个服务器。当用户访问您的网站时,请求通过外部 IP 地址到达活动负载均衡器。如果该负载均衡器失败,您的故障转移机制将检测到它,并自动将 IP 地址重新分配给一个被动服务器。有多种不同的方法可以实现主/备高可用性设置。要了解更多,请阅读《如何使用保留 IP》。
结论
现在您已经了解了负载均衡,并知道如何利用 HAProxy,您已经有了一个坚实的基础,可以开始改善自己服务器环境的性能和可靠性。
如果您有兴趣存储 HAProxy 的输出以供以后查看,请查看 如何在 CentOS 8 上使用 Rsyslog 配置 HAProxy 日志记录 [快速入门]
如果您正在寻求解决问题,请查看常见的 HAProxy 错误。如果需要进一步的故障排除,请查看《如何排除常见的 HAProxy 错误》。
相关文章:
HAProxy 和负载均衡概念简介
简介 HAProxy,全称高可用代理,是一款流行的开源软件 TCP/HTTP 负载均衡器和代理解决方案,可在 Linux、macOS 和 FreeBSD 上运行。它最常见的用途是通过将工作负载分布到多台服务器(例如 Web、应用程序、数据库)上来提…...
【go】ent操作之CRUD与联表查询
文章目录 1 CRUD1.1 创建1.1.1 单条创建1.1.2 批量创建 1.2 查找1.2.1 查询单条 / 条件准确查询1.2.2 查询单条 / 条件模糊查询1.2.3 查询单条 / In1.2.4 查询全部 1.3 更新1.4 删除 2 联表查询2.1 O2M(一对多查询)2.1.1 增加Edge2.1.2 查询方法2.1.2.1 …...
服务器性能监控管理方法及工具
服务器是组织数据中心的主干,无论是优化的用户体验,还是管理良好的资源,服务器都能为您完成所有工作,保持服务器随时可用和可访问对于面向业务的应用程序和服务以最佳水平运行至关重要。 理想的服务器性能需要主动监控物理和虚拟…...
AUTOSAR汽车电子嵌入式编程精讲300篇-基于FPGA和CAN协议2.0B的总线控制器研究与设计
目录 前言 研究现状分析 2 CAN总线协议 2.1 CAN总线基本概念 2.2 物理层...
14.1 Ajax与JSON应用(❤❤)
14.1 Ajax与JSON应用 1. Ajax1.1 简介1.2 Ajax使用流程1. 前端创建XMLHttpRequest对象2. 发送Ajax请求3. 处理服务器响应4. 代码2. JSON2.1 简介2.2 JS解析JSON3. Ajax与JSON开发3.1 后端:用Jackson实现JSON序列化输出3.2 前端Ajax处理JSON3.3 Ajax工具...
ffmpeg命令生成器
FFmpeg 快速入门:命令行详解、工具、教程、电子书 – 码中人的博客FFmpeg 是一个强大的命令行工具,可以用来处理音频、视频、字幕等多媒体文件。本文介绍了 FFmpeg 的基本用法、一些常用的命令行参数,以及常用的可视化工具。https://blog.mzh…...
JavaScript基础速成
由于学web时只学了后端,现在到了前后端联调的场景发现看不懂前端代码,于是开始恶补 看了下基础内容发现html和css比较好看懂,但JavaScript比较迷,大概知道组件id绑定事件 下面选取看菜鸟教程补充的JS知识 JS的作用 JS是在html…...
openGauss学习笔记-215 openGauss性能调优-确定性能调优范围-性能日志
文章目录 openGauss学习笔记-215 openGauss性能调优-确定性能调优范围-性能日志215.1 性能日志概述215.2 性能日志收集的配置参数 openGauss学习笔记-215 openGauss性能调优-确定性能调优范围-性能日志 215.1 性能日志概述 性能日志主要关注外部资源的访问性能问题。 性能日…...
在vs code的terminal,debug执行python main.py --train True
GPT4告诉我: 在VS Code中以debug状态执行带有参数(如--train)的main.py文件,你需要在launch.json配置文件中正确设置参数。以下是详细步骤: 打开你的main.py文件:确保你的main.py文件已经在VS Code中打开…...
docker 简单项目
要将服务器端口映射到容器端口,你可以使用 Docker 命令的 -p 选项。以下是基本的步骤: 1. **拉取镜像:** 在服务器上运行以下命令拉取你想要的 Docker 镜像,例如 Nginx: bash docker pull nginx 2. **运行容器…...
计算机毕业设计 基于SpringBoot的线上教育培训办公系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
四、机器学习基础概念介绍
四、机器学习基础概念介绍 1_机器学习基础概念机器学习分类1.1 有监督学习1.2 无监督学习 2_有监督机器学习—常见评估方法数据集的划分2.1 留出法2.2 校验验证法(重点方法)简单交叉验证K折交叉验证(单独流出测试集)(常…...
Excel设置单元格下拉框(poi)
前言 年关在即,还在最后的迭代处理,还分了个其他同事的单,说是导出的Excel模版的2列要修改为下拉选项,过程很曲折,不说,以下其实就是一个笔记而已! 其实之前分享过阿里的EasyExcel设置单…...
api接口是什么意思,api接口该如何防护呢?
API接口:应用程序与服务之间的接口 什么是API接口 API是应用程序接口的缩写,指的是能够让不同的应用程序之间交换数据的一种方式。一个API接口就是应用程序与服务之间的接口,它定义了服务提供的功能和数据,以及应用程序如何访问这…...
PMP资料怎么学?PMP备考经验分享
PMP考试前大家大多都是提前备考个一两个月,但是有些朋友喜欢“不走寻常路”,并不打算去考PMP认证,想要单纯了解PMP,不管要不要考证,即使是仅仅学习了解一下我个人都非常支持,因为专业的基础的确能提高工作效…...
partition by list(msn_id)子句的含义
在数据库查询中,特别是在使用SQL语言时,"PARTITION BY" 子句用于对结果集进行分区,以便可以对每个分区进行单独的聚合操作。这是在执行窗口函数(如 ROW_NUMBER(), RANK(), SUM(), AVG() 等)时特别有用的。 …...
【C++】I/O多路转接详解(二)
在上一篇文章【C】I/O多路转接详解(一) 在出现EPOLL之后,随之而来的是两种事件处理模式的应运而生:Reator 和 Proactor,同步IO模型常用于Reactor模式,异步IO常用于Proactor. 目录 1. 服务器编程框架简介2. IO处理1. R…...
PySpark(三)RDD持久化、共享变量、Spark内核制度,Spark Shuffle
目录 RDD持久化 RDD 的数据是过程数据 RDD 缓存 RDD CheckPoint 共享变量 广播变量 累加器 Spark 内核调度 DAG DAG 的宽窄依赖和阶段划分 内存迭代计算 Spark是怎么做内存计算的? DAG的作用?Stage阶段划分的作用? Spark为什么比MapReduce快? Spar…...
详解MYSQL中的平均值组大小
文章目录 平均值组大小了解平均值组大小MySQL什么时候会使用平均值组大小平均值组大小对于索引选取的影响平均值组大小 了解平均值组大小 总数据量 / 值组 = 平均值组大小 值组是一组具有相同键前缀值的行,及所有相等的键为一个值组。总数据量为全表数据量MySQL什么时候会使…...
【爬虫专区】批量下载PDF (无反爬)
天命:只要没反爬,一切都简单 这次爬取的是绿盟的威胁情报的PDF 先看一下结构,很明显就是一个for循环渲染 burp抓包会发现第二次接口请求 接口请求一次就能获取到了所有的数据 然后一个循环批量下载数据即可,其实没啥难度的 imp…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
