HAProxy 代表高可用性代理。它是针对Web应用程序的开源和高性能TCP/HTTP负载均衡器和反向代理。它通过使用指定算法在多个后端Web服务器间分发流量,以防止应用程序被请求淹没。

使用HAProxy的顶级网站包括Twitter, Reddit, Tumblr和StackOverflow等。

在本指南中,我们将演示如何使用 Apache HTTP Server 在 RHEL 9 上逐步安装和配置 HAProxy。

实验准备

为了演示 HAProxy 如何作为负载均衡器工作,我们有一个三节点设置,其中有一个 HAProxy 负载均衡器和两个 web 服务器。

  • haproxy-rhel-09 10.128.0.48
  • apache-web-1 10.128.0.49
  • apache-web-2 10.128.0.50

(1) 更新所有节点上的 hosts 文件

The first step is to update the hosts file on all nodes with the
hostnames and IP addresses. So, access the hosts file on all systems as
shown.

用主机名和 IP 地址更新所有节点上的 hosts 文件

$ sudo vi /etc/hosts

添加如下映射内容

10.128.0.48  haproxy-rhel-09
10.128.0.49  apache-web-1
10.128.0.50  apache-web-2

保存更改并退出

(2) 安装 HAProxy

接下来,我们将在 RHEL 9 服务器上安装 HAProxy 包,它将充当负载均衡器。首先登录到您的服务器并升级软件包。

$ sudo dnf update -y

您可以在 RHEL 9 存储库中搜索 HAProxy 包的可用性,以及关于它的更多信息

$ sudo dnf info haproxy -y

从输出中,您可以看到大量关于 HAProxy 的信息,包括版本、发布和体系结构等

Dnf-Info-haproxy-rhel9

运行以下命令,安装软件包

$ sudo dnf install haproxy

dnf-command-install-haproxy-rhel9

运行以下命令,确认 HAProxy 是否已经安装

$ rpm -qi haproxy

Rpm-Query-Haproxy-RHEL9

(3) 配置 HAProxy

下一步是配置 HAProxy,请先备份配置文件,以防万一

$ sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.bak

接下来,打开配置文件

$ sudo vi /etc/haproxy/haproxy.cfg

We are going to update two sections: the frontend and the backend section.

我们将更新两个部分: 前端部分 (frontend) 和后端部分 (backend)

在 frontend 部分,我们将定义以下属性

  • HAProxy 负载均衡器的 IP 地址和它将侦听的端口。
  • 统计 URI

对于 backend 部分,我们将定义以下属性

  • 负载均衡算法
  • 访问负载均衡器统计信息的用户名和密码
  • Web 服务器的主机名和 IP 地址
frontend load_balancer
    bind 10.128.0.48:80
    option http-server-close
    option forwardfor
    stats uri /haproxy?stats

default_backend   webservers

backend webservers
    mode        http
    balance     roundrobin
    stats       enable
    stats auth  linuxtechi:Techi@1234
    option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost
    server  apache-web-1  10.128.0.49:80
    server  apache-web-2  10.128.0.50:80

Edit-Haproxy-File-RHEL9

(3) 配置 Rsyslog

下一步是配置 Rsyslog 服务,以便它可以记录 HAProxy 统计信息

$ sudo vi /etc/rsyslog.conf

取消注释这些行

module(load="imudp")
input(type="imudp" port="514")

保存更改并退出配置文件

接下来,创建一个 HAProxy 配置文件

$ sudo vi /etc/rsyslog.d/haproxy.conf

然后粘贴以下行,定义日志文件的位置

local2.=info     /var/log/haproxy-access.log
local2.notice    /var/log/haproxy-info.log

保存更改并退出配置文件

接下来,设置以下 SELinux 规则

$ sudo setsebool -P haproxy_connect_any 1

重新启动,使 rsyslog 更改生效

$ sudo systemctl restart rsyslog
$ sudo systemctl enable rsyslog

然后配置 HaProxy 随系统启动

$ sudo systemctl start haproxy
$ sudo systemctl enable haproxy

检查 HAProxy 是否正在运行,运行以下命令

$ sudo systemctl status haproxy

Haproxy-Service-Status-Check-RHEL9

如果配置了防火墙,请确保开放 80 端口

$ sudo firewall-cmd  --add-port=80/tcp --permanent
$ sudo firewall-cmd  --reload

(4) 设置 Web 服务器

到目前为止,我们已经将 HAProxy 服务器配置为负载均衡器,并使用轮询算法在 web 服务器之间分配工作负载。下一步是设置 web 服务器。

接下来,在每个服务器上安装 Apache 包

$ sudo dnf install httpd -y

接下来,启动并启用 Apache 服务。

$ sudo systemctl start httpd
$ sudo systemctl enable httpd

下一步是配置 web 服务器并创建不同的 index.html 文件,以便将它们区分开来。

For Web Server 1

切换到 root 用户并创建一个示例 HTML 文件

$ echo "<h1>Success! Welcome to Web Server 1</h1>" > /var/www/html/index.html

然后重新启动 Apache 服务

$ sudo systemctl restart httpd

For Web Server 2

类似地,切换到根用户并创建一个示例 HTML 文件。

$ echo "<h1>Success! Welcome to Web Server 2</h1>" > /var/www/html/index.html

然后重新启动 Apache 服务

$ sudo systemctl restart httpd

(5) 测试 HAProxy 负载均衡

最后一步是测试负载均衡器是否在工作,访问负载均衡器的 IP 地址即可

http://loadbalancer-IP

首先,您将被引导到 web 服务器的 HTML 页面。在本例中,您可以看到请求已发送到第一个 web 服务器。

Webpage-Server1-with-Loadbalancer

现在重新加载网页,这一次,您应该会看到第二个 web 服务器的 HTML 页面。这证实了循环算法在跨后端 web 服务器分发请求时得到了应用。

Webpage-Server2-with-Loadbalancer

或者,您也可以多次运行 curl 命令来测试 Round Robin 算法。

Curl-Command-Check-Loadbalancer-Backend-Server

完美,这也确认 haproxy 正在正常工作,因为它在两个节点之间分配流量。

您也可以通过浏览下面的 URL 查看统计数据

http://loadbalancer-IP/haprox...

它将提示您输入用户名和密码,使用我们在配置 haproxy 时定义的用户名和密码就可以了。

HaProxy-Stats-RHEL9

我的开源项目

酷瓜云课堂


鸠摩智首席音效师
472 声望9 粉丝

身强体健,龙精虎猛的活着。