在Ubuntu 20.04上安装和设置HAProxy

欢迎来到我们的指南,了解如何在Ubuntu 20.04上安装和设置HAProxy。 HAProxyHigh 一个您可能已经知道,安全性代理(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:全局部分定义了适用于所有 frontendbackend 部分。您可以定义多个默认节,但后续的默认节将覆盖之前的默认节。
  • frontend:将HAProxy放置为反向代理时, frontend 部分定义了客户端可以连接的IP地址和端口。
  • backend:后端部分定义了将进行负载平衡并分配为处理请求的服务器组。

frontendbackend 可以使用 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

在我们的配置文件中,我们将修改以上内容以包括 frontendbackend 部分。

在继续之前,请备份默认配置文件;

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。如果启用了基本身份验证,则提示您进行身份验证。

haproxy基本认证

在那里,您可以获得统计信息。

在Ubuntu 20.04上安装和设置HAProxy

这使我们结束了有关如何在Ubuntu 20.04上安装和设置HAProxy的教程的结尾。

进一步阅读

HAProxy配置手册

Sidebar