更新时间:2023-01-25 11:06:59浏览次数:882+次
本文介绍如何在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。同时,您还能够使用文中的示例为应用程序配置高可用性代理。