在 CentOS 上安装 HAProxy 负载均衡器

文章的翻译是在课程开始前夕准备的 “Linux 管理员。 虚拟化与集群"

在 CentOS 上安装 HAProxy 负载均衡器

负载均衡是一种常见的解决方案,用于跨多个主机水平扩展 Web 应用程序,同时为用户提供对服务的单点访问。 HAProxy的 是最流行的开源负载平衡软件之一,还提供高可用性和代理功能。

HAProxy 致力于优化资源使用、最大化吞吐量、最小化响应时间并避免任何单个资源过载。 它可以安装在各种Linux发行版上,例如我们将在本指南中重点介绍的CentOS 8以及系统 Debian 8的 и Ubuntu的16.

在 CentOS 上安装 HAProxy 负载均衡器

HAProxy 特别适合流量非常高的网站,因此经常用于提高多服务器 Web 服务配置的可靠性和性能。 本指南概述了在 CentOS 8 云主机上将 HAProxy 设置为负载均衡器的步骤,然后将流量路由到您的 Web 服务器。

作为获得最佳结果的先决条件,您应该至少拥有两台 Web 服务器和一台负载平衡服务器。 Web 服务器必须至少运行基本的 Web 服务,例如 nginx 或 httpd,才能测试它们之间的负载平衡。

在 CentOS 8 上安装 HAProxy

由于 HAProxy 是一个快速发展的开源应用程序,因此标准 CentOS 存储库中提供的发行版可能不是最新版本。 要了解当前版本,请运行以下命令:

sudo yum info haproxy

HAProxy 始终提供三个稳定版本可供选择:两个最新支持的版本和第三个仍在接收关键更新的旧版本。 您可以随时查看 HAProxy 网站上列出的最新稳定版本,然后决定要使用哪个版本。

在本指南中,我们将安装最新的稳定版本 2.0,在编写本指南时标准存储库中尚未提供该版本。 您需要从原始来源安装它。 但首先,检查您是否满足下载和编译程序的必要条件。

sudo yum install gcc pcre-devel tar make -y

使用以下命令下载源代码。 您可以检查是否有更新的版本可用 HAProxy 下载页面.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

下载完成后,使用以下命令提取文件:

tar xzvf ~/haproxy.tar.gz -C ~/

进入解压后的源码目录:

cd ~/haproxy-2.0.7

然后为您的系统编译程序:

make TARGET=linux-glibc

最后,安装 HAProxy 本身:

sudo make install

HAProxy 现已安装,但需要一些额外的操作才能使其工作。 让我们继续设置下面的软件和服务。

为您的服务器设置 HAProxy

现在为 HAProxy 条目添加以下目录和统计文件:

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

为二进制文件创建符号链接,以便您可以作为普通用户运行 HAProxy 命令:

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

如果要将代理作为服务添加到系统,请将示例中的 haproxy.init 文件复制到 /etc/init.d 目录。 编辑文件权限以便脚本运行,然后重新启动 systemd 守护进程:

sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload

您还需要允许该服务在系统启动时自动重新启动:

sudo chkconfig haproxy on

为了方便起见,还建议添加一个新用户来运行HAProxy:

sudo useradd -r haproxy

之后,您可以使用以下命令再次检查安装的版本号:

haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/

在我们的例子中,版本应该是 2.0.7,如上面的示例输出所示。

最后,CentOS 8 中的默认防火墙对该项目的限制相当大。 使用以下命令允许所需的服务并重置防火墙:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

负载均衡器设置

设置 HAProxy 是一个相当简单的过程。 本质上,您需要做的就是告诉 HAProxy 它应该监听哪些连接以及应该将它们中继到哪里。

这是通过创建一个包含定义设置的配置文件 /etc/haproxy/haproxy.cfg 来完成的。 您可以阅读有关 HAProxy 配置选项的信息 在文档页面上如果你想了解更多。

传输层(第4层)负载均衡

让我们从基本设置开始。 创建一个新的配置文件,例如使用 vi 使用以下命令:

sudo vi /etc/haproxy/haproxy.cfg

将以下部分添加到文件中。 代替 服务器名称 统计页面上应该调用您的服务器的内容,以及 私有IP — 您想要将 Web 流量定向到的服务器的私有 IP 地址。 您可以检查私有IP地址 在UpCloud控制面板上 并在选项卡上 专用网络 在菜单中 商业网络.

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

这定义了一个外部名为 http_front 的传输层负载均衡器(第 4 层),侦听端口 80,然后将流量转发到名为 http_back 的默认后端。 附加统计 /haproxy?stats 将统计页面连接到指定地址。

各种负载均衡算法。

在后端部分指定服务器允许 HAProxy 在可能的情况下根据循环算法使用这些服务器进行负载平衡。

