在Ubuntu 20.04上安装和设置HAProxy
欢迎来到我们的指南,了解如何在Ubuntu 20.04上安装和设置HAProxy。 HAProxy (High 一个您可能已经知道,安全性代理(Vailability Proxy)是一种免费,非常快速和可靠的解决方案,可为基于TCP和HTTP的应用程序提供高可用性,负载平衡和代理。它特别适合于流量非常高的网站,并为世界上许多访问量最大的网站提供支持。
它具有通过HTTP cookie,负载平衡,标头添加,修改和删除两种方式的连接持久性。它具有请求阻止功能,并提供显示服务器状态的界面。
在Ubuntu 20.04上安装和设置HAProxy
HAProxy在默认的Ubuntu 20.04存储库上可用。但是,可用的软件包可能不是最新的。
apt show haproxy
Package: haproxy
Version: 2.0.13-2
Priority: optional
Section: net
Origin: Ubuntu
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Debian HAProxy Maintainers <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 3,287 kB
Pre-Depends: dpkg (>= 1.17.14)
Depends: libc6 (>= 2.17), libcrypt1 (>= 1:4.1.0), libgcc-s1 (>= 3.0), liblua5.3-0, libpcre2-8-0 (>= 10.22), libssl1.1 (>= 1.1.1), libsystemd0, zlib1g (>= 1:1.1.4), adduser, lsb-base (>= 3.0-6)
Suggests: vim-haproxy, haproxy-doc
Homepage: http://www.haproxy.org/
Download-Size: 1,519 kB
APT-Sources: http://ke.archive.ubuntu.com/ubuntu focal/main amd64 Packages
如您所见,默认存储库上可用的HAProxy软件包的版本为2.0.13,而当前的稳定版本的版本为2.1.5。
为Ubuntu创建HAProxy PPA存储库
但是,有一些PPA存储库可提供由HAProxy维护的最新稳定发行版的HAProxy。 文森特·伯纳特(Vincent Bernat)。这些PPA仓库可以按以下方式安装;
install software-properties-common
add-apt-repository ppa:vbernat/haproxy-2.1 --yes
运行系统更新
将PPA仓库添加到系统后,更新系统软件包缓存;
apt update
在Ubuntu 20.04上安装HAProxy
现在,您可以安装最新的HAProxy稳定版本。
apt-cache policy haproxy
haproxy: Installed: (none) Candidate: 2.1.5-1ppa1~focal Version table: 2.1.5-1ppa1~focal 500 500 http://ppa.launchpad.net/vbernat/haproxy-2.1/ubuntu focal/main amd64 Packages 2.0.13-2 500 500 http://ke.archive.ubuntu.com/ubuntu focal/main amd64 Packages
注意各个存储库提供的版本。
您现在可以安装HAProxy;
apt install haproxy
要检查已安装的HAProxy的版本,请运行以下命令;
haproxy -v
HA-Proxy version 2.1.5-1ppa1~focal 2020/06/01 - https://haproxy.org/ Status: stable branch - will stop receiving fixes around Q1 2021. Known bugs: http://www.haproxy.org/bugs/bugs-2.1.5.html Running on: Linux 5.4.0-33-generic #37-Ubuntu SMP Thu May 21 12:53:59 UTC 2020 x86_64
在Ubuntu 20.04上配置HAProxy负载均衡器
使用HAProxy,您可以定义多个代理服务,并将HAProxy配置为对已定义代理的流量进行负载平衡。代理由前端系统和一个或多个后端系统组成。前端系统定义了代理侦听的IP地址和端口,以及用于特定代理的后端系统。
HAProxy的主要配置文件是 /etc/haproxy/haproxy.cfg
。
HAProxy配置文件由四个部分组成:
global
:全局部分定义了在较低范围内影响HAProxy的流程范围的安全性和性能调整。defaults
:全局部分定义了适用于所有frontend
和backend
部分。您可以定义多个默认节,但后续的默认节将覆盖之前的默认节。frontend
:将HAProxy放置为反向代理时,frontend
部分定义了客户端可以连接的IP地址和端口。backend
:后端部分定义了将进行负载平衡并分配为处理请求的服务器组。
的 frontend
和 backend
可以使用 listen
部分。它也可以用于服务器 HAProxy统计信息页面。
阅读有关这些部分的更多信息 HAProxy配置的基本部分。
默认的HAProxy文件配置如下所示;
grep -v '^s*#' /etc/haproxy/haproxy.cfg
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 ca-base /etc/ssl/certs crt-base /etc/ssl/private ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http
在我们的配置文件中,我们将修改以上内容以包括 frontend
和 backend
部分。
在继续之前,请备份默认配置文件;
cp /etc/haproxy/haproxy.cfg{,.factory}
定义HAProxy前端配置设置
如上所述, frontend
部分定义了客户端可以连接的IP地址和端口(HAProxy服务器本身的IP地址和端口)。因此,这就是前端配置的样子;
frontend bind 192.168.57.8:443 ssl crt /etc/ssl/certs/haproxy.pem default_backend webapps option forwardfor
bind
:在前端服务器中定义一个或多个侦听地址和/或端口。ssl crt
:配置HAProxy SSL终止并指定SSL / TLS证书的路径。default_backend
:指定未匹配“use_backend”规则时要使用的后端。option forwardfor
:HAProxy在反向代理模式下运行。此选项使后端服务器可以查看客户端的IP地址,而不是HAProxy服务器的IP地址。
注意:
在此演示中,我们的代理后端使用SSL / TLS证书。因此,与其配置每个后端应用程序以终止其SSL / TLS连接(SSL Pass through
),我们将HAProxy配置为SSL / TLS证书终止点(SSL Termination
)。
如果您不使用SSL / TLS终止,请删除绑定行的SSL部分, ssl crt /etc/ssl/certs/haproxy.pem
。
定义HAProxy后端配置设置
在本节中,我们将以基本形式定义HAProxy调度算法和请求被代理/负载均衡的后端服务器。
backend webapps balance roundrobin server app01 192.168.59.6:80 check server app02 192.168.60.4:80 check
- 平衡 参数定义负载均衡器调度算法。
- 轮循 依次选择服务器。
- 其他常见的算法是 最小康 这使负载均衡器可以将请求转发到连接最少的服务器。
- 服务器 设置指定后端可用的服务器。
- 校验 选项在服务器上启用运行状况检查,以便其中之一关闭时,请求将定向到可用的后端服务器。
定义HAProxy统计信息配置设置
根据 HAProxy统计页面,HAProxy附带了一个名为 HAProxy统计页面 它显示了丰富的指标,涵盖服务器的运行状况,当前请求率,响应时间等。这些指标提供了基于前端,后端和服务器的细粒度数据。可以使用 stats enable
指令,可以将其添加到前端或侦听部分。在本教程中,我们使用了一个监听部分。
listen stats bind 192.168.57.8:8443 ssl crt /etc/ssl/certs/haproxy.pem 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 haadmin:[email protected] # Enforce Basic authentication for Stats page stats uri /stats # Statistics URL
请注意, bind 192.168.57.8:8443 ssl crt /etc/ssl/certs/haproxy.pem
定义用于访问HAProxy统计信息的前端IP和端口以及要使用的SSL / TLS证书。
完成配置后,保存并退出文件。
通常,这就是我们的配置。 注意 我们添加了这一行, tune.ssl.default-dh-param 2048
,转到“ SSL / TLS配置选项”部分。
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
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
tune.ssl.default-dh-param 2048
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend kifarunixlb
bind 192.168.57.8:443 ssl crt /etc/ssl/certs/haproxy.pem
default_backend webapps
option forwardfor
backend webapps
balance roundrobin
server app01 192.168.59.6:80 check
server app02 192.168.60.4:80 check
listen stats
bind 192.168.57.8:8443 ssl crt /etc/ssl/certs/haproxy.pem
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 haadmin:[email protected] # Enforce Basic authentication for Stats page
stats uri /stats # Statistics URL
验证HAProxy配置语法
完成配置后,在启动HAProxy配置语法验证之前,请运行以下命令;
haproxy -f /etc/haproxy/haproxy.cfg -c -V
如果一切顺利,您应该得到输出;
Configuration file is valid
否则,您将在stdout上收到错误消息。请务必先修复,然后再继续。
运行HAProxy
安装后,默认情况下会启动HAProxy并将其启用以在系统启动时运行。您可以通过运行以下命令来重新启动它
systemctl restart haproxy
检查状态;
systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-06-05 20:45:33 UTC; 7s ago
Docs: man:haproxy(1)
file:/usr/share/doc/haproxy/configuration.txt.gz
Process: 21423 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=0/SUCCESS)
Main PID: 21425 (haproxy)
Tasks: 3 (limit: 2282)
Memory: 39.5M
CGroup: /system.slice/haproxy.service
├─21425 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
└─21440 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
Jun 05 20:45:33 haproxy.kifarunix-demo.com systemd[1]: Starting HAProxy Load Balancer...
Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: Proxy kifarunixlb started.
Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: Proxy kifarunixlb started.
Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: Proxy webapps started.
Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: Proxy webapps started.
Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: Proxy stats started.
Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: Proxy stats started.
Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: [NOTICE] 156/204533 (21425) : New worker #1 (21440) forked
Jun 05 20:45:33 haproxy.kifarunix-demo.com systemd[1]: Started HAProxy Load Balancer.
如果UFW正在运行,请打开端口443和统计端口;否则,请打开端口。
ufw allow 443/tcp
ufw allow 8443/tcp
在Ubuntu 20.04上验证HAProxy负载平衡设置
现在,您可以从浏览器访问HAProxy以确认您的LB设置。使用地址, https[s]://lb-server-IP-or-hostname
。
第一页显示来自第一个定义的后端的内容,在本演示中为app01。记住这里使用的LB算法, roundrobin
。
如果您重新加载该URL,则显示第二个应用程序中的内容;
您还可以检查HAProxy的统计信息, http[s]://lb-server-IP-or-hostname[:port]/stats
。如果启用了基本身份验证,则提示您进行身份验证。
在那里,您可以获得统计信息。
这使我们结束了有关如何在Ubuntu 20.04上安装和设置HAProxy的教程的结尾。
进一步阅读
。