【haProxy】HA+LB简介(谷歌翻译转载)

介绍

HAProxy代表高可用性代理,是一种流行的开源软件TCP / HTTP负载均衡器和代理解决方案,可以在Linux,Solaris和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配置后端部分中定义在最基本的形式中,后端可以通过以下方式定义:

  • 使用哪种负载均衡算法
  • 服务器和端口列表

后端可以包含一个或多个服务器 - 一般来说,向后端添加更多服务器将通过将负载分散到多个服务器来增加潜在的负载容量。如果您的某些后端服务器不可用,也可以通过这种方式提高可靠性。

下面是两个后端配置的示例,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 roundrobinline指定负载平衡算法,在“ 负载平衡算法”部分中有详细说明

mode http指定将使用第7层代理,这在“负载平衡类型”部分中进行了解释

check在年底选择server指令规定,健康检查应的后端服务器上执行。

前端

前端定义了如何将请求转发到后端。前端在HAProxy配置前端部分中定义它们的定义由以下部分组成:

  • 一组IP地址和一个端口(例如10.1.1.7:80,*:443等)
  • 访问控制列表
  • use_backend规则,根据匹配的ACL条件定义要使用的后端,和/或处理所有其他情况default_backend规则

可以将前端配置为各种类型的网络流量,如下一节中所述。

 

负载平衡的类型

现在我们已经了解了负载平衡中使用的基本组件,让我们进入负载平衡的基本类型。

无负载平衡

没有负载平衡的简单Web应用程序环境可能如下所示:

无负载平衡

在此示例中,用户直接连接到您的Web服务器,在yourdomain.com上,并且没有负载平衡。如果您的单个Web服务器出现故障,用户将无法再访问您的Web服务器。此外,如果许多用户试图同时访问您的服务器并且无法处理负载,他们可能会遇到缓慢的体验,或者可能根本无法连接。

第4层负载平衡

将网络流量负载平衡到多个服务器的最简单方法是使用第4层(传输层)负载平衡。以这种方式进行负载均衡将根据IP范围和端口转发用户流量(即,如果请求进入http://yourdomain.com/anything,则流量将转发到处理yourdomain.com的所有请求的后端港口80)。有关第4层的更多详细信息,请查看我们的网络简介TCP小节

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

第4层负载平衡

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

第7层负载平衡

另一种更复杂的负载均衡网络流量的方法是使用第7层(应用层)负载均衡。使用第7层允许负载均衡器根据用户请求的内容将请求转发到不同的后端服务器。这种负载平衡模式允许您在同一域和端口下运行多个Web应用程序服务器。有关第7层的更多详细信息,请查看我们的网络简介HTTP子部分

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

第7层负载平衡

在此示例中,如果用户请求yourdomain.com/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后端

 

负载平衡算法

使用的负载平衡算法确定在负载平衡时将在后端中选择哪个服务器。HAProxy提供了几种算法选项。除了负载平衡算法之外,还可以为服务器分配权重参数,以控制与其他服务器相比选择服务器的频率。

由于HAProxy提供了如此多的负载均衡算法,因此我们在此仅描述其中的一些。有关算法的完整列表,请参阅HAProxy配置手册

一些常用的算法如下:

ROUNDROBIN

Round Robin轮流选择服务器。这是默认算法。

leastconn

选择连接数最少的服务器 - 建议用于较长的会话。同一后端中的服务器也以循环方式旋转。

资源

这将根据源IP的哈希值(即用户的IP地址)选择要使用的服务器。这是确保用户连接到同一服务器的一种方法。

 

粘性会话

某些应用程序要求用户继续连接到同一后端服务器。这种持久性是通过粘性会话实现的,使用后端中需要它appsession参数。

 

健康检查

HAProxy使用运行状况检查来确定后端服务器是否可用于处理请求。这样可以避免在服务器不可用时从后端手动删除服务器。默认运行状况检查是尝试与服务器建立TCP连接,即检查后端服务器是否正在侦听配置的IP地址和端口。

如果服务器未通过运行状况检查,因此无法提供请求,则会在后端自动禁用该服务器,即在流量再次变为健康状态之前,流量不会转发给它。如果后端中的所有服务器都发生故障,则该服务将变为不可用,直到这些后端服务器中的至少一个再次变为健康状态。

对于某些类型的后端,如某些情况下的数据库服务器,默认运行状况检查不足以确定服务器是否仍然健康。

 

其他方案

如果您认为HAProxy可能过于复杂而无法满足您的需求,则以下解决方案可能更适合:

  • Linux虚拟服务器(LVS) - 许多Linux发行版中包含的简单,快速的第4层负载均衡器

  • Nginx - 一种快速可靠的Web服务器,也可用于代理和负载平衡目的。Nginx通常与HAProxy结合使用,以实现其缓存和压缩功能

 

高可用性

之前描述的第4层和第7层负载平衡设置都使用负载平衡器将流量定向到许多后端服务器之一。但是,您的负载均衡器在这些设置中是单点故障; 如果它发生故障或被请求淹没,可能会导致服务的高延迟或停机。

高可用性(HA)的设置是无故障的单个点的基础设施。它通过向架构的每个层添加冗余来防止单个服务器故障成为停机事件。负载均衡器有助于后端层(Web / app服务器)的冗余,但是对于真正的高可用性设置,您还需要具有冗余负载均衡器。

以下是基本高可用性设置的示意图:

HA设置

在此示例中,您有一个静态IP地址后面的多个负载平衡器(一个活动和一个或多个被动),可以从一个服务器重新映射到另一个服务器。当用户访问您的网站时,请求会通过外部IP地址到达活动负载均衡器。如果该负载均衡器出现故障,您的故障转移机制将检测到它并自动将IP地址重新分配给其中一个被动服务器。有许多不同的方法可以实现主动/被动HA设置。要了解更多信息,请阅读如何使用浮动IP的这一节

posted @ 2018-12-27 14:13  pangkr  阅读(134)  评论(0)    收藏  举报