HAProxy 是一个免费和开源的高可用性和负载均衡解决方案,它也可以用于代理基于 TCP 和 HTTP 的应用程序。HAProxy 可以在 Linux、Solaris 和 FreeBSD 上安装和配置。HAProxy 是流量大的网站最推荐的解决方案,它通过负载均衡以及其高可用能力,提高服务器的性能和可靠性。
HAProxy 被许多最流行的网站使用,包括 GitHub, Bitbucket, Stack Overflow, Reddit, Tumblr, Twitter,它也被用在亚马逊网络服务的 OpsWorks 产品中。
必备条件
- Minimal Installed Ubuntu 20.04 System
- Local User with sudo rights
- Internet connectivity
(第1步) 安装更新
登录 Ubuntu 20.04 系统,使用下面的 apt 命令安装所有可用的更新
$ sudo apt update
$ sudo apt upgrade -y
安装完所有更新后,重新启动系统。
$ sudo reboot
(第2步) 安装 HAProxy
HAProxy 包在默认包存储库中可用,但它不是最新和稳定的版本。因此,要安装最新版本,请启用 HAProxy PPA,运行以下命令
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:vbernat/haproxy-2.6 -y
现在,运行以下 apt 命令安装 haproxy
$ sudo apt update$ sudo apt install haproxy -y
验证 haproxy 版本,执行以下命令
$ haproxy -v'
当我们安装 Haproxy 包时,Haproxy 服务自动启动。验证 haproxy 服务状态,执行如下命令
$ sudo systemctl status haproxy
(第3步) 配置 HAProxy
现在我们已经准备好了 haproxy。在本指南中,我们将配置 HAProxy 来平衡来自邮件服务器和 web 服务器的请求。
使用 HAProxy 对邮件服务器进行负载平衡
对于本例,我们将使用 IP 地址分别为 192.168.1.10 和 192.168.1.20 的两个 SMTP 服务器。
haproxy 服务器的 IP 地址为 192.168.1.100。
我们将修改 Haproxy 配置文件 /etc/haproxy/haproxy.cfg,对两个邮件服务器进行负载平衡配置
在进行更改之前,请使用 cp 命令备份其配置文件
$ sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg-org
现在进行更改,在文件末尾添加以下 frontend 和 backend 部分
$ sudo vi /etc/haproxy/haproxy.cfg
-------------------------------
frontend front_smtp
bind *:25
mode tcp
default_backend back_smtp
backend back_smtp
mode tcp
balance roundrobin
server smtp1 192.168.1.10:25 check
server smtp2 192.168.1.20:25 check
大多数选项都是默认设置的,需要更改的主要内容是 frontend 和 backend 部分
frontend front_smtp
bind *:25
mode tcp
default_backend back_smtp
这里我们为 frontend 定义了一个名称,即 front_smtp,并要求从端口 25 接收所有的请求,带绑定参数,最后我们提到了 backend 区块,名为 back_smtp,所有的请求将被分发到这里。
backend back_smtp
mode tcp
balance roundrobin
server smtp1 192.168.1.10:25 check
server smtp2 192.168.1.20:25 check
在本区块中,我们为 backend 定义了一个名称 (back smtp) 和传输模式,并使用轮询 (roundrobin) 算法。其他可用的负载均衡方法有: 加权轮询 (weighted round robin)、动态轮询算法 (dynamic round robin)、最小连接算法 (least connection)。最后,我们提到了两个 SMTP 服务器的服务器地址。
更改完成后,保存文件并重新启动 haproxy 服务
$ sudo systemctl restart haproxy
我们的 Haproxy 服务器现在可以作为邮件服务器的负载均衡器工作了。现在,我们不需要使用 SMTP 服务器地址,而是需要使用 HAPROXY 的服务器地址,例如 192.168.1.100:25,以便 HAPROXY 负载平衡工作。
要查看我们的 SMTP 服务器的负载平衡是否正常工作,我们可以使用 telnet
telnet 命令的输出应该如下所示
$ telnet 192.168.1.100 25
Trying 192.168.1.100..
Connected to 192.168.1.100.
Escape character is ‘^]’.
220 smtp1.linuxtechi.com ESMTP Postfix
现在再次运行 telnet 命令
$ telnet 192.168.1.100 25
Trying 192.168.1.100..
Connected to 192.168.1.100.
Escape character is ‘^]’.
220 smtp2.linuxtechi.com ESMTP Postfix
请注意两个输出中的邮件服务器服务器的变化,这表明负载平衡工作良好。现在让我们讨论一个 web 服务器负载平衡的 harpoxy 示例。
用 HAProxy 实现 Web 服务器的负载平衡
Same file will be edited ‘/etc/haproxy/haproxy.cfg’. We will be using two web servers (192.168.1.10 & 192.168.1.20) on backend. IP address for the haproxy server is 192.168.1.100.
同样编辑文件 /etc/haproxy/haproxy.cfg,我们将在后端使用两个 Web 服务器(192.168.1.10,192.168.1.20)。Haproxy 服务器的 IP 地址为 192.168.1.100。
打开 haproxy 主配置文件,并在文件末尾追加以下更改
$ sudo vi /etc/haproxy/haproxy.cfg
------------
frontend www-http
bind *:80
mode http
default_backend apache
backend apache
mode http
balance roundrobin
server web1 192.168.1.10
server web2 192.168.1.20
保存文件并重新启动 haproxy 服务
$ sudo systemctl restart haproxy
为了测试负载平衡是否有效,我们可以在两台服务器上放置两个不同的网页。
Webserver 1 修改 index.html
[linuxtechi@web1 ~]$ sudo vi /var/www/html/index.html
This is WEB SERVER 1
Webserver 2 修改 index.html
[linuxtechi@web2 ~]$ sudo vi /var/www/html/index.html
This is WEB SERVER 2
不要忘记重新启动 web 服务来实现所做的更改。
现在,使用 haproxy IP 地址 192.168.1.100 并使用 web 浏览器访问它。
每次我们刷新浏览器时,我们应该从两个 web 服务器交替访问 web 页面。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。