介绍
HAProxy代表高可用性代理,是一种流行的开源软件TCP / HTTP负载均衡器和代理解决方案,可以在Linux,Solaris和FreeBSD上运行。其最常见的用途是通过在多个服务器(例如Web,应用程序,数据库)上分布工作负载来提高服务器环境的性能和可靠性。它用于许多高调的环境,包括:GitHub,Imgur,Instagram和Twitter。 在本指南中,我们将概述HAProxy是什么,基本负载均衡术语,以及如何使用它来提高自己的服务器环境的性能和可靠性的示例。
HAProxy术语
在讨论负载均衡和代理时,有很多术语和概念很重要。我们将在下面的小节中讨论常用术语。 在介绍基本类型的负载均衡之前,我们将讨论ACL,后端和前端。
访问控制列表(ACL)
关于负载均衡,ACL用于测试一些条件并基于测试结果执行动作(例如选择服务器或阻止请求)。 ACL的使用允许基于各种因素(例如模式匹配和到后端的连接的数量)的灵活的网络流量转发。 ACL示例:
acl url_blog path_beg /blog
如果用户的请求的路径与
/博客开始这个ACL匹配。 这将匹配的请求
http://yourdomain.com/blog/blog-entry-1 ,例如。 有关ACL使用情况的详细指南,请查看
HAProxy的配置手册 。
后端
后端是一组接收转发请求的服务器。后端是在HAProxy的结构的
后端部分中定义。在其最基本的形式中,后端可以由以下定义:
后端可以包含一个或多个服务器 - 一般来说,向后端添加更多服务器将通过在多个服务器上分散负载来提高您的潜在负载容量。通过这种方式也可以提高可靠性,以防您的某些后端服务器变得不可用。 这里是一个两后端配置
,网络后端和
博客后端与每两个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代理将被使用,这是在解释
负载均衡的类型部分。 该
check
在年底选择
server
指令规定,健康检查应的后端服务器上执行。
前端
前端定义了如何将请求转发到后端。前端是在HAProxy的结构的
前端部分中定义。它们的定义由以下组件组成:
- 一组IP地址和端口(例如10.1.1.7:80,*:443等)
- ACL
- use_backend规则,定义哪些此后端,这取决于ACL条件相匹配使用,和/或处理任何其他情况下default_backend规则
前端可以配置为各种类型的网络流量,如下一节中所述。
负载均衡的类型
现在我们已经了解了用于负载均衡的基本组件,让我们了解负载均衡的基本类型。
无负载均衡
没有负载均衡的简单Web应用程序环境可能如下所示:
在这个例子中,用户直接连接到您的网络服务器,在
yourdomain.com并没有负载均衡。如果您的单个Web服务器关闭,用户将无法再访问您的Web服务器。此外,如果许多用户尝试同时访问您的服务器,并且无法处理负载,则他们可能会有较慢的体验,或者可能根本无法连接。
第4层负载均衡
将网络流量负载均衡到多个服务器的最简单的方法是使用第4层(传输层)负载均衡。负载均衡这种方式基于IP范围和端口(即会转发用户流量,如果一个请求进入
http://yourdomain.com/anything ,交通将被转发到一个处理
yourdomain.com上的所有请求,后端
端口80)。 对于第4层的更多详细信息,请访问我们的
TCP分段 。 这里是一个简单的第4层负载均衡示例:
用户访问负载均衡器,该转发用户的请求到
网络后端组后端服务器。 无论选择哪个后端服务器,都将直接响应用户的请求。 一般来说,所有在
网络后端的服务器应该提供相同的内容-否则,用户可能会收到不一致的内容。请注意,两个Web服务器都连接到同一个数据库服务器。
第7层负载均衡
另一种更复杂的负载均衡网络流量的方法是使用第7层(应用层)负载均衡。使用层7允许负载均衡器基于用户请求的内容将请求转发到不同的后端服务器。这种负载均衡模式允许您在同一个域和端口下运行多个Web应用程序服务器。有关第7层的更多详细信息,请访问我们的
HTTP小节 。 这里是一个简单的示例第7层负载均衡的图:
在本实施例中,如果用户请求
yourdomain.com/blog~~V,它们被转发到
博客后端,这是一组运行博客应用程序服务器。 其他请求转发到
网络的后端 ,这可能运行其他应用程序。在此示例中,两个后端使用相同的数据库服务器。 示例前端配置的片段如下所示:
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
的请求,如果用户的请求的路径与
/博客开始匹配。
use_backend blog-backend if url_blog
使用ACL来代理流量
博客后端 。
default_backend web-backend
指定所有其他流量将被转发到
网络的后端 。
负载均衡算法
所使用的负载均衡算法确定在负载均衡时将选择在后端中的哪个服务器。 HAProxy提供了几种算法选项。除了负载均衡算法,服务器可以分配一个
权重参数来操纵服务器是如何频繁地选择,相对于其他的服务器。 因为HAProxy提供了这么多的负载均衡算法,我们在这里只描述其中的几个。见
HAProxy的配置手册为算法的完整列表。 一些常用的算法如下:
roundrobin
Round Robin轮流选择服务器。这是默认算法。
最小
选择连接数最少的服务器 - 建议使用较长的会话。同一后端中的服务器也以循环方式轮换。
资源
这将根据源IP的哈希值(即用户的IP地址)选择要使用的服务器。这是一种确保用户将连接到同一服务器的方法。
粘性会话
某些应用程序要求用户继续连接到同一后端服务器。此持久性是通过粘性会话实现的,使用在需要它的后端
appsession参数。
健康检查
HAProxy使用运行状况检查来确定后端服务器是否可用于处理请求。这避免了如果服务器不可用,则必须从后端手动删除服务器。默认健康检查是尝试建立到服务器的TCP连接,即它检查后端服务器是否正在监听配置的IP地址和端口。 如果服务器无法进行运行状况检查,因此无法提供请求,它会在后端自动禁用,即流量不会转发到它,直到它再次变得健康。如果后端中的所有服务器都失败,则该服务将不可用,直到这些后端服务器中的至少一个再次变得健康。 对于某些类型的后端(如某些情况下的数据库服务器),缺省运行状况检查不足以确定服务器是否仍然正常。
其他解决方案
如果你觉得HAProxy可能对你的需求太复杂,以下解决方案可能更适合:
- Linux虚拟服务器(LVS) - 许多Linux发行版中包含的一个简单,快速的第4层负载均衡器
- Nginx - 一个快速可靠的Web服务器,也可用于代理和负载均衡目的。 Nginx通常与HAProxy结合使用,用于其缓存和压缩功能
高可用性
之前描述的第4层和第7层负载均衡设置都使用负载均衡器将流量引导到许多后端服务器之一。但是,您的负载均衡器是这些设置中的单点故障;如果它下降或受到请求的压力,它可能导致高延迟或停机时间为您的服务。
高可用性 (HA)的设置是没有单一故障点的基础设施。它通过向架构的每个层添加冗余来防止单个服务器故障成为停机事件。负载均衡器有助于后端层(Web /应用程序服务器)的冗余,但是对于真正的高可用性设置,您还需要具有冗余负载均衡器。 以下是基本高可用性设置的图表:
在此示例中,您有多个负载均衡器(一个活动和一个或多个被动)在静态IP地址后面,可以从一个服务器重新映射到另一个。当用户访问您的网站时,请求通过外部IP地址到活动负载均衡器。如果该负载均衡器失败,您的故障转移机制将检测它并自动将IP地址重新分配给其中一个被动服务器。有多种不同的方式来实现主动/被动HA设置。要了解更多信息,请参阅
如何使用浮动IP地址本节 。
结论
既然您对负载均衡有了基本的了解,并且了解了HAProxy有助于您的负载均衡需求的几种方法,您就有了坚实的基础,可以开始改善自己的服务器环境的性能和可靠性。 以下教程提供了HAProxy设置的详细示例:
如何使用HAProxy作为Ubuntu 14.04上的WordPress应用程序服务器的第4层负载均衡器
如何使用HAProxy设置MySQL负载均衡