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 的信息,包括版本、发布和体系结构等
运行以下命令,安装软件包
$ sudo dnf install haproxy
运行以下命令,确认 HAProxy 是否已经安装
$ rpm -qi haproxy
(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
(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
如果配置了防火墙,请确保开放 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 地址即可
首先,您将被引导到 web 服务器的 HTML 页面。在本例中,您可以看到请求已发送到第一个 web 服务器。
现在重新加载网页,这一次,您应该会看到第二个 web 服务器的 HTML 页面。这证实了循环算法在跨后端 web 服务器分发请求时得到了应用。
或者,您也可以多次运行 curl 命令来测试 Round Robin 算法。
完美,这也确认 haproxy 正在正常工作,因为它在两个节点之间分配流量。
您也可以通过浏览下面的 URL 查看统计数据
http://loadbalancer-IP/haprox...
它将提示您输入用户名和密码,使用我们在配置 haproxy 时定义的用户名和密码就可以了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。