网站搜索

如何在 CentOS 8 上设置 HAProxy 作为 Nginx 的负载均衡器


为了确保最大程度的 Web 应用程序可用性、可扩展性和高性能,现在通常会实施引入冗余的技术,例如服务器集群和负载平衡。例如,设置一个全部运行相同应用程序的服务器集群,然后在它们前面部署负载均衡器以分配流量。

HAProxy 是一款开源、功能强大、高性能、可靠、安全且广泛使用的高可用性 TCP/HTTP 负载均衡器、代理服务器和 SSL/TLS 终结器,专为流量非常高的网站。它可以在 LinuxSolarisFreeBSDOpenBSD 以及 AIX 操作系统上可靠地运行。

本指南介绍如何在 CentOS 8 上使用 HAProxy 设置专用的高可用性负载均衡器,以控制 NGINX Web 服务器集群中的流量。它还演示了如何在 HAProxy 中配置 SSL/TLS 终止。

先决条件:

总共 4 台服务器,最低限度安装了 CentOS 8。

测试环境设置

----------- HAProxy Server Setup ----------- 
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan


----------- Client Web Servers Setup ----------- 
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34

第 1 步:在客户端计算机上设置 Nginx HTTP 服务器

1. 登录所有 CentOS 8 客户端计算机,并使用 dnf 包管理器安装 Nginx Web 服务器,如图所示。

dnf install Nginx

2. 接下来,启动 Nginx 服务,目前,使其能够在系统启动时自动启动,并使用 systemctl 检查其状态来确认其已启动并运行命令(在所有客户端计算机上执行此操作)。

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3.此外,如果所有客户端计算机上都运行着firewalld服务(您可以通过运行systemctl start firewalld来检查),则必须添加HTTP防火墙配置中的 HTTPS 服务允许来自负载均衡器的请求通过防火墙到达 Nginx Web 服务器。然后重新加载 firewalld 服务以实现新的更改(在所有客户端计算机上执行此操作)。

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

4. 接下来,在本地计算机上打开 Web 浏览器并测试 Nginx 安装是否正常工作。使用客户端IP进行导航,一旦看到Nginx测试页面,则表示客户端机器上安装的Web服务器工作正常。

5. 接下来,我们需要在客户端计算机上创建测试页面,稍后我们将使用该页面来测试 HAProxy 设置。

----------- Web Server #1 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #2 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #3 ----------- 
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html

步骤2:在CentOS 8上安装和配置HAProxy服务器

6. 现在,通过运行以下命令在 HAProxy 服务器上安装 HAProxy 软件包。

dnf install haproxy

7. 接下来,启动HAProxy服务,使其能够在系统启动时自动启动并验证其状态。

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

8. 现在我们将使用以下配置文件配置 HAProxy。

vi /etc/haproxy/haproxy.cfg

配置文件分为四个主要部分。

  • 全局设置 – 设置流程范围的参数。
  • defaults – 此部分为其声明后的所有其他部分设置默认参数。
  • 前端 – 这部分描述了一组接受客户端连接的监听套接字。
  • 后端 – 本节描述代理将连接到转发传入连接的一组服务器。

要了解全局设置默认下的选项,请阅读 HAProxy 文档(文章末尾提供的链接)。对于本指南,我们将使用默认值。

设置 HAProxy 日志记录

9. HAProxy一旦部署,将在您的IT基础设施中发挥重要作用,因此为其配置日志记录是一项基本要求;这使您可以深入了解与后端 Web 服务器的每个连接。

日志参数(在下面的屏幕截图中突出显示)声明一个将接收日志消息的全局Syslog服务器(例如 CentOS 中的默认值 rsyslog)。此处可以声明多个服务器。

默认配置指向 localhost (127.0.0.1),local2 是用于识别 下的 HAProxy 日志消息的默认设施代码rsyslog。

10.接下来,您需要告诉rsyslog服务器如何接收和处理HAProxy日志消息。打开rsyslog配置文件/etc/rsyslog.conf或在/etc/rsyslog.d目录中创建一个新文件,例如/etc/rsyslog .d/haproxy.conf。

vi /etc/rsyslog.d/haproxy.conf

复制并粘贴以下配置,以在默认端口 514 上使用 UDP 收集日志。

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

还要添加这些行来指示 rsyslog 根据严重性写入两个单独的日志文件,其中 local2 是上面 HAProxy 配置中定义的设施代码。

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

11.保存文件并关闭它。然后重新启动rsyslog服务以应用最近的更改。

systemctl restart rsyslog

配置 HAProxy 前端和后端

12.在本节中,我们将演示如何配置前端和后端代理。返回到HAProxy配置文件并修改默认的前端和后端部分,如下所示。我们不会详细解释每个参数,您可以随时参考官方文档。

以下配置定义了一个listen部分,用于提供HAProxy Stats页面。 bind 参数将侦听器分配给给定的 IP 地址(在本例中为所有的 *)和端口9000 >)。

stats enable 设置启用将使用 URI /stats(即 http://server_ip:9000/stats)访问的统计页面。

stats auth 设置用于在访问页面时添加基本身份验证(将 haproxyLostp@1ss 替换为您的用户名和密码)选择)。

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:Lostp@1ss

