当前位置: 首页 > 科技观察

如何在Linux上使用HAProxy配置HTTP负载均衡系统?_0

时间:2023-03-20 14:20:57 科技观察

今天基于互联网的应用和服务的要求越来越高,这给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:///haproxy?stats访问。此访问通过使用登录名“haproxy”和密码“stats”的简单HTTP身份验证来保护。这些设置应替换为您自己的登录信息。如果您不想看到这些统计数据,您可以完全禁用它们。下面是HAProxy统计信息的示例。“balanceroundrobin”行定义了我们将使用哪种类型的负载平衡。在本教程中,我们将使用一个简单的循环算法,这对于HTTP负载平衡来说绰绰有余。HAProxy还提供其他类型的负载平衡:?leastconn:连接数最少的服务器首先接收连接。?source:对源IP地址进行Hash处理,将正在运行的服务器的总权重除以该hash值,决定哪个服务器接收请求。?uri:URI的左边部分(问号之前)被散列,运行服务器的总权重除以散列值。生成的结果决定了哪个服务器将接收请求。?url_param:变量中指定的URL参数将在每个HTTPGET请求的查询字符串中查询。您基本上可以使用特制的URL将请求锁定到特定的负载均衡器。?hdr(name):HTTP标头将在每个HTTP请求中被查询以定向到特定节点。“cookieLBNinsertindirectnocache”这一行告诉我们的负载均衡器存储一个持久性cookie,这使我们能够准确指出集群中的哪个节点用于会话。这些节点cookie将以指定的名称存储。在我们的示例中,我使用了“LBN”,但您可以随意命名。节点会将字符串存储为cookie的值。serverweb01192.168.100.2:80cookienode1checkserverweb02192.168.100.3:80cookienode2check上面的部分定义了一个网络服务器节点集群。每个服务器都由一个内部名称(例如web01和web02)、一个IP地址和一个唯一的cookie字符串表示。Cookie字符串可以定义为您需要的任何名称。我使用了简单的node1、node2...node(n)。启动HAProxy配置完成后,您可以启动HAProxy以验证一切是否按预期工作。#p#StartHAProxyonCentos/RHEL使用如下命令让HAProxy在系统开机后启动,并打开:#chkconfighaproxyon#servicehaproxystart当然不要忘记在防火墙中开启80端口,如下图。CentOS/RHEL7上的防火墙:#firewallcmdpermanentzone=publicaddport=80/tcp#firewallcmdreloadCentOS/RHEL6上的防火墙:将以下行添加到/etc/sysconfig/iptables的“:OUTPUTACCEPT”部分:AINPUTmstatestateNEWmtcpptcpdport80jACCEPT然后重新启动iptables:#serviceiptablesrestart在Debian上启动HAProxy使用以下命令启动HAProxy:#servicehaproxystart不要忘记在防火墙中启用端口80,为此将以下行添加到/etc/iptables.up.rules:AINPUTptcpdport80jACCEPT在Ubuntu上启动HAProxy使HAProxy能够系统启动后启动,只需在/etc/default/haproxy中将“ENABLED”选项设置为“1”:ENABLED=1启动HAProxy:#servicehaproxystart然后在防火墙中启用端口80:#ufwallow80测试HAProxy检查HAproxy是否正常工作正确地,我们可以执行以下步骤:首先,准备包含以下内容的test.php文件:这个PHP文件会告诉我们哪个服务器(也就是负载均衡系统)转发请求,哪个后端web服务器实际处理请求。将PHP文件放在两个后端Web服务器的根目录中。现在,使用curl命令从负载均衡器(192.168.100.4)中提取此PHP文件。$curlhttp://192.168.100.4/test.php当我们多次运行这个命令时,我们应该看到以下两个输出交替出现(由于循环调度算法)。ServerIP:192.168.100.2X-Forwarded-for:192.168.100.4ServerIP:192.168.100.3X-Forwarded-for:192.168.100.4如果我们停止两个后端Web服务器之一,curl命令应该仍然会执行,指示对另一个可用的Web服务器的请求。结论至此,您应该拥有一个功能齐全的负载均衡系统,可以以循环模式为您的网站节点提供请求。与往常一样,您可以随意更改配置以更好地适应您的基础架构。希望本教程可以帮助您使您的网站项目更加抗压和可用。正如您已经注意到的,本教程中介绍的设置仅适用于一个负载均衡器。这意味着,我们将一个单点故障换成另一个单点故障。在真实场景中,您应该部署至少两个或三个负载均衡器以防止可能出现的任何故障,但这超出了本教程的范围。如果您有任何问题或建议,请留言。英文:http://xmodulo.com/haproxy-http-load-balancer-linux.html