如何在 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 上的 HAProxy安装在 CentOS 上的 HAProxy

配置 HAProxy 之前要了解的要点

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

HAProxy 支持哪些模式?

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

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

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

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

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

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

其他的是URI、hdr、first…

HAProxy 中的 ACL 是什么?

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

如何配置 HAProxy?

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

用于演示 HAProxy 1用于演示 HAProxy

HAProxy的 example 配置文件可以在 /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 在第 3 行中,讲述了与客户端的连接应该终止多少秒,这里是 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 负载均衡器。

感谢您的阅读! ?