在CentOS 8上安装和设置HAProxy

本指南将引导您逐步了解如何在CentOS 8上安装和设置HAProxy。 HAProxy 是当前事实上的标准开源负载平衡器。它为基于TCP和HTTP的应用程序提供了高可用性,负载平衡和代理。

提供负载平衡时,HAProxy支持用于负载平衡的不同算法。一些常用的包括:

  • 轮循 –这是默认算法,它使HAProxy能够选择每个服务器以根据其权重依次服务请求。
  • 最小康 –连接数最少的服务器将接收连接。建议在预期会话很长的地方使用,例如LDAP,SQL。
  • 资源 –使用此算法,将对源IP地址进行哈希处理并除以运行中服务器的总权重,以指定接收请求的服务器。这样可以确保相同的客户端IP地址始终会到达同一服务器,只要没有服务器出现故障即可。如果哈希结果由于正在运行的服务器数量变化而变化,那么许多客户端将被定向到另一台服务器。

在上阅读有关HAProxy负载平衡算法的更多信息。 文档页面

在CentOS 8上安装和设置HAProxy

为了说明HAProxy的基本运行方式,本指南使用了三个虚拟机;第二个是虚拟机。一台以HAProxy负载平衡器的身份运行,另外两台以服务基本html页面的网络服务器运行。

在CentOS 8上安装HAProxy

运行系统更新。

dnf install haproxy

系统更新完成后,您可以继续安装HAProxy。 HAProxy在默认的CentOS 8存储库上可用,安装就像运行命令一样简单。

dnf install haproxy

在CentOS 8上配置HAProxy

/etc/haproxy/haproxy.cfg 是默认的HAProxy配置文件。以下是没有注释的HAProxy默认配置文件示例;

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 *:5000
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js
    use_backend static          if url_static
    default_backend             app
backend static
    balance     roundrobin
    server      static 127.0.0.1:4331 check
backend app
    balance     roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check

如您在上面的配置文件中看到的,有四个HAProxy配置部分:

  • global 设置,这些设置定义适用于所有运行HAProxy的服务器的参数
  • default 设置部分定义了适用于配置中所有代理子部分的参数(frontendbackendlisten)。
  • frontend 设置部分定义了服务器用于客户端连接请求的监听套接字。
  • backend 设置部分定义了真实的服务器IP地址以及负载均衡器调度算法。
  • 有时,两者 backendfrontend 可以根据 listen 部分。

进一步了解这些部分 HAProxy基本部分

创建HAProxy配置文件的备份。

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

定义全局HAProxy设置

在我们的配置中,我们将保留默认的全局设置。

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

定义HAProxy默认设置

我们将保留默认设置。

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

定义HAProxy前端设置

在本节中,我们将定义如何从外部访问HAProxy以启用对后端服务器的访问。由于大多数选项是在默认设置部分定义的,因此这是我们的前端设置;

frontend lb01
    bind 192.168.56.133:80
    default_backend kifaruapps

哪里;

  • 捆绑 定义HAProxy侦听的给定IP地址和端口。
  • default_backend 给出一个名称 backend 发送流量。

定义HAProxy后端设置

在“后端”部分,定义实际的后端服务器IP地址以及负载均衡器调度算法。

backend kifaruapps
    balance roundrobin
    server webapp01  192.168.2.112:8080 check
    server webapp02  192.168.58.9:80 check
  • 平衡 设置定义循环负载均衡器调度算法。
  • 服务器 设置指定后端可用的服务器。
  • 校验 –在服务器上启用运行状况检查。默认情况下,始终认为服务器可用。如果设置,则服务器在接受定期的TCP连接时可用,以确保服务器确实能够处理请求。

定义HAProxy监听设置

您可以选择添加侦听部分以启用HAProxy统计信息。 HAProxy提供了一个名为 HAProxy统计信息页面 会显示与服务器的运行状况,当前请求率,响应时间等相关的指标,并提供基于前端,后端和服务器的详细数据。

Stats页面可以启用,如下所示;

listen stats
    bind  192.168.56.133: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 lbadmin:[email protected]     # Authentication for Stats page
    stats uri /lb_stats             # Statistics URL

