更新升级 专属应用 系统故障 硬件故障 电脑汽车 鸿蒙刷机 鸿蒙开发Linux教程 鸿蒙开发Linux命令
当前位置:HMXT之家 > 鸿蒙开发Linux教程 > 在Rocky Linux 9系统上安装和配置HAProxy的详细步骤

在Rocky Linux 9系统上安装和配置HAProxy的详细步骤

更新时间:2023-01-25 11:06:59浏览次数:282+次

本文介绍如何在Rocky Linux 9系统上安装和配置HAProxy,将附上详细操作步骤。

设置要求

要使本文获得成功,您需要满足以下要求:

至少3台服务器(一台运行HAProxy,两台运行应用程序)。

内存2GB及以上。

存储容量20GB及以上。

在我的环境中,3台服务器的配置如下:

HAProxy主机名 master.computingforgeeks.com,地址192.168.205.12。

Backend01主机名node1.computingforgeeks.com,地址192.168.205.2。

Backend02主机名 node2.computingforgeeks.com,地址192.168.205.13。

设置主机名,如下所示:

##HAProxy

sudo hostnamectl set-hostname master.computingforgeeks.com

##Backend Node 01

sudo hostnamectl set-hostname node1.computingforgeeks.com

##Backend Node 02

sudo hostnamectl set-hostname node2.computingforgeeks.com

将主机名添加到每台服务器上的/etc/hosts文件中:

$ sudo vim /etc/hosts

192.168.205.12  master.computingforgeeks.com master

192.168.205.2    node1.computingforgeeks.com node1

192.168.205.13  node2.computingforgeeks.com node2

安装和配置HAProxy的详细步骤

步骤1、在Rocky Linux 9上安装HAProxy

设置环境后,在主节点上安装HAProxy。由于HAProxy是在默认的Rocky Linux 9存储库中提供的,您可以通过执行以下命令来安装它:

sudo dnf install haproxy

注:安装的时候,所安装的版本为haproxy x86_64 2.4.7-2.el9_0。

步骤2、在Rocky Linux 9上配置HAProxy

安装完成后,需要对/etc/haproxy/haproxy.cfg文件进行一些配置。这些配置包括:

Global section全局部分–保存所有正在运行的服务器的参数。

default settings默认设置–具有适用于所有代理子部分的详细信息。

Frontend settings前端设置–定义客户端连接的侦听套接字。

Backend settings后端设置–定义服务器IP地址和负载平衡器算法。

备份配置文件:

sudo cp /etc/haproxy/haproxy.cfg{,.old}

打开配置文件进行编辑:

sudo vim /etc/haproxy/haproxy.cfg

在文件中,保持全局和默认设置不变,然后继续编辑。

1、前端设置:

这定义了HAProxy服务器如何访问后端服务器。将以下行添加到节中:

frontend main

    bind *:80

    default_backend rockylinux9_apps

    option forwardfor

    option http-server-close

如上所示,我们已经定义了HAProxy服务器IP和端口,以及提供流量的后端服务器。

2、后端设置

现在,在我们的后端设置中,我们需要定义要应用的后端服务器和负载平衡算法:

backend rockylinux9_apps

    balance roundrobin

    server node1  node1.computingforgeeks.com:80 check

    server node2  node2.computingforgeeks.com:80 check

我们将在两个节点上实现循环算法,并启用健康检查。

3、统计设置(可选)

这使HARoxy能够提供有关使用情况的统计信息。这包括运行状况、请求率和响应时间:

listen stats

    bind  192.168.205.12:8088       # Bind stats to port 8088

    log   global                    # Enable Logging

    stats enable                    # enable statistics reports 

    stats hide-version              # Hide the version of HAProxy

    stats refresh 30s               # HAProxy refresh time

    stats show-node                 # Shows the hostname of the node

    stats auth admin:Passw0rd     # Authentication for Stats page

    stats uri /stats             # Statistics URL

