如何在 CentOS 上将 HAProxy 设置为 Nginx 的负载均衡器?

在本文中,我们将在 CentOS 上设置 HAProxy 作为 Nginx 的负载均衡器。 我们假设您已经设置并运行了 NGINX 服务。

什么是负载均衡?

负载平衡器位于客户端和服务器之间,并在多个服务器之间分配网络流量。 它的唯一目的是将传入的请求分发到能够满足请求的服务器。 这是一个没有负载平衡的流程图。

没有负载均衡

负载均衡器位于客户端和服务器之间,如下图所示。

负载均衡

什么是HAProxy?

HAProxy 是一种免费、快速、流行且开源的高可用性服务器负载平衡器和代理解决方案,适用于基于 TCP 和 HTTP 的应用程序。 它是用 C 语言编写的,是使用最广泛的负载均衡器。 它被 Github、Stackoverflow、Imgur 等顶级网站使用。

如何在 CentOS 上安装 HAProxy?

要在 CentOS 上安装 HAProxy,您可以使用 yum 包管理器,如下所述。

在我们继续之前,通过执行以下命令确保您的 yum 索引是最新的:

sudo yum update 

之后,我们现在可以使用 yum 包管理器安装 HAProxy,执行:

sudo yum install haproxy 

一旦我们安装了它,我们就可以继续配置 HAProxy。

CentOS 上安装 HAProxyCentOS 上安装 HAProxy

配置 HAProxy 前需要了解的要点

在本节中,我们将了解 HAProxy 的一些基础知识。

HAProxy 支持哪些模式?

HAProxy 支持两种模式,即:TCP 和 HTTP。 TCP模式称为四层代理,HTTP模式称为七层代理。 这两种模式各有利弊。 TCP 模型是默认模式。

TCP 模式更轻、更快,因为它的唯一目的是传输数据,而不必读取数据。 对于非 HTTP 服务来说,这是一个更好的选择。

HTTP 模式可以改变 HTTP 消息,因为它读取之间的数据、更好的健康检查和速率限制请求。 对于使用 HTTP 协议的应用程序来说,这是一个更好的选择。

HAProxy 支持哪些负载均衡机制?

HAProxy 有很多负载均衡算法。 根据官方文档,这样的算法大约有十种。 但在本教程中,我们将使用循环算法演示 HAProxy。 下面列出了前三种算法:

  1. 循环 – 在该算法中,HAProxy 从其中一台服务器开始,依次选择每台服务器。
  2. 最小连接 – 在这种情况下,它只是选择连接数最少的服务器。
  3. 来源 – 在这种情况下,它根据连接的来源(客户端)选择服务器。

其他的是URI,hdr,首先……

HAProxy 中的 ACL 是什么?

ACL 或访问控制列表是可以使用逻辑运算符(AND、OR、NOT)进行操作的条件。 例如,如果您想拒绝任何导航到 /wp-admin/ 在 WordPress 网站上,而不是从您的静态 IP 地址访问它,您可以使用访问控制列表。

如何配置HAProxy?

为了演示如何配置 HAProxy,我们设置了一个测试环境,该环境由三个 NGINX 实例组成,这些实例托管在同一台服务器上,但位于具有不同网页的不同端口。 我们已经在 CentOS 服务器上安装了 HAProxy,并使用循环机制将其配置为这些 NGINX 实例的负载均衡器。 我们还将设置一个 ACL 来拒绝任何请求 /admin/ 来自用户。

用于演示 HAProxy 1用于演示 HAProxy

HAProxy 的示例配置文件可以在 /etc/haproxy 命名为 haproxy.cfg. 通过执行进入目录:

cd /etc/haproxy 
HAProxy 示例配置文件HAProxy 示例配置文件

但在本教程中,我们将使用以下简单的 HAProxy 配置:

frontend httpd         bind *:80         timeout client 30s         mode http         http-request deny if { path -i -m beg /admin/ } !{ src 192.168.0.149 } 	    default_backend httpd-servers  backend httpd-servers         timeout connect 5s         timeout server 20s         balance roundrobin         mode http         server httpd1000 192.168.0.191:1000         server httpd2000 192.168.0.191:2000         server httpd3000 192.168.0.191:3000 

配置前端部分说明:

frontend http 在第一行中讲述了应用程序部分,我们将其命名为 httpd 在这里,但您可以将其命名为任何您想要的名称。

bind 在第 2 行中说明要绑定的 IP 和端口。

timeout client 30s 在第三行告诉之后,与客户端的连接应该终止多少秒,这里是 30 秒。

mode http 在第 4 行决定它使用 http 模式,您可以通过替换将其更改为 TCP httptcp.

http-request deny if { path -i -m beg /admin/ } !{ src 192.168.0.149 } 第 5 行是一个拒绝任何请求的 ACL /admin/ 来自用户以外的路径 192.168.0.149.

default_backend httpd-servers 在第 6 行中说明默认情况下为此前端使用哪个后端。

现在我们转到配置的服务器部分:

backend httpd-servers 第 8 行定义了位于 HAProxy 后面的配置的服务器部分。

timeout connect 5s 第 9 行决定了 HAProxy 在跳转到另一台服务器之前应该尝试连接到服务器的秒数。

timeout server 20s 在第 10 行中确定了 HAProxy 在跳转到另一个服务器之前应该等待对来自服务器的输入的响应的时间间隔。

balance roundrobin 第 11 行定义了要使用的负载平衡机制。 我们在这里使用循环法。

mode http 在第 12 行决定它使用 http 模式应与前端模式匹配。

然后服务器以格式列出 server serverName ip:port 每行每台服务器。

如何在 CentOS 上启动 HAProxy?

完成配置后,我们现在可以继续启动它。 在此之前,通过执行以下命令在防火墙中允许端口 80:

sudo firewall-cmd --zone=public --permanent --add-service=http 

您可以通过执行以下命令来测试 HAProxy 配置:

sudo haproxy -f /path/to/configuration 

这应该会在您的系统上启动 HAProxy。 要在每次系统重新启动时启动 HAProxy,请使用 系统控制 启动它。 配置在 /etc/haproxy/haproxy.cfg 将会被使用。

要在启用 SELinux 的情况下启动 HAProxy,请执行:

sudo setsebool -P haproxy_connect_any 1 

或者,您可以通过执行以下命令暂时禁用 SELinux:

sudo setenforce 0 

然后使用以下 系统控制 启用和启动服务的命令:

sudo systemctl enable haproxy sudo systemctl start haproxy 

现在每次重新启动时,HAProxy 都会自行启动。

如果我们在浏览器中打开 192.168.0.195,每次重新加载时,我们都可以看到循环运行。

NGINX 实例 1NGINX 实例 1
NGINX 实例 2NGINX 实例 2
NGINX 实例 3NGINX 实例 3

现在让我们测试我们在配置中设置的 ACL /admin/.

我是用户(即 192.168.0.149),当我导航到 192.168.0.195/admin/,我可以轻松访问它

使用 192.168.0.149 用户访问管理员访问 admin 和 192.168.0.149 用户

并且,当尝试与任何其他用户访问同一目的地时。

禁止请求 192.168.0.149 以外的任何用户 1禁止任何用户以外的请求 192.168.0.149

这就是 ACL 在 HAProxy 中的工作方式!

结论

在 CentOS 上安装 HAProxy 非常简单,但配置部分可能有点棘手,我们试图涵盖本文中的所有基础知识,以帮助您在系统上设置一个简单的 HAProxy 负载均衡器。

感谢您的阅读! ?