怎样在 Ubuntu 20.04 上安装 HAProxy

介绍

HAProxy 代表 H一种可用性 代理. 它是一种开源负载均衡器,可用于将 HTTP 流量分配到多个后端应用程序、网站或数据库,以创建高度可用的系统。 它是最快、最卓越的负载均衡器,可在任何环境中提供巨大的可扩展性,使其成为 Twitter、GitHub 和 Amazon Web Service 等知名网站的首选。

在这个互联网连接世界的时代,您的应用程序可能正在为全球数百万用户提供服务(例如,社交媒体应用程序)。 在这样一个关键任务系统中,任何停机时间都可能导致经济损失和不愉快的客户体验。 为了确保您的应用程序即使在其某些组件出现故障时也能正常工作,您应该为您的计算基础设施创建多个实例,并放置一个面向客户的负载平衡器来将流量路由到集群环境。

HAProxy 允许您的系统容忍中断而不会给用户带来停机时间。 要使用该技术,您应该设计您的系统 冗余 心里。 也就是说,您应该运行很可能出现故障或需要定期维护的计算机组件的多个实例。 此外,HAProxy 故障转移机制 使用不同的性能指标来 监视器 冗余服务器的可用性和健康状况作为一个组工作,仅将流量切换到活动组件。 因此,HAProxy 满足高可用的所有基本要素。 那是 冗余, 故障转移, 和 监控.

在本指南中,您将在 Ubuntu 20.04 服务器上安装和配置 HAProxy 负载均衡器,以将 Web 流量分配到两个不同的服务器。

先决条件

要学习本 HAProxy 教程,您需要以下内容:

一套 3 配置有专用网络的 Ubuntu 20.04 服务器。 请参阅有关如何创建专用网络的指南,为您的 Vultr 服务器设置专用网络。 您的服务器应位于同一位置。

一个 sudo 用户。

本指南为服务器使用以下公共/私有 IP 地址和主机名。 确保相应地更改值。

主机名 公共 IP 地址 私有 IP 地址
主服务器192.0.2.1010.0.0.10
服务器-1192.0.2.1110.0.0.11
服务器 2192.0.2.1210.0.0.12

确保 Apache 网络服务器仅安装在 服务器-1服务器 2. 不要安装 Apache 主服务器 因为会有端口冲突。 这是因为 Apache 侦听同一个端口(80) 作为 HAProxy。

1.在主服务器上安装HAProxy服务器

在此步骤中,您将从官方 Ubuntu 软件存储库中提取 HAProxy 包。 通过 SSH 连接到您的服务器并通过运行以下命令更新包信息索引。

$ sudo apt update

接下来,发出以下命令来安装 haproxy 包裹。

$ sudo apt install -y haproxy

检查 HaProxy 服务器的状态。

$ sudo systemctl status haproxy

通过确认以下输出来确保 HaProxy 服务正在运行。

...
Active: active (running) 
...

要检查您的 HaProxy 版本,请运行以下命令。

$ haproxy -v

确保您获得如下所示的版本号。

HA-Proxy version 2.0.13-2ubuntu0.2 2021/08/16 - https://haproxy.org/

安装 HAProxy 软件包后,接下来将对其进行配置以将流量分配到其余服务器。

2.配置HAProxy服务器

HAProxy 在以下位置维护一个配置文件。

/etc/haproxy/haproxy.cfg

一、使用Linux备份文件 cp 命令以确保您在犯任何错误时可以恢复到默认设置。

$ sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bk

接下来,使用 nano 文本编辑器打开文件进行编辑。

$ sudo nano /etc/haproxy/haproxy.cfg

打开后,HAProxy 配置文件被分成不同的部分,这些部分起着至关重要的作用,如下所述。

全球的: 在顶部,HAProxy 包含系统范围的设置,主要处理安全和性能调整。 现在,不要更改这些值。 这里有一些 全球的 设置。

global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private
        ...

默认值:默认值 保存一些您可能无需进一步自定义即可使用的设置,包括错误报告和超时配置。 设置可能类似于以下输出。 不要触摸这些设置; 您现在将使用默认值运行 HAProxy。

defaults
        log     global
        mode    http
        ...
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        ...
        errorfile 408 /etc/haproxy/errors/408.http

前端后端: 除了 全球的默认值 设置 HAProxy 允许您定义一些 前端后端 设置。 在本指南中,您将 HAProxy 用作两个后端服务器前的反向代理。 因此,您应该定义两个 前端后端 设置如下图。

在前端,指示 HaProxy 绑定到端口 80(bind *:80) 并将流量转发到 后端 您已命名的部分 web_servers. 在后端部分,将 HAProxy 设置为使用 roundrobin 算法循环选择每个后端服务器,没有任何偏好。 您也可以使用 leastconn 算法优先考虑具有最少活动连接的服务器。 接下来,定义要分发流量的服务器的 IP 地址和端口。 记得更换IP地址 10.0.0.1110.0.0.12 用适当的 私有 IP 地址 您指定的后端服务器。 这 check 参数在将任何客户端路由到服务器之前验证服务器的健康状况。

frontend example_front_end
    bind *:80
    option forwardfor  
    default_backend web_servers    

backend web_servers
    balance roundrobin
    server server-1 10.0.0.11:8080 check
    server server-2 10.0.0.12:8080 check

