什么是 HAProxy ?
HaProxy (High Availability Proxy) 是一个开源免费的 HTTP 负载均衡器和反向代理解决方案,广泛用于为 web 应用程序,用于提供高可用性,并保证最大可能的在线时间。.
它是一个高性能的应用程序,通过跨多个节点分配流量来为您的 web 应用注入性能改进。通过这种方式,它可以确保 web 服务器不会因为传入的 HTTP 请求而超载,因为工作负载被公平地分布在几个节点上。
虽然是免费的,但企业版提供了额外的功能,如 WAF (Web Application Firewall )、应用程序加速、高级 DDoS 保护、高级健康检查等等。
实验准备
要实际演示 HAProxy,您至少需要三个 Linux 系统。其中一个将充当 HAProxy 负载均衡器,而其余的将充当 web 服务器。
[图片上传失败...(image-a1cd6b-1663905359569)]
(第 1 步) 安装 HAProxy 负载均衡器
第一步是在 Ubuntu 上安装 HAProxy,Ubuntu 软件库默认提供 HAProxy,但它不是最新的。
要查看默认软件库中的可用 Haproxy 软件包版本,请运行
$ sudo apt update
$ sudo apt show haproxy
[图片上传失败...(image-ff26e9-1663905359569)]
但是最新的长期支持版本是 HAProxy 2.6,所以要安装 HAProxy 2.6,首先启用 PPA 库,运行以下命令
$ sudo add-apt-repository ppa:vbernat/haproxy-2.6 -y
现在通过执行以下命令安装 haproxy 2.6
$ sudo apt update
$ sudo apt install -y haproxy=2.6.\*
安装完成后,确认 HAProxy 的版本,如图所示。
$ haproxy -v
[图片上传失败...(image-181c2c-1663905359569)]
安装后,HAProxy 服务默认启动,监听 TCP 端口 80。如果需要验证 HAProxy 是否正在运行,请执行命令
$ sudo systemctl status haproxy
[图片上传失败...(image-6c24bb-1663905359569)]
建议将服务随系统自动启动,请执行命令
$ sudo systemctl enable haproxy
(第 2 步) 配置 HAProxy
下一步是配置 Haproxy,用以在两个 Web 服务器之间均匀分配流量。Haproxy 的配置文件为 /etc/haproxy/haproxy.cfg
在对文件进行更改之前,首先做一个备份。
$ sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bk
然后使用文本编辑器打开文件。这里,我们用的是 Nano。
$ sudo nano /etc/haproxy/haproxy.cfg
Haproxy 配置文件由以下几个部分组成
- global: 它包含处理性能调优和安全性的系统范围设置。
- defaults: 此部分包含无需额外定制即可正常工作的设置。这些设置包括超时和错误报告配置。
- frontend and backend: 此部分定义前端和后端设置。对于前端,我们将 HAProxy 服务器定义为前端,它将向后端服务器 (web 服务器) 分发请求。我们还将 HAProxy 设置为使用轮询负载均衡标准来分配流量。
- listen: 这是一个可选设置,使您能够启用 HAProxy 统计信息的监控。
现在定义前端和后端设置
frontend linuxtechi
bind 10.128.0.25:80
stats uri /haproxy?stats
default_backend web-servers
backend web-servers
balance roundrobin
server web1 10.128.0.27:80
server web2 10.128.0.26:80
在这里,我们已经将 HAProxy 服务器和 web 服务器节点配置为监听端口 80。请确保用您的设置替换 HAProxy 和 web 服务器的 IP 地址。
为了能够在浏览器中查看 HAProxy 统计信息,添加以下侦听部分。
listen stats
bind *:8080
stats enable
stats uri /
stats refresh 5s
stats realm Haproxy\ Statistics
stats auth linuxtechi:P@ss123
stats auth 指令为登录用户指定用户名和密码,以便在浏览器上查看统计信息。
[图片上传失败...(image-b53c11-1663905359569)]
保存更改并退出配置文件,重新加载设置需要重启 haproxy 服务。
$ sudo systemctl restart haproxy
接下来编辑 /etc /hosts 文件
定义 haproxy 主服务器和 web 服务器的主机名和 IP 地址
10.128.0.25 haproxy
10.128.0.27 web1
10.128.0.27 web2
保存修改并退出
(第 3 步) 配置 Web Servers
在这一步中,我们将配置其余的 Linux 系统,它们是 web 服务器。
请登录到各 web 服务器,安装 Apache web 服务器包。
$ sudo apt update
$ sudo apt install -y apache2
接下来,验证 Apache 是否在每个服务器上运行。
$ sudo systemctl status apache2
然后设置 apache2 服务随系统启动
$ sudo systemctl enable apache2
接下来,修改每个 web 服务器的 index.html 文件。
对 Web Server 1 做如下操作:
切换到 root 用户
$ sudo su
然后执行如下命令
# echo "<H1>Hello! This is webserver1: 10.128.0.27 </H1>" > /var/www/html/index.html
对 Web Server 2 做如下操作:
切换到 root 用户
$ sudo su
然后执行如下命令
# echo "<H1>Hello! This is webserver2: 10.128.0.26 </H1>" > /var/www/html/index.html
接下来,配置 /etc /hosts 文件。
$ sudo nano /etc/hosts
向每个节点添加 HAProxy 条目
10.128.0.25 haproxy
保存更改并退出配置文件
确保能够从每个 web 服务器节点 ping 通 HAProxy 服务器。
[图片上传失败...(image-dd49b8-1663905359570)]
[图片上传失败...(image-dc1e09-1663905359570)]
注意: 如果 web 服务器上启用了 80 端口,请确保操作系统防火墙允许 80 端口。
(第 4 步) 测试 HAProxy 负载均衡
到目前为止,我们已经成功地配置了 HAProxy 和两个后端 web 服务器。要测试您的配置是否按预期工作,请访问 HAProxy 服务器的 IP 地址。
http://10.128.0.25
当您第一次浏览时,您应该看到第一个 web 服务器的网页
[图片上传失败...(image-95f765-1663905359570)]
在刷新后,您应该看到第二个 web 服务器的网页
[图片上传失败...(image-47bd40-1663905359570)]
这表明 HAProxy 服务器通过 Round robin 算法将传入的 web 流量分布在两个 web 服务器上,从而出色地完成了负载平衡工作。
此外,您可以使用 curl 命令使用下面的 do-while 循环测试
$ while true; do curl 10.128.0.25; sleep 1; done
[图片上传失败...(image-db8bb8-1663905359570)]
要查看监控统计信息,请访问以下地址
您将需要进行身份验证,因此请按照步骤 2 中指定的方式提供详细信息。
[图片上传失败...(image-112575-1663905359570)]
您将看到下面的页面,其中包含关于 HAProxy 服务器性能的统计数据。
[图片上传失败...(image-7478e7-1663905359570)]