Haproxy概念
Haproxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
Haproxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。
Haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。
并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
企业版提供了额外的功能,如 WAF (Web Application Firewall )、应用程序加速、高级 DDoS 保护、高级健康检查等等。
Haproxy有8种负载均衡算法(balance),分别如下:
1.balance roundrobin # 轮询,软负载均衡基本都具备这种算法
2.balance static-rr # 根据权重,建议使用
3.balance leastconn # 最少连接者先处理,建议使用
4.balance source # 根据请求源IP,建议使用
5.balance uri # 根据请求的URI
6.balance url_param,# 根据请求的URl参数'balance url_param' requires an URL parameter name
7.balance hdr(name) # 根据HTTP请求头来锁定每一次HTTP请求
8.balance rdp-cookie(name) # 根据据cookie(name)来锁定并哈希每一次TCP请求
实验准备
要实际演示 HAProxy,至少需要三个 Linux 系统。其中一个将充当 HAProxy 负载均衡器,而其余的将充当 web 服务器。
IP Address | Hostname |
---|---|
192.168.8.23 | haproxy |
192.168.8.22 | web1 |
192.168.8.21 | web2 |
(第 1 步) 安装 HAProxy 负载均衡器
第一步是在 Ubuntu 上安装 HAProxy,Ubuntu 软件库默认提供 HAProxy。
sudo apt update
sudo apt show haproxy
安装haproxy
sudo apt install -y haproxy
安装完成后,确认 HAProxy 的版本,如图所示。
haproxy -v
安装后,HAProxy 服务默认启动,监听 TCP 端口 80。如果需要验证 HAProxy 是否正在运行,请执行命令
sudo systemctl status haproxy
建议将服务随系统自动启动,请执行命令
sudo systemctl enable haproxy
(第 2 步) 配置 HAProxy
下一步是配置 Haproxy,用以在两个 Web 服务器之间均匀分配流量。Haproxy 的配置文件为 /etc/haproxy/haproxy.cfg
在对文件进行更改之前,首先做一个备份。
sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bk
然后使用文本编辑器打开文件。
sudo vim /etc/haproxy/haproxy.cfg
Haproxy 配置文件由以下几个部分组成
- global: 它包含处理性能调优和安全性的系统范围设置。
- defaults: 此部分包含无需额外定制即可正常工作的设置。这些设置包括超时和错误报告配置。
- frontend and backend: 此部分定义前端和后端设置。对于前端,我们将 HAProxy 服务器定义为前端,它将向后端服务器 (web 服务器) 分发请求。我们还将 HAProxy 设置为使用轮询负载均衡标准来分配流量。
- listen: 这是一个可选设置,使您能够启用 HAProxy 统计信息的监控。
现在定义前端和后端设置
frontend test
bind 192.168.8.23:80
stats uri /haproxy?stats
default_backend web-servers
backend web-servers
balance roundrobin
server web1 192.168.8.21:80
server web2 192.168.8.22: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 test:root123
stats auth 指令为登录用户指定用户名和密码,以便在浏览器上查看统计信息。
保存更改并退出配置文件,重新加载设置需要重启 haproxy 服务。
sudo systemctl restart haproxy
接下来编辑 /etc/hosts 文件
定义 haproxy 主服务器和 web 服务器的主机名和 IP 地址
192.168.8.23 haproxy
192.168.8.21 web1
192.168.8.22 web2
保存修改并退出
(第 3 步) 配置 Web Servers
在这一步中,我们将配置其余的 Linux 系统,它们是 web 服务器。
请登录到各 web 服务器,安装 Apache web (或者Nginx)服务器包。
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: 192.168.8.21 </H1>" > /var/www/html/index.html
对 Web Server 2 做如下操作:
切换到 root 用户
$ sudo su
然后执行如下命令
# echo "<H1>Hello! This is webserver2: 192.168.8.22 </H1>" > /var/www/html/index.html
接下来,配置 /etc /hosts 文件。
sudo vim /etc/hosts
向每个节点添加 HAProxy 条目
192.168.8.23 haproxy
保存更改并退出配置文件
确保能够从每个 web 服务器节点 ping 通 HAProxy 服务器。
注意: 如果 web 服务器上启用了 80 端口,请确保操作系统防火墙允许 80 端口。
(第 4 步) 测试 HAProxy 负载均衡
到目前为止,我们已经成功地配置了 HAProxy 和两个后端 web 服务器。要测试您的配置是否按预期工作,请访问 HAProxy 服务器的 IP 地址。
当您第一次浏览时,您应该看到第一个 web 服务器的网页
在刷新后,您应该看到第二个 web 服务器的网页
这表 HAProxy 服务器通过 Round robin 算法将传入的 web 流量分布在两个 web 服务器上,从而出色地完成了负载平衡工作。
此外,您可以使用 curl 命令使用下面的 do-while 循环测试
$ while true; do curl 192.168.8.23; sleep 1; done
要查看监控统计信息,请访问以下地址
http://192.168.8.23:8080/stats
您将需要进行身份验证,因此请按照步骤 2 中指定的方式提供详细信息。
您将看到下面的页面,其中包含关于 HAProxy 服务器性能的统计数据。