随着应用程序的扩展,需要增加更多的服务器来处理更多的流量。应用程序接收的流量越多,服务器过载时面临停机的可能性就越高。但是,有一些工具,如HAProxy,允许您定义如何处理流量,以平衡服务器上的负载。这个想法是为了确保没有服务器过载。High Availability Proxy是一款开源软件,旨在提供可靠的负载平衡,同时充当TCP/HTTP应用程序的反向代理。
HAProxy的工作是减少任何服务器的过载,它通过分配流量来实现这一点,以确保没有服务器过载,但其他服务器仍然可用。像Instagram这样的平台由于每秒发送的请求而具有大量的流量,因此需要使用HAProxy来定义服务器的前端、后端和侦听器,以避免过载。
为什么使用HAProxy
在了解HAProxy的安装和配置之前,您应该了解我们为什么需要它,因为它提供的功能。以下是HAProxy的主要特性:
- 负载平衡-使用HAProxy,您可以轻松地将流量分布在不同的服务器上,以避免单个服务器过载。这样,您的应用程序将不会面临任何停机问题,并且您将获得更快的响应速度、可靠性和可用性。
- 日志记录和监控-您将获得详细的服务器监控日志,以帮助解决问题。此外,HAProxy还有一个统计页面,在那里您可以获得负载均衡器的实时性能分析。
- 健康检查—即使您的服务器也需要健康检查来确定其状态。HAProxy经常运行健康检查,以了解服务器的状态,以提高其可靠性。如果检测到不正常的服务器,它会将流量重新路由到另一个服务器。
- 反向代理--增强安全性的一种方法是隐藏内部结构。幸运的是,HAProxy允许您接收来自客户端的流量,并将它们路由到适当的服务器。这样,黑客就看不到你的内部结构了。
- ACL(访问控制列表)-使用HAProxy,您可以使用各种标准(如路径、标头和IP地址)定义流量路由应如何发生。因此,为您的流量定义自定义路由逻辑变得更容易。
- SSL终止—默认情况下,SSL/TLS由后端服务器卸载,从而导致性能下降。然而,使用HAProxy,SSL/TLS终止发生在负载平衡器,卸载后端服务器中的任务。
安装HAProxy
到目前为止,我们定义了什么是HAProxy,并讨论了它提供的功能,以帮助您了解为什么您的应用程序需要它。下一步是了解如何在您的系统上安装它。
如果您运行的是Ubuntu或Debian系统,则可以从APT包管理器安装HAProxy。运行以下命令:
$sudo apt更新
$sudo apt install haproxy
类似地,如果您使用的是基于RHEL的系统或CentOS,则可以从“yum”包管理器中获得HAProxy。运行以下命令:
$sudo yum更新
$sudo yum install haproxy
在我们的例子中,我们使用的是Ubuntu。因此,我们的命令如下:
然后,我们可以检查它的版本,以确定我们成功安装HAProxy。
$haproxy——版本
如何配置HAProxy
安装HAProxy后,您现在可以打开其配置文件(/etc/haproxy/haproxy.cfg)并定义要用于负载平衡器的设置。
使用诸如nano或vim之类的编辑器打开配置文件。
$sudo nano/etc/haproxy/haproxy.cfg
您将获得如下所示的配置文件:
从配置文件中,您会注意到它包含两个主要部分:
- global—它是文件中的第一个部分,它的值不应该改变。它包含定义HAProxy工作方式的进程设置。例如,它定义了日志记录细节以及可以执行HAProxy函数的组或用户。注意,在这个配置文件中,你只能有一个全局部分,它的值应该保持不变。
- 默认值—此部分包含节点的默认值。例如,您可以在本节中为HAProxy添加超时或操作模式。此外,在HAProxy配置文件中可能有许多默认部分。
以下是“默认”部分的一个示例:
在给定的映像中,模式定义了HAProxy如何处理传入请求。您可以将模式设置为HTTP或TCP。至于超时,它指定HAProxy应该等待多长时间。例如,超时连接是建立后端连接之前等待的时间。超时客户端是HAProxy应该等待客户端发送数据的时间。超时服务器是等待相应的服务器发送将被转发到客户端的数据的时间。如何定义默认值对于提高应用程序的响应时间非常重要。
还有三个部分,您应该定义负载平衡器,以便按预期工作。
- 前端—这部分包含您希望客户端用于建立连接的IP地址。
- backend—它显示了处理前端部分中定义的请求的服务器池。
- listen—当您想要路由特定的服务器组时会连续使用它。本节结合了前端和后端的任务。
让我们举个例子
对于本例,我们定义前端以使用具有特定端口的本地主机。接下来,我们将其与运行本地主机的后端绑定,然后运行一个Python服务器以测试负载平衡是否按预期运行。按照给定的步骤进行操作。
第1步:配置默认部分
在“DEFAULTS”部分中,我们设置要在节点间共享的值。对于我们的例子,我们将模式设置为HTTP,并为客户端和服务器设置超时。您可以根据需要调整时间。
请记住,所有这些编辑都在位于"/etc/haproxy/haproxy.cfg"的HAProxy配置中。配置了默认值部分之后,让我们定义前端。
步骤2:配置前端部分
在前端部分,我们定义了客户端如何访问应用程序或网站。我们提供应用程序的IP地址。但对于这个案子,我们和本地主机合作。因此,我们的IP地址是www.example.com的后备地址,我们希望通过端口80接受连接。
您必须添加"bind"关键字,该关键字充当指定端口上IP地址的侦听器。您定义的IP地址和端口是负载均衡器用来接受传入请求的。
在配置文件中添加前面的行之后,我们必须使用以下命令重新启动"haproxy. service":
$sudo systemctl restart haproxy
在这一点上,我们可以尝试使用“curl”命令将请求发送到我们的网站。运行该命令并添加目标IP地址。
$curl
因为我们还没有定义我们的HAProxy的后端是如何的,所以我们得到一个503错误,如下所示。尽管负载均衡器设法接收了请求,但当前没有服务器可用来处理它,因此出现了错误。
第三步:配置后端
后端部分是我们定义将处理任何传入请求的服务器的地方。负载平衡器参考本节以了解它应该如何分配传入的请求,以确保没有服务器过载。
我们之前得到的503错误是因为我们没有任何后端来处理请求。让我们首先定义"default_backend"来处理请求。你在前端部分定义它。我们将其命名为"linux_backend"。
接下来,创建一个与前端部分中定义的名称相同的后端部分。然后,您必须使用“server”关键字,然后加上服务器名称及其IP地址。下图显示我们使用IP www.example.com和端口8001定义了"linuxhint1"服务器:
您可以有一个后端服务器池,但我们只为这种情况定义了一个。确保保存文件。我们必须重新启动HAProxy服务。
为了测试创建的HAProxy负载均衡器,我们使用Python3创建一个Web服务器,以使用我们指定的IP地址绑定后端端口。我们按如下方式运行该命令:
$python3—m http. server 8001——bind www.example.com
确保替换值以匹配IP地址和要绑定的端口。注意Web服务器是如何创建和侦听任何传入请求的。
在另一个终端上,让我们使用"curl"命令向服务器发送请求。
$curl
不像我们之前得到的503错误显示没有服务器可用于处理请求,这次我们得到了一个输出,它确认我们的HAProxy负载均衡器正在工作。
如果您返回到我们创建Web服务器的前一个终端,您将看到一个成功输出200,它确认HAProxy接收到请求,并通过将其发送到我们的后端部分中定义的服务器来处理它。
这就是如何为您的网站或应用程序设置一个简单的HAProxy。
使用规则
在我们结束本HAProxy初学者教程之前,让我们快速讨论一下如何定义规则来指导负载均衡器如何处理请求。
按照与前面相同的步骤,让我们保留默认部分不变,并在前端部分定义不同的IP地址。我们绑定相同的IP地址,但接受来自不同端口的连接。
此外,我们有我们的"default_backend"和另一个"use_backend",这是一个不同的服务器池,我们将根据请求来自的端口使用。在下面的配置中,所有通过端口81的请求都由"Linux2_backend"中的服务器处理。任何其他请求都由"default_backend"处理。
然后,我们创建在前端中定义的后端部分。请注意,对于每个后端,我们都指定了一个不同的服务器来处理请求。
快速重启HAProxy服务。
让我们使用Python3创建Web服务器,并在端口8002上绑定请求,端口8002是备用的后端服务器。
当向它发送请求时,我们将端口指定为81,以触发负载均衡器将请求发送到备用服务器,这不是默认服务器。
重新检查我们的Web服务器,我们可以看到它设法接收和处理请求,并给出200(成功)响应。
这就是你如何定义规则来指导你的负载平衡器如何接收和处理请求。
结论
HAProxy是实现TCP/HTTP应用程序负载平衡的理想解决方案。安装后,您可以轻松地编辑配置文件以定义默认、前端和后端部分,以指导负载均衡器如何工作。这篇文章是HAProxy的初学者指南。它首先定义了HAProxy及其功能。接下来,深入了解如何配置HAProxy,并通过举例说明如何将HAProxy用作负载均衡器。