平衡算法用于确定每个连接传递到后端的哪个服务器。 以下是一些有用的选项:

  • 循环赛: 每个服务器根据其权重轮流使用。 当服务器的处理时间保持均匀分布时,这是最平滑、最公平的算法。 该算法是动态的,允许动态调整服务器的权重。
  • 最少连接: 选择连接数最少的服务器。 具有相同负载的服务器之间执行循环。 建议对 LDAP、SQL、TSE 等长会话使用此算法,但不太适合 HTTP 等短会话。
  • 第一: 第一个具有可用连接槽的服务器接收连接。 从最低数字 ID 到最高数字 ID 选择服务器,默认为服务器在场中的位置。 一旦服务器达到 maxconn,就会使用下一个服务器。
  • Sumber: 源 IP 地址经过哈希处理并除以正在运行的服务器的总权重,以确定哪台服务器将接收请求。 这样,相同的客户端 IP 地址将始终访问同一服务器,而服务器保持不变。

在应用程序级别(第 7 层)设置负载平衡

另一个可用的选项是将负载均衡器配置为在应用程序层(第 7 层)运行,这在 Web 应用程序的某些部分位于不同主机上时非常有用。 这可以通过限制连接的传输(例如通过 URL)来实现。

使用文本编辑器打开 HAProxy 配置文件:

sudo vi /etc/haproxy/haproxy.cfg

然后按照以下示例配置前端和后端段:

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   acl url_blog path_beg /blog
   use_backend blog_back if url_blog
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

backend blog_back
   server server_name3 private_ip3:80 check

前端声明了一个名为 url_blog 的 ACL 规则,该规则适用于路径以 /blog 开头的所有连接。 use_backend 指定匹配 url_blog 条件的连接应由名为 blog_back 的后端提供服务,所有其他请求均由默认后端处理。

在后端,配置设置了两组服务器:http_back(与之前一样)和一组名为 blog_back 的新服务器,用于处理与 example.com/blog 的连接。

更改设置后,保存文件并使用以下命令重新启动 HAProxy:

sudo systemctl restart haproxy

如果您在启动过程中收到任何警告或错误消息,请检查您的配置并确保已创建所有必需的文件和文件夹,然后尝试再次重新启动。

测试设置

HAProxy 配置并运行后,在浏览器中打开负载均衡器服务器的公共 IP 地址并检查是否正确连接到后端。 配置中的 stats uri 参数在指定地址创建统计页面。

http://load_balancer_public_ip/haproxy?stats

当您加载统计页面时,如果您的所有服务器都显示绿色,则设置成功!

在 CentOS 上安装 HAProxy 负载均衡器

统计页面包含一些用于跟踪网络主机的有用信息,包括启动/停机时间和会话数量。 如果服务器标记为红色,请确保服务器已打开并且可以从负载平衡器计算机对其执行 ping 操作。

如果您的负载均衡器没有响应,请确保 HTTP 连接没有被防火墙阻止。 还要确保 HAProxy 正在使用以下命令运行:

sudo systemctl status haproxy

使用密码保护统计页面

但是,如果统计页面只是简单地列在前端,那么就公开给大家看,这可能不是一个好主意。 相反,您可以通过将以下示例添加到 haproxy.cfg 文件的末尾来为其分配自定义端口号。 代替 用户名 и 密码 为了安全:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

添加新的侦听器组后,从前端组中删除旧的 stats uri 链接。 完成后,保存文件并重新启动 HAProxy。

sudo systemctl restart haproxy

然后使用新的端口号再次打开负载均衡器,并使用您在配置文件中指定的用户名和密码登录。

http://load_balancer_public_ip:8181

确保所有服务器仍显示绿色,然后在浏览器中仅打开负载均衡器 IP,而不打开任何端口号。

http://load_balancer_public_ip/

如果您的后端服务器上至少有某种类型的登录页面,您会注意到每次重新加载页面时都会收到来自不同主机的响应。 您可以在配置部分尝试不同的平衡算法或查看 完整的文档.

结论:HAProxy 负载均衡器

恭喜您成功设置 HAProxy 负载均衡器! 即使使用基本的负载平衡设置,您也可以显着提高 Web 应用程序的性能和可用性。 本指南只是对 HAProxy 负载均衡的介绍,它的功能远比快速设置指南中涵盖的内容要多。 我们建议使用不同的配置进行试验 广泛的文档,可供 HAProxy 使用,然后开始为您的生产环境规划负载平衡。

通过使用多个主机来保护您的 Web 服务并留出空间,负载均衡器本身仍然可能会出现故障点。 您可以通过在多个负载均衡器之间安装浮动 IP 来进一步提高高可用性。 您可以在我们的网站中找到更多相关信息 关于UpCloud上的浮动IP地址的文章.

更多关于课程 “Linux 管理员。 虚拟化与集群"***

来源: habr.com

添加评论