保存配置文件并允许端口通过防火墙:

sudo firewall-cmd --add-port=8088/tcp --permanent

sudo firewall-cmd --add-port=80/tcp --permanent

sudo firewall-cmd --reload

将SELinux设置为许可模式:

sudo setenforce 0

sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config

验证配置是否正常:

$ haproxy -c -f /etc/haproxy/haproxy.cfg

Configuration file is valid

我的配置如下所示,没有注释:

$ grep -v "^ *#" /etc/haproxy/haproxy.cfg | grep -v "^$"

global

    log         127.0.0.1 local2

    chroot      /var/lib/haproxy

    pidfile     /var/run/haproxy.pid

    maxconn     4000

    user        haproxy

    group       haproxy

    daemon

    stats socket /var/lib/haproxy/stats

    ssl-default-bind-ciphers PROFILE=SYSTEM

    ssl-default-server-ciphers PROFILE=SYSTEM

defaults

    mode                    http

    log                     global

    option                  httplog

    option                  dontlognull

    option http-server-close

    option forwardfor       except 127.0.0.0/8

    option                  redispatch

    retries                 3

    timeout http-request    10s

    timeout queue           1m

    timeout connect         10s

    timeout client          1m

    timeout server          1m

    timeout http-keep-alive 10s

    timeout check           10s

    maxconn                 3000

frontend main

    bind *:80

    acl url_static       path_beg       -i /static /images /javascript /stylesheets

    acl url_static       path_end       -i .jpg .gif .png .css .js

    default_backend             rockylinux9_apps

    option forwardfor

    option http-server-close

backend rockylinux9_apps

    balance     roundrobin

    server node1  node1.computingforgeeks.com:80 check

    server node2  node2.computingforgeeks.com:80 check

listen stats

    bind  192.168.205.12:8088       # Bind stats to port 8088

    log   global                    # Enable Logging

    stats enable                    # enable statistics reports 

    stats hide-version              # Hide the version of HAProxy

    stats refresh 30s               # HAProxy refresh time

    stats show-node                 # Shows the hostname of the node

    stats auth admin:Passw0rd!     # Authentication for Stats page

    stats uri /stats             # Statistics URL

接下来,在Rocky Linux 9上配置HAProxy日志。

要配置HAProxy日志记录,您需要编辑以下文件:

sudo vim /etc/rsyslog.conf

在文件中,取消注释以下行:

# Provides UDP syslog reception

# for parameters see http://www.rsyslog.com/doc/imudp.html

module(load="imudp") # needs to be done just once

input(type="imudp" port="514")

此外,通过添加以下行禁用私有身份验证消息:

# Don't log private authentication messages!

*.info;mail.none;authpriv.none;cron.none;local2.none                 /var/log/messages

local2.* /var/log/haproxy.log

验证配置文件是否正常:

$ rsyslogd -N1

rsyslogd: version 8.2102.0-101.el9_0.1, config validation run (level 1), master config /etc/rsyslog.conf

rsyslogd: End of config validation run. Bye.

重新启动Rsyslog:

sudo systemctl restart rsyslog

从/var/log/haproxy.log获取日志:

sudo tail -f /var/log/haproxy.log

现在重新启动并启用HAProxy服务:

sudo systemctl restart haproxy

sudo systemctl enable haproxy

验证服务是否正在运行:

$ systemctl status haproxy

步骤3、配置HAProxy后端服务器

后端服务器将配置为运行应用程序。我们需要在后端服务器上安装Apache web服务器:

sudo dnf install httpd -y

安装后,启动并启用服务:

sudo systemctl start httpd

sudo systemctl enable httpd

通过防火墙启用端口80:

sudo firewall-cmd --add-port=80/tcp --permanent

sudo firewall-cmd --reload

现在,在每个服务器上创建一个示例HTML文件。

1、Node1:

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

<h1>Voila! Welcome to Web Server 1</h1>

重新启动服务:

