如何在 Ubuntu 22.04 系统上配置 HAProxy ?

什么是 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)]

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

http://10.128.0.25:8080/stats

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

[图片上传失败...(image-112575-1663905359570)]

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

[图片上传失败...(image-7478e7-1663905359570)]

我的开源项目

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容