在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
设置部分定义了适用于配置中所有代理子部分的参数(frontend
,backend
和listen
)。 - 的
frontend
设置部分定义了服务器用于客户端连接请求的监听套接字。 - 的
backend
设置部分定义了真实的服务器IP地址以及负载均衡器调度算法。 - 有时,两者
backend
和frontend
可以根据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
算法,当刷新页面时,您应该能够从两个后端服务器获取内容。
检查HAProxy统计信息
要检查前端和后端服务器的统计信息,只需导航到在listen部分定义的stats url; http://服务器-IP_OR_主机名:8088 / lb_stats。设置适当的URL。
出现提示时,使用由 stats auth
在 听部分,在此演示中,lbadmin:[email protected],用于用户名和密码。
HAProxy统计信息
这标志着我们指南的结尾,说明了如何在CentOS 8上安装和设置HAProxy。
。