13. 下一个配置定义了一个名为 TL 的前端部分(您可以提供您喜欢的名称)。 mode 参数定义 HAProxy 运行的模式。

acl(访问控制列表)参数用于根据从请求中提取的内容做出决定。在此示例中,如果请求不是通过 SSL 发出的,则该请求将被视为纯 HTTP

然后使用 http-request set-header 设置向请求添加 HTTP 标头。这有助于通知 Nginx 初始请求是通过 HTTP (或通过端口 80)发出的。

default_backenduse_backend 指令定义后端服务器,在本例中由 TL_web_servers 引用。

请注意,如果请求不是由 use_backenddefault_backend 路由,HAProxy 将返回“503 Service Unavailable error” > 指令。

frontend TL
    bind *:80
    mode http
    acl http  ssl_fc,not
    http-request set-header X-Forwarded-Protocol http if http
    default_backend TL_web_servers

14.然后我们需要定义一个后端部分,其中balance设置定义HAProxy如何选择后端服务器来处理请求(如果没有)持久性方法会覆盖该选择。

cookie 指令启用基于 cookie 的持久性,它指示 HAProxy 将名为 SERVERID 的 cookie 发送到客户端,并将其与发出初始响应的服务器的ID相关联。

server 指令用于以 sever_name 格式定义上游服务器(例如 websrv1)、server_IP:port选项

一个关键选项是检查,它告诉HAProxy继续检查服务器的可用性并在统计页面上报告。

backend TL_web_servers
    mode http
    balance roundrobin
    option  httpchk HEAD /
    cookie SERVERUID insert indirect nocache
    server  websrv1 10.42.0.200:80 cookie websrv1 check
    server  websrv2 10.42.0.21:80  cookie websrv2 check
    server  websrv3 10.42.0.34:80  cookie websrv3 check

注释掉任何其他前端和后端部分,如下面的屏幕截图所示。保存文件并关闭它。

15. 现在重新启动 HAProxy 服务以应用新的更改。

systemctl restart haproxy

16.接下来,确保HTTP(端口80)和HTTPS(端口433)在防火墙中打开服务来接受客户端请求,如下所示。另外,在防火墙中打开端口 9000 以访问统计页面并重新加载防火墙设置。

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent –add-service=https
firewall-cmd --zone=public --permanent --add-port=9000/tcp
firewall-cmd --reload

第 3 步:测试 HAProxy 设置并查看统计信息

17. 现在是时候测试 HAPrxoy 设置了。在您访问所有服务器的本地桌面计算机上,在 /etc/hosts 文件中添加以下行,以使我们能够使用虚拟站点域。

10.42.0.247  www.tecmint.lan

18. 然后打开浏览器并使用服务器地址或站点域进行导航。

http://10.42.0.247/
OR
http://www.tecmint.lan/

19. 要访问HAProxy统计页面,请使用以下地址。

http://10.42.0.247:9000/stats

然后使用您在 HAProxy 配置文件中定义的用户名和密码(请参阅 stats auth 参数)。

成功登录后,您将进入 HAProxy 统计信息页面,其中显示了涵盖服务器运行状况、当前请求率、响应时间等的指标。

为了演示有关颜色代码的状态报告如何工作,我们放置了一台后端服务器。

步骤 4:使用自签名 SSL 证书在 HAProxy 中配置 HTTPS

20. 在最后一部分中,我们将演示如何配置 SSL/TLS 以保护 HAProxy 服务器和客户端之间的所有通信。 HAProxy 支持四种主要的 HTTPS 配置模式,但在本指南中,我们将使用 SSL/TLS 卸载。

SSL/TLS卸载模式下,HAProxy解密客户端的流量并以清晰的流量连接到后端服务器。

我们将首先创建如图所示的证书密钥(根据证书创建过程中您公司的详细信息回答相应的问题,如屏幕截图中突出显示的那样)。

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
cd /etc/ssl/tecmint.lan/
cat tecmint.crt tecmint.key >tecmint.pem
ls -l

21. 接下来,打开 HAProxy 配置文件 (/etc/haproxy/haproxy.cfg) 并编辑前端部分。

frontend TL
    bind *:80
    bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
    redirect  scheme  https  if  !{ ssl_fc }
    mode http
    acl http  ssl_fc,not
    acl https ssl_fc
    http-request set-header X-Forwarded-Protocol http if http
    http-request set-header X-Forwarded-Protocol https if https
    default_backend TL_web_servers

保存文件并关闭它。

22. 然后重新启动 HAProxy 服务以应用新的更改。

systemctl restart haproxy.service

23. 接下来,打开网络浏览器并尝试再次访问该网站。由于自签名证书,浏览器将显示错误,单击高级继续。

目前为止就这样了!每个 Web 应用程序都有自己的一组要求,您需要设计和配置负载平衡以满足您的 IT 基础设施和应用程序的要求。

要详细了解本指南中使用的一些配置选项以及如何使用 HAProxy,请参阅官方 HAProxy 社区版文档或 HAProxy 企业版文档。您可以通过下面的反馈表发布任何问题或想法。


版权所有。 © Linux-Console.net • 2019-2024