听: (可选)对新的数据定义一些统计设置 部分如下图所示。 这些设置将帮助您在 Web 浏览器上登录 HAProxy 服务器并查看服务器的性能。 代替 ha_proxy_admin 使用适当的用户名。 改变 EXAMPLE_PASSWORD 具有很强的价值。

listen stats
    bind :32600
    stats enable
    stats uri /
    stats hide-version
    stats auth ha_proxy_admin:EXAMPLE_PASSWORD

保存并关闭 /etc/haproxy/haproxy.cfg 当你完成编辑时。 在上述设置中,您已指示 HAProxy 侦听端口 80. 如果您已经安装了 Apache Web 服务器 主服务器,它仍然会监听同一个端口(80),会发生冲突,HaProxy 加载不出来。 因此,如果您拥有它,请使用以下命令停止 Apache 网络服务器。

$ sudo systemctl stop apache2

您现在可以使用以下命令优雅地重新启动 HAProxy 以加载新的配置设置。

$ sudo systemctl restart haproxy

HAProxy 服务器现在已准备好侦听 HTTP 流量并将其路由到适当的后端服务器。 在下一步中,您将在后端服务器上配置 Apache Web 服务器。

3.在后端服务器上配置Apache侦听端口

默认情况下,Apache Web 服务器侦听端口上的 HTTP 流量 80. 在上一节中,您已将 HAProxy 服务器配置为将流量定向到端口 8080 在后端服务器上。 在这一步中,您将在这两台服务器上进行相同的配置。

打开 /etc/apache2/ports.conf 两个文件 server-1server-2 在不同的终端上使用 nano 文本编辑器。

$ sudo nano /etc/apache2/ports.conf

找到以下 Listen 指示。

Listen 80

然后,将端口从 808080 如下图在两个后端服务器上。

Listen 8080

尽管如此,在两个后端服务器上,打开下面的虚拟主机文件。

$ sudo nano /etc/apache2/sites-available/000-default.conf

找到下面的行。

<VirtualHost *:80> 
...

更改值 *:80*:8080

<VirtualHost *:8080> 
...

在两台服务器上重新启动 Apache 以加载新更改。

$ sudo systemctl restart apache2

Apache 网络服务器现在应该监听端口上的传入流量 8080 一旦它被 HAProxy 服务器转发,就会在两个后端服务器上。 在下一步中,您将在后端服务器上创建一些 Web 内容。

4. 在后端服务器上创建 Web 内容

客户端将向您安装了 HAProxy 的主服务器发送 HTTP 请求。 然后,HaProxy 将以平衡的方式将流量路由到后端服务器。 因此,您应该在公共根目录上创建一些 Web 内容 服务器-1服务器 2.

一、删除默认 /var/www/html/index.html 两个后端服务器上的文件。

服务器-1

$ sudo rm  /var/www/html/index.html 

服务器 2

$ sudo rm  /var/www/html/index.html 

接下来,打开一个新的 HTML 文件 服务器-1.

$ sudo nano  /var/www/html/index.html

然后,将下面的内容输入到 /var/www/html/index.html服务器-1.

<html>
  <head>
    <title>Backend Server 1</title>
  </head>
  <body>
    <h1>Server 1 is working.</h1>
  </body>
</html>

保存并关闭文件。 接下来,新建一个 /var/www/html/index.html服务器 2.

$ sudo nano  /var/www/html/index.html

然后将下面的信息输入到 /var/www/html/index.html 归档 服务器 2.

<html>
  <head>
    <title>Backend Server 2</title>
  </head>
  <body>
    <h1>Server 2 is working.</h1>
  </body>
</html>

保存并关闭文件。 您现在已经在后端服务器中创建了不同的 Web 内容。 在下一步中,您将测试 HAProxy 是否可以将流量路由和分发到您的后端服务器。

5. 测试HAProxy负载均衡算法

在您的网络浏览器中,输入公共 IP 地址或域名 主服务器 您安装 HAProxy 的位置。

http://192.0.2.10

当您第一次访问该页面时,您应该会收到以下响应,表明您已连接到后端 服务器-1.

刷新页面,这一次,你应该查看后端的内容 服务器 2.

服务器 2

要查看有关您的前端和后端服务器的一般统计信息,请访问 HaProxy 端口上的服务器公共 IP 地址 32600.

http://192.0.2.10:32600

输入您在 HAProxy 配置文件的 stats 部分定义的登录详细信息。 例如 username:ha_proxy_admin, password:EXAMPLE_PASSWORD 登录。

...
listen stats
    ...      
    stats auth ha_proxy_admin:EXAMPLE_PASSWORD
...

您应该会看到一个包含大量 HAProxy 信息的仪表板。

HaProxy 仪表板

您的 HAProxy 服务器按预期工作,实际上,您正在按预期将负载从主服务器重新分配到后端服务器。 在本指南中,您创建了两个具有不同内容的不同网页来证明负载分配概念。 在生产环境中,冗余服务器上的内容应该相似,或者如果您从数据库中获取数据,后端服务器应该显示相同的数据。 例如,后端应连接到 MySQL 组复制数据库。 这有助于您的应用在某些后端服务器出现故障时容忍停机时间。

结论

在本教程中,您已经在 Ubuntu 20.04 上安装了 HAProxy 并成功地将 HTTP 流量分发到两个不同的后端服务器。 您可以扩展本指南中的逻辑,甚至根据您的应用程序负载设置更多冗余服务器。 HAProxy 允许您在集群环境中分配流量,以避免在数千个客户端连接到您的应用程序时使单个服务器不堪重负。

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com