安装、配置和运行HAProxy以在多个网络或应用程序服务器之间分配网络流量。您不必与大公司合作即可使用负载均衡器。您可能是一个业余爱好者,使用几台RaspberryPi计算机自行托管网站。也许您是一家小型企业的服务器管理员;也许你在一家大公司工作。无论您的情况如何,您都可以使用HAProxy负载均衡器来管理您的流量。HAProxy被称为“世界上速度最快、使用最广泛的软件负载均衡器”。它包括许多可以使您的应用程序更加安全和可靠的功能,包括内置速率限制、异常检测、连接队列、健康检查以及详细的日志和指标。学习本教程中涵盖的基本技能和概念将帮助您使用HAProxy构建更强大的基础设施。为什么需要负载均衡器?负载均衡器是一种在多个Web或应用程序服务器之间轻松分配连接的方法。事实上,HAProxy可以平衡任何类型的传输控制协议(TCP)流量,包括RDP、FTP、WebSockets或数据库连接。分散负载的能力意味着你不需要仅仅因为你的网站流量比谷歌多就购买一个拥有几十万千兆内存的大型网络服务器。负载平衡器还为您提供了灵活性。也许您现有的Web服务器不够强大,无法处理一年中繁忙时间的高峰需求,您想要添加一个,但只是暂时的。也许您想添加一些冗余以防一台服务器出现故障。使用HAProxy,您可以在需要时向后端池添加更多服务器,在不需要时将其移除。您还可以根据情况将请求路由到不同的服务器。例如,您可能希望使用几个缓存服务器(如Varnish)来处理您的静态内容,但将需要动态内容的任何内容(例如API端点)路由到更强大的机器。在这篇文章中,我将介绍如何设置一个非常基本的HAProxy环境,使用HTTPS侦听安全端口443,并利用几个后端Web服务器。它甚至会将所有来自预定义URL(如/api/)的流量发送到不同的服务器或服务器池。安装HAProxy要开始安装,请启动一个新的CentOS8服务器或实例并将系统更新为最新:$sudoyumupdate-y这通常需要一段时间。等待时给自己喝杯咖啡。此安装分为两部分:第一部分安装HAProxy的yum版本,第二部分编译并安装您的二进制文件,用最新版本覆盖以前的HAProxy。使用yum安装在生成systemd启动脚本等方面做了很多繁重的工作,所以运行yuminstall,然后从源代码编译并用最新版本覆盖HAProxy二进制文件:$sudoyuminstall-yhaproxy启用HAProxy服务:$sudosystemctlenablehaproxy要升级到最新版本(撰写本文时为2.2版),请编译源代码。许多人认为从源代码编译和安装程序需要很高的技术技能,但这是一个相当简单的过程。首先,使用yum安装一些提供编译代码工具的包:\lua-develpcre-developenssl-develsystemd-devel\makecurlzlib-devel使用git获取最新源码,切换到haproxy目录:$gitclonehttp://git.haproxy.org/git/haproxy$cdhaproxy运行以下三个命令来构建和安装具有集成Prometheus支持的HAProxy:$makeTARGET=linux-glibcUSE_LUA=1USE_OPENSSL=1USE_PCRE=1\PCREDIR=USE_ZLIB=1USE_SYSTEMD=1\EXTRA_OBJS="contrib/prometheus-exporter/service-prometheus.o"$sudomakePREFIX=/usrinstall#安装到/usr/sbin/haproxy通过查询版本来测试它:$haproxy-vyou你应该看到以下输出:HA-Proxyversion2.2.4-b16390-232020/10/09-https://haproxy.org/创建后端服务器HAProxy不直接提供任何流量,这是后端服务器,通常是Web或应用程序服务器。在本练习中,我使用名为Ncat的工具(网络的“瑞士军刀”)来创建一些极其简单的服务器。安装它:$sudoyuminstallnc-y如果你的系统启用了SELinux,你需要启用端口8404,这是用于访问HAProxy统计页面(下面解释)的端口,以及你的后端服务器端口:$sudodnfinstallpolicycoreutils-python-utils$sudosemanageport-a-thttp_port_t-ptcp8404$sudosemanageport-a-thttp_port_t-ptcp10080$sudosemanageport-a-thttp_port_t-ptcp10081$sudosemanageport-a-thttp_port_t-ptcp10082创建两个Ncat网络服务器和一个API服务器:$whiletrue;donc-l-p10080-c'echo-e"HTTP/1.1200OK\n\nThisisServerONE"';done&$whiletrue;donc-l-p10081-c'echo-e"HTTP/1.1200OK\n\nThisisServerTWO"';done&$whiletrue;donc-l-p10082-c'echo-e"HTTP/1.1200OK\nContent-Type:application/json\n\n{\"Message\":\"Hello,World!\"}"';done&这些简单的服务器打印出一条消息(例如“ThisisServerONE”)并运行直到服务器停止。在真实环境中,您将使用实际的网络和应用程序服务器。修改HAProxy配置文件HAProxy配置文件为/etc/haproxy/haproxy.cfg。您在此处进行修改以定义您的负载均衡器。这个基本配置将让你开始使用一个工作服务器:globallog127.0.0.1local2userhaproxygrouphaproxydefaultsmodehttplogglobaloptionhttplogfrontendmainbind*:80default_backendwebuse_backendapiif{path_beg-i/api/}#-------------------------#SSL终止-HAProxy处理加密。#要使用它,请将您的PEM文件放入/etc/haproxy/certs#然后编辑并取消注释绑定行(75)#-----------------------#bind*:443sslcrt/etc/haproxy/certs/haproxy.pemssl-min-verTLSv1.2#重定向方案httpsif!{ssl_fc}#-----------------------------#在http://test.local:8404/stats#启用统计信息------------------------------frontendstatsbind*:8404statsenablestatsuri/stats#---------------------------#各种后端之间的循环平衡#-----------------------------后端webserverweb1127.0.0.1:10080checkserverweb2127.0.0.1:10081check#------------------------#API后端服务APIcontent#----------------------------backendapiserverapi1127.0.0.1:10082checkrestartandreloadHAProxyHAProxy可能还没有运行,因此发出命令sudosystemctlrestarthaproxy以启动(或重新启动)它“重新启动”在非生产情况下很好,但是一旦启动并运行,您将希望养成使用sudo的习惯systemctlreloadhaproxy以避免服务中断,即使您的配置出现问题。例如,当您对/etc/haproxy/haproxy.cfg进行更改时,您需要使用sudosystemctlreloadhaproxy重新加载守护进程以使更改生效。如果有错误,它会让你知道,但继续使用以前的配置运行。使用sudosystemctlstatushaproxy检查HAProxy的状态。如果它没有报告任何错误,则说明您的服务器正在运行。要在服务器上使用curl进行测试,请在命令行中输入curlhttp://localhost/。如果您看到“ThisisServerONE”,则一切正常!运行curl几次,观察它在您的后端池中循环,并查看当您键入curlhttp://localhost/api/时会发生什么。添加/api/到URL的末尾会将所有流量发送到池中的第三个服务器。此时,您有一个正常运行的负载均衡器。检查你的统计数据。你可能已经注意到配置中定义了一个名为stats的前端,它监听8404端口:frontendstatsbind*:8404statsuri/statsstatsenable在浏览器中加载http://localhost:8404/stats.阅读HAProxy博客LearnHAProxy'sStatistics页面,了解您可以在这里做什么。一个强大的负载均衡器虽然我只介绍了HAProxy的一些功能,但您现在有一个服务器可以侦听端口80和443,将HTTP流量重定向到HTTPS,并在多个后端服务器流量之间进行平衡,甚至可以发送匹配特定流量的流量不同后端服务器的URL模式。您还可以解锁非常强大的HAProxy统计信息页面,让您对系统有一个很好的了解。这个练习可能看起来很简单,请不要误会,您刚刚构建并配置了一个非常强大的负载均衡器,能够处理大量流量。为了您的方便,我将本文中的所有命令放在GitHubGist中。
