HAProxy 和负载均衡概念简介

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: HAProxy 和负载均衡概念简介

本文介绍了HAProxy,一种流行的开源负载均衡器,涵盖了术语、负载平衡类型(4层和7层)、算法、健康检查以及如何实现高可用性。通过实例和配置示例,帮助读者提升服务器性能和可靠性。

简介

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-backendblog-backend,每个后端中有两台 Web 服务器,监听端口 80:

backend web-backend
   balance roundrobin
   server web1 web1.yourdomain.com:80 check
   server web2 web2.yourdomain.com:80 check
   
backend blog-backend
   balance roundrobin
   mode http
   server blog1 blog1.yourdomain.com:80 check
   server 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.comport 80 所有请求的后端)。有关第 4 层的更多详细信息,请查看我们的网络入门中的 TCP 小节。

以下是第 4 层负载平衡的简单示例图:

!第 4 层负载平衡

用户访问负载均衡器,负载均衡器将用户的请求转发到后端服务器组 web-backend。选择的后端服务器将直接响应用户的请求。一般来说,web-backend 中的所有服务器应提供相同的内容,否则用户可能会收到不一致的内容。请注意,两台 Web 服务器都连接到同一数据库服务器。

第七层负载均衡

另一种更复杂的负载均衡网络流量的方式是使用第七层(应用层)负载均衡。使用第七层允许负载均衡器根据用户请求的内容将请求转发到不同的后端服务器。这种负载均衡模式允许您在相同的域和端口下运行多个 Web 应用服务器。有关第七层的更多细节,请查看我们的网络入门指南中的 HTTP 子部分。

以下是一个简单示例的第七层负载均衡的图表:

!Layer 7 Load Balancing

在这个示例中,如果用户请求 yourdomain.com/blog,他们将被转发到 blog 后端,这是一组运行博客应用的服务器。其他请求将被转发到 web-backend,可能正在运行另一个应用程序。在这个示例中,两个后端都使用相同的数据库服务器。

示例前端配置的片段如下:

frontend http
  bind *:80
  mode http
  acl url_blog path_beg /blog
  use_backend blog-backend if url_blog
 
  default_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 错误》。


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
负载均衡 算法 应用服务中间件
百度搜索:蓝易云【Linux系统如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?】
通过上述步骤,你可以在Linux系统中使用HAProxy、Nginx和Keepalived来实现负载均衡。这些工具可以帮助你将流量分配到多个后端服务器上,提高系统的性能、可靠性和可扩展性。
117 0
|
5月前
|
XML 负载均衡 Java
Spring Boot 中实现负载均衡:概念、功能与实现
【6月更文挑战第28天】在分布式系统中,负载均衡(Load Balancing)是指将工作负载和流量分配到多个服务器或服务实例上,以提高系统可用性和响应速度。负载均衡器可以是硬件设备,也可以是软件解决方案。
282 0
|
6月前
|
负载均衡 算法 网络协议
LVS、Nginx和HAProxy负载均衡器对比总结
LVS、Nginx和HAProxy负载均衡器对比总结
|
6月前
|
负载均衡 监控 网络协议
使用haproxy实现负载均衡集群
【4月更文挑战第14天】HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,快速并且可靠的一种解决方案。
176 1
|
6月前
|
负载均衡 网络协议 应用服务中间件
【亮剑】在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。
【4月更文挑战第30天】本文介绍了在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。HAProxy是一个高性能的开源TCP和HTTP负载均衡器,适合处理大量并发连接;Nginx是一个多功能Web服务器和反向代理,支持HTTP、HTTPS和TCP负载均衡,同时提供缓存和SSL功能;Keepalived用于监控和故障切换,通过VRRP实现IP热备份,保证服务连续性。文中详细阐述了如何配置这三个工具实现负载均衡,包括安装、配置文件修改和启动服务,为构建可靠的负载均衡系统提供了指导。
155 0
|
6月前
|
负载均衡 算法 网络协议
SLB基本概念
SLB基本概念
217 3
|
11月前
|
缓存 负载均衡 应用服务中间件
Linux-----nginx的简介,nginx搭载负载均衡以及nginx部署前后端分离项目
Linux-----nginx的简介,nginx搭载负载均衡以及nginx部署前后端分离项目
233 2
|
负载均衡 前端开发 网络协议
Keepalived+HAProxy 搭建高可用负载均衡(二)
Keepalived+HAProxy 搭建高可用负载均衡
341 0
|
11月前
|
负载均衡 前端开发 应用服务中间件
Nignx及负载均衡&动静分离->nginx简介,nginx搭载负载均衡提供前后分离后台接口数据上,nginx搭载负载均衡提供前后分离后台接口数据下,前端项目打包,前端项目Linux部署
Nignx及负载均衡&动静分离->nginx简介,nginx搭载负载均衡提供前后分离后台接口数据上,nginx搭载负载均衡提供前后分离后台接口数据下,前端项目打包,前端项目Linux部署
83 0