确保防火墙上允许使用stats端口。

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

确保检查SELinux日志,以防万一无法访问任何内容。

最后,这就是我们的HAProxy配置文件的样子;

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 lb01
    bind 192.168.56.133:80
    default_backend kifarunixapps    
backend kifarunixapps
    balance     roundrobin
    server webapp01  192.168.2.112:8080 check
    server webapp02  192.168.58.9:80 check
listen stats
    bind  192.168.56.133:8088       # Bind stats to port 8088
    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 lbadmin:[email protected]     # Authentication for Stats page
    stats uri /lb_stats             # Statistics URL

阅读有关HAProxy上配置选项的更多信息 文档页面

验证HAProxy配置

要检查HAProxy配置文件中是否存在语法错误,请运行以下命令;

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

如果一切顺利,您应该得到这样的输出;

Configuration file is valid

打开防火墙上的HAProxy端口。

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

在CentOS 8上运行HAProxy

要启动并启用HAProxy以在系统引导上运行,请运行以下命令;

systemctl enable --now haproxy

检查HAProxy的状态。

systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
   Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2020-03-05 22:34:58 EAT; 2s ago
  Process: 3262 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q (code=exited, status=0/SUCCESS)
 Main PID: 3263 (haproxy)
    Tasks: 2 (limit: 5047)
   Memory: 2.5M
   CGroup: /system.slice/haproxy.service
           ├─3263 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
           └─3265 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

Mar 05 22:34:58 ceph-admin.kifarunix-demo.com systemd[1]: Starting HAProxy Load Balancer...
Mar 05 22:34:58 ceph-admin.kifarunix-demo.com systemd[1]: Started HAProxy Load Balancer.

在CentOS 8上配置HAProxy日志记录

要配置HAProxy标准日志记录,请编辑 /etc/rsyslog.conf 并通过删除注释在端口514上启用UDP syslog接收(), #module(load =” imudp”)#input(type =” imudp” port =” 514”) 如下所示。

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")
...

接下来,禁用发送到的私人身份验证消息的日志记录 本地2 设施,(local2.none) 上 / var / log / messages 并启用登录 /var/log/haproxy.log 如下所示。

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

保存配置文件并运行以下命令以检查是否有任何错误。

rsyslogd -N1

接下来,重新启动Rsyslog和HAProxy

systemctl restart rsyslog haproxy

您现在应该可以登录HAProxy /var/log/haproxy.log

tail -f /var/log/haproxy.log

在后端服务器上配置Apache X-Forwarded-For Logging

由于我们已将HAProxy配置为向发送到后端服务器的所有请求中添加HTTP标头“ X-Forwarded-For”(期权前转),您可以在后端服务器上为相同的服务器配置日志记录。这样可以确保捕获到发出请求的客户端的IP地址,而不是HAProxy负载平衡器。

因此,登录到后端服务器并配置Apache以记录X-Forwarded-For标头。我们要更改的默认行是;

...
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
...

因此,编辑此行使其看起来像;

...
LogFormat ""%{X-Forwarded-For}i" %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
...

保存文件并运行Apache配置文件语法检查命令。

apachectl configtest
Syntax OK

重新启动Apache

systemctl restart httpd

在CentOS 8上测试HAProxy负载均衡器

要验证HAProxy是否能够负载均衡http请求,请导航至浏览器并使用主机名或IP地址访问HAProxy。

由于它正在使用 roundrobin 算法,当刷新页面时,您应该能够从两个后端服务器获取内容。

在CentOS 8上安装和设置HAProxy

检查HAProxy统计信息

要检查前端和后端服务器的统计信息,只需导航到在listen部分定义的stats url; http://服务器-IP_OR_主机名:8088 / lb_stats。设置适当的URL。

出现提示时,使用由 stats auth听部分,在此演示中,lbadmin:[email protected],用于用户名和密码。

在CentOS 8上安装和设置HAProxy

HAProxy统计信息

在CentOS 8上安装和设置HAProxy

这标志着我们指南的结尾,说明了如何在CentOS 8上安装和设置HAProxy。

Sidebar