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
[[email protected] ~]$ sudo vi /var/www/html/index.html
This is WEB SERVER 1
Webserver 2 批改 index.html
[[email protected] ~]$ sudo vi /var/www/html/index.html
This is WEB SERVER 2
不要遗记重新启动 web 服务来实现所做的更改。
当初,应用 haproxy IP 地址 192.168.1.100 并应用 web 浏览器拜访它。
每次咱们刷新浏览器时,咱们应该从两个 web 服务器交替拜访 web 页面。
我的开源我的项目
- course-tencent-cloud(酷瓜云课堂 – gitee 仓库)
- course-tencent-cloud(酷瓜云课堂 – github 仓库)