什么是 HAProxy ?

HaProxy (High Availability Proxy) 是一个开源免费的 HTTP 负载均衡器和反向代理解决方案,广泛用于为 web 应用程序,用于提供高可用性,并保证最大可能的在线时间。.

它是一个高性能的应用程序,通过跨多个节点分配流量来为您的 web 应用注入性能改进。通过这种方式,它可以确保 web 服务器不会因为传入的 HTTP 请求而超载,因为工作负载被公平地分布在几个节点上。

虽然是免费的,但企业版提供了额外的功能,如 WAF (Web Application Firewall )、应用程序加速、高级 DDoS 保护、高级健康检查等等。

实验准备

要实际演示 HAProxy,您至少需要三个 Linux 系统。其中一个将充当 HAProxy 负载均衡器,而其余的将充当 web 服务器。

Haproxy-Lab-Setup-Ubuntu

(第 1 步) 安装 HAProxy 负载均衡器

第一步是在 Ubuntu 上安装 HAProxy,Ubuntu 软件库默认提供 HAProxy,但它不是最新的。

要查看默认软件库中的可用 Haproxy 软件包版本,请运行

$ sudo apt update
$ sudo apt show haproxy

default-haproxy-version-ubuntu-22-04

但是最新的长期支持版本是 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

Haproxy-version-ubuntu-22-04

安装后,HAProxy 服务默认启动,监听 TCP 端口 80。如果需要验证 HAProxy 是否正在运行,请执行命令

$ sudo systemctl status haproxy

Haproxy-Status-Ubuntu-Linux

建议将服务随系统自动启动,请执行命令

$ 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 指令为登录用户指定用户名和密码,以便在浏览器上查看统计信息。

HAproxy-Config-File-Ubuntu

保存更改并退出配置文件,重新加载设置需要重启 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 服务器。

Haproxy-Connectivity-from-web1

Haproxy-Connectivity-from-web2

注意: 如果 web 服务器上启用了 80 端口,请确保操作系统防火墙允许 80 端口。

(第 4 步) 测试 HAProxy 负载均衡

到目前为止,我们已经成功地配置了 HAProxy 和两个后端 web 服务器。要测试您的配置是否按预期工作,请访问 HAProxy 服务器的 IP 地址。

http://10.128.0.25

当您第一次浏览时,您应该看到第一个 web 服务器的网页

Access-WebPage1-Over-Haproxy

在刷新后,您应该看到第二个 web 服务器的网页

Access-WebPage2-Over-Haproxy

这表明 HAProxy 服务器通过 Round robin 算法将传入的 web 流量分布在两个 web 服务器上,从而出色地完成了负载平衡工作。

此外,您可以使用 curl 命令使用下面的 do-while 循环测试

$ while true; do curl 10.128.0.25; sleep 1; done

While-Loop-Access-Webpage-over-Haproxy

要查看监控统计信息,请访问以下地址

http://10.128.0.25:8080/stats

您将需要进行身份验证,因此请按照步骤 2 中指定的方式提供详细信息。

HAproxy-GUI-Login-Page

您将看到下面的页面,其中包含关于 HAProxy 服务器性能的统计数据。

Haproxy-Stats-Ubuntu-Linux

我的开源项目


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

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