sudo systemctl restart httpd

2、Node2:

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

<h1>Voila! Welcome to Web Server 2</h1>

重新启动服务:

sudo systemctl restart httpd

步骤4、在Rocky Linux 9上测试HAProxy负载平衡器

现在,我们将使用循环算法测试设置是否正常工作。我们应该从两个后端服务器接收连接。

首先使用URL访问页面http://HAProxy-IP_Address或者http://HAProxy-domain-name,如下图:

\

刷新页面,查看是否能够从第二台服务器接收连接:

\

下面,检查HAProxy中的统计信息

可以使用URL查看统计信息,地址是http://HAProxy-domain-name:8088/stats,如下图:

\

使用设置的凭据登录,您将通过下面的仪表板进行身份验证:

\

在这里,您会看到所有HAProxy统计数据。当一个节点关闭时,所有流量都将发送到可用节点。另外,当所有节点都可用时,HAProxy会使用设置的算法自动恢复流量分配。

步骤5、使用TLS/SSL保护HAProxy

HAProxy可以配置为使用SSL/TLS来保护流量不通过未受保护的网络(HTTP)传输。

根据需要生成SSL/TL。

1、Let’s Encrypt

安装所需的工具:

sudo dnf install epel-release

sudo dnf install certbot

为域名生成证书:

sudo certbot certonly --standalone --preferred-challenges http -d example.com

生成后,将证书和私钥合并到一个文件中:

cd /etc/letsencrypt/live/example.com/

cat fullchain.pem privkey.pem | sudo tee haproxy.pem

2、Self-Signed证书

或者,生成Self-signed证书:

sudo yum install openssl

创建配置文件:

vim haproxy_ssl.conf

添加下面的行,适当替换它们:

[req]

default_bits       = 2048

default_keyfile    = haproxy_ssl.key

distinguished_name = req_distinguished_name

req_extensions     = req_ext

x509_extensions    = v3_ca

[req_distinguished_name]

countryName                 = Country Name (2 letter code)

countryName_default         = KE

stateOrProvinceName         = State or Province Name (full name)

stateOrProvinceName_default = Nairobi

localityName                = Locality Name (eg, city)

localityName_default        = Nairobi

organizationName            = Organization Name (eg, company)

organizationName_default    = Computingforgeeks

organizationalUnitName      = organizationalunit

organizationalUnitName_default = Development

commonName                  = Common Name (e.g. server FQDN or YOUR name)

commonName_default          = Your_IP-Address

commonName_max              = 64

[req_ext]

subjectAltName = @alt_names

[v3_ca]

subjectAltName = @alt_names

[alt_names]

DNS.1   = localhost

DNS.2   = Your_IP-Address

生成self-signed证书:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout haproxy_ssl.key -out haproxy_ssl.crt -config haproxy_ssl.conf

生成后,将证书合并到一个文件中,并将证书复制到以下目录:

sudo cat haproxy_ssl.crt haproxy_ssl.key > haproxy.pem

sudo cp  haproxy.pem /etc/ssl/certs/haproxy.pem

现在将证书添加到HAProxy配置文件中:

sudo vim /etc/haproxy/haproxy.cfg

添加HTTPS端口和证书文件:

frontend main

    bind *:80

    bind *:443 ssl crt /etc/letsencrypt/live/example.com/haproxy.pem

对于自签名证书,请将路径替换为/etc/ssl/certs/haproxy.pem。保存文件并重新启动HAProxy:

sudo systemctl restart haproxy

允许端口通过防火墙:

sudo firewall-cmd --add-port=443/tcp --permanent

sudo firewall-cmd --reload

现在使用URL访问HARoxy服务,地址格式是https://HAProxy-domain-name,如下图:

\

至此,配置SSL保护HAProxy完成。

总结

通过以上技术,可以在Rocky Linux 9上成功安装和配置HAProxy。同时,您还能够使用文中的示例为应用程序配置高可用性代理。