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-version-check-ubuntu

当我们安装 Haproxy 包时,Haproxy 服务自动启动。验证 haproxy 服务状态,执行如下命令

$ sudo systemctl status haproxy

Haproxy-Service-Status-Ubuntu-20-04

(第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

现在进行更改,在文件末尾添加以下 frontendbackend 部分

$ 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

大多数选项都是默认设置的,需要更改的主要内容是 frontendbackend 部分

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 浏览器访问它。

Web1

每次我们刷新浏览器时,我们应该从两个 web 服务器交替访问 web 页面。

web2

我的开源项目

酷瓜云课堂


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

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