今天基于互联网的应用和服务的要求越来越高,这给IT管理员带来了越来越大的压力。无论是面对突然的流量高峰、自身产生的流量增加,还是硬件故障和紧急维护等内部挑战,您的互联网应用程序都必须始终保持可用。即使是现代DevOps和持续交付实践也会危及Internet服务的可靠性和一致性能。不可预测性或缺乏一致的性能是您无法承受的。那么如何才能消除这些缺点呢?在大多数情况下,一个合适的负载均衡解决方案有望满足这一要求。今天给大家介绍一下如何使用HAProxy搭建一个HTTP负载均衡系统。HTTP负载平衡简介HTTP负载平衡是一种网络解决方案,负责在托管相同应用程序内容的多个服务器之间分配传入的HTTP或HTTPS流量。通过在多个可用服务器之间平衡应用程序请求,负载平衡系统可防止任何应用程序服务器成为单点故障,从而提高整体应用程序可用性和响应能力。它还允许您根据不断变化的工作负载轻松缩小/放大已部署的应用程序系统,只需添加或删除额外的应用程序服务器即可。何时何地使用负载平衡?由于负载平衡系统提高了服务器利用率并最大限度地提高了可用性,因此一旦您的服务器开始面临繁重的负载,或者您正在为更大的项目规划架构,就应该立即使用它。提前规划好负载均衡系统的用途是个好习惯。这样,当您需要扩展您的环境时,它将证明它在未来的用途。什么是HAProxy?HAProxy是一个流行的开源负载平衡和代理系统,用于GNU/Linux平台上的TCP/HTTP服务器。HAProxy采用单线程事件驱动架构设计,可轻松应对10G网卡线速,现已广泛应用于众多生产环境。其功能特性包括:自动健康检查、可定制的负载均衡算法、支持HTTPS/SSL和会话速率限制等。我们在本教程中试图实现什么?在本教程中,我们将介绍为HTTPWeb服务器配置基于HAProxy的负载均衡器的过程。先决条件您至少需要一台(最多两台)Web服务器来证明所构建的负载均衡系统的功能。我们假设后端HTTPWeb服务器已经设置并运行。在Linux上安装HAProxy对于大多数发行版,我们可以使用发行版的包管理器安装HAProxy。在Debian上安装HAProxy在Debian中,我们需要向Wheezy添加一个反向端口。为此,在/etc/apt/sources.list.d中创建一个名为“backports.list”的新文件,内容如下:debhttp://cdn.debian.net/debianwheezybackportsmainupdateyourrepositorydata,并安装HAProxy.#aptgetupdate#aptgetinstallhaproxy在Ubuntu上安装HAProxy#aptgetinstallhaproxy在CentOS和RHEL上安装HAProxy#yuminstallhaproxy配置HAProxy在本教程中,我们假设已经设置并运行了两个HTTPWeb服务器,它们的IP地址为192.168。100.2和192.168.100.3。我们还假设负载平衡系统将配置在IP地址为192.168.100.4的服务器上。为了让HAProxy发挥作用,您需要更改/etc/haproxy/haproxy.cfg中的几项。本节介绍了这些更改。如果不同的GNU/Linux发行版的配置不同,将在相应的段落中注明。1.配置日志记录您需要做的第一件事就是为您的HAProxy设置正确的日志记录,这对将来的调试非常有用。日志配置内容位于/etc/haproxy/haproxy.cfg的全局部分。以下是针对HAProxy配置日志记录的分发特定说明。CentOS或RHEL:要在CentOS/RHEL上启用日志记录,请将:log127.0.0.1local2替换为:log127.0.0.1local0接下来,在/var/log中为HAProxy创建一个单独的日志文件。为此,我们需要更改当前的rsyslog配置。为了使配置简单明了,我们将在/etc/rsyslog.d/中创建一个名为haproxy.conf的新文件,内容如下。$ModLoadimudp$UDPServerRun514$templateHaproxy,"%msg%\n"local0.=info/var/log/haproxy.log;Haproxylocal0.notice/var/log/haproxystatus.log;Haproxylocal0.*~这个配置会根据on$template的所有HAProxy消息都被隔离到/var/log中的日志文件。现在,重新启动rsyslog以使更改生效。#servicersyslogrestartDebian或Ubuntu:要在Debian或Ubuntu上为HAProxy启用日志记录,请将:log/dev/loglocal0log/dev/loglocal1notice替换为:log127.0.0.1local0接下来,为HAProxy配置一个单独的日志文件,编辑名为haproxy的文件。/etc/rsyslog.d/(或Debian中的49-haproxy.conf)中的conf具有以下内容。$ModLoadimudp$UDPServerRun514$templateHaproxy,"%msg%\n"local0.=info/var/log/haproxy.log;Haproxylocal0.notice/var/log/haproxystatus.log;Haproxylocal0.*~这个配置会根据on$template的所有HAProxy消息都被隔离到/var/log中的日志文件。现在,重新启动rsyslog以使更改生效。#servicersyslogrestart2。设置默认值下一步是为HAProxy设置默认变量。在/etc/haproxy/haproxy.cfg中找到defaults部分并将其替换为以下配置。logglobalmodehttpoptionhttplogoptiondontlognullretries3optionredispatchmaxconn20000contimeout5000clitimeout50000srvtimeout50000建议将上述配置用于HTTP负载平衡器,但可能不是适合您环境的最佳解决方案。如果是这样,请参阅HAProxy参考手册页以进行适当的更改和调整。3.Web服务器集群的配置Web服务器集群(Webfarm)的配置定义了可用的HTTP服务器集群。我们正在构建的负载均衡系统的大部分设置都会放在这里。我们现在将创建一些基本的配置,我们的节点将被定义。把前端部分到文件末尾的所有配置转换成下一个代码:listenwebfarm*:80modehttpstatsenablestatsuri/haproxy?statsstatsrealmHaproxy\Statisticsstatsauthhaproxy:statsbalancroundrobinforhttpclosesforclosedoptionLBNinsertindirectnserverweb01192.168.100.2:80cookienode1checkserverweb02192.168.100.3:80cookienode2check“listenwebfarm*:80”这一行定义了我们的负载均衡器将监听哪些接口。出于本教程的目的,我将值设置为“*”,这使负载均衡器侦听我们所有的接口。在现实世界的场景中,这可能是不可取的,应该用可从Internet访问的界面代替。statsenablestatsuri/haproxy?statsstatsrealmHaproxy\Statisticsstatsauthhaproxy:stats上面的设置说明负载均衡器系统的统计信息可以在http://
