haproxy
HAProxy(High Availability Proxy)是一个高性能的TCP/HTTP负载均衡器和代理服务器,广泛用于提升Web应用的可用性和性能。[官网说明](https://docs.haproxy.org/2.8/intro.html#3.2)
功能和特点:
负载均衡:
- 支持多种负载均衡算法,例如轮询(Round Robin)、最少连接(Least Connections)、源地址散列(Source IP Hashing)等。
- 支持会话保持(Session Persistence),可以根据用户的会话信息将请求分配给同一个服务器。
高可用性:
- 支持健康检查(Health Checks),定期检测后端服务器的状态,自动将故障服务器从负载均衡池中移除。
- 支持主备模式(Active-Backup),可以在主服务器故障时自动切换到备用服务器。
性能优化:
- 高效的资源管理和事件处理机制,能够处理大量并发连接。
- 支持连接池和连接复用,减少连接建立和关闭的开销。
安全性:
- 提供SSL/TLS终止和加速功能,减少后端服务器的加密负担。
- 支持访问控制列表(ACL)和自定义的安全策略,保护应用免受恶意攻击。
灵活的配置:
- 配置文件简单且强大,支持复杂的路由和流量管理规则。
- 支持热加载配置,允许在不中断服务的情况下修改配置。
监控和统计:
- 提供详细的监控和统计信息,帮助管理员了解服务器的负载情况和运行状态。
- 支持多种日志格式和集成外部监控工具。
HAProxy 的工作原理
- HAProxy 是一个事件驱动的非阻塞引擎,结合了非常快速的 I/O 层使用基于优先级的多线程调度程序。由于它设计有数据考虑到转发目标,其架构经过优化,可以尽可能快地移动数据尽可能少的操作。它专注于优化 CPU通过尽可能长时间地保持与同一个 CPU 的连接来提高缓存的效率。因此,它实现了分层模型,在每个级别都提供了旁路机制确保数据不会在需要时到达更高层。大部分处理
在内核中执行,HAProxy 尽力帮助内核执行通过给出一些提示或避免某些操作来尽可能快地工作
当它猜测它们稍后可能会被分组时。因此,典型的数字显示15% 的处理时间花在 HAProxy 上,而 85% 的处理时间花在内核的 TCP 或HTTP 关闭模式,HAProxy 约占 30%,而 HTTP 模式下内核约占 70%保持活动模式。
搭建使用
实验环境Ubuntu2404
安装下载
apt install -y haproxy
systemctl enable --now haproxy
开启HAProxy的界面UI
cat >> /etc/haproxy/haproxy.cfg << eof
listen stats
bind *:8080
stats enable
stats uri /huhy
stats refresh 10s
stats auth admin:123456
stats admin if TRUE
eof
参数含义
- bind *:8080:监听8080端口。
- stats enable:启用统计页面。
- stats uri /haproxy?stats:访问统计页面的URI(在本例中为http://<你的服务器IP>:8080/haproxy?stats)。
- stats refresh 10s:每10秒刷新一次页面。
- stats auth admin:adminpassword:设置访问统计页面的认证信息,用户名为admin,密码为123456。
- stats admin if TRUE:启用管理功能。
systemctl restart haproxy
界面访问:IP:8080/huhy
配置负载均衡
一般用于高可用集群;可参考博文配置openstack高可用集群
vim /etc/haproxy/haproxy.cfg
#可根据服务自定义名称
listen openstack_mariadb_galera_cluster
# 绑定HAProxy监听的IP地址和端口
bind 192.168.200.154:3306
# 负载均衡算法,基于客户端源IP地址进行负载均衡
balance source
# 设置TCP模式,用于处理TCP连接
mode tcp
# 启用TCP日志记录
option tcplog
# 自定义日志格式
log-format "%ci:%cp [%t] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta %ST %B %ts %D %ac/%fc/%bc/%sc/%rc %sq/%bq"
# 设置连接超时为5000毫秒(5秒)
timeout connect 5000ms
# 设置客户端连接超时为30000毫秒(30秒)
timeout client 30000ms
# 设置服务器连接超时为30000毫秒(30秒)
timeout server 30000ms
# 设置连接重试次数为3次
retries 3
# 定义后端服务器1,启用健康检查,检查间隔为2000毫秒(2秒),连续2次成功认为正常,连续5次失败认为不可用,限制最大连接数为100
server controller01 192.168.200.155:3306 check inter 2000 rise 2 fall 5 maxconn 100
# 定义后端服务器2,启用健康检查,检查间隔为2000毫秒(2秒),连续2次成功认为正常,连续5次失败认为不可用,限制最大连接数为100
server controller02 192.168.200.156:3306 check inter 2000 rise 2 fall 5 maxconn 100
# 定义后端服务器3,启用健康检查,检查间隔为2000毫秒(2秒),连续2次成功认为正常,连续5次失败认为不可用,限制最大连接数为100
server controller03 192.168.200.157:3306 check inter 2000 rise 2 fall 5 maxconn 100
负载均衡的算法有如下;可根据需求修改
balance roundrobin:轮询算法,将请求依次分配给后端服务器。
balance leastconn:最少连接数算法,将请求分配给当前连接数最少的服务器。
balance source:源地址散列算法,根据客户端的源 IP 地址进行负载均衡,确保同一客户端的请求总是分配到同一台服务器。
balance uri:URI 散列算法,根据请求的 URI 进行负载均衡,确保相同 URI 的请求总是分配到同一台服务器。
balance uri len:URI 长度散列算法,根据请求 URI 的长度进行负载均衡。
balance uri depth:URI 深度散列算法,根据请求 URI 的目录深度进行负载均衡。
balance url_param:URL 参数散列算法,根据指定的 URL 参数进行负载均衡。
balance rdp-cookie:RDP Cookie 散列算法,根据 RDP Cookie 进行负载均衡。
HAProxy 模式;得根据服务实际情况选择
- mode tcp:传输层模式,用于处理 TCP 连接。这是用于数据库、SMTP 等应用程序的最常见模式。
- mode http:应用层模式,用于处理 HTTP/HTTPS 流量。这允许使用 HTTP 特定的功能,如 URL 重写、负载均衡基于 HTTP 头或 Cookie 等。
- mode health:健康检查模式,用于为后端服务器执行健康检查。此模式通常用于专用健康检查实例,而不实际处理客户端流量。
配置web代理
配置了 HAProxy 作为前端代理服务器后,客户端只需要访问 HAProxy 的监听地址,而不需要直接访问真实的后端 Web 服务器。具体来说,客户端的请求将如下处理:
- 客户端发起 HTTPS 请求,目标地址是 HAProxy 的监听地址
- HAProxy 接收到请求后,根据配置的负载均衡算法(例如轮询 roundrobin)将请求转发给后端服务器之一(例如 192.168.1.101 或 192.168.1.102)。
- 后端服务器处理请求并返回响应给 HAProxy。
- HAProxy 再将响应转发回客户端。
http代理
vim /etc/haproxy/haproxy.cfg
frontend http_front
# 绑定 HAProxy 在所有 IP 地址的 80 端口上监听 HTTP 请求
bind *:80
# 设置 HTTP 模式
mode http
# 使用 HTTP 日志格式记录日志
option httplog
# 默认后端服务器组
default_backend http_back
backend http_back
# 设置 HTTP 模式
mode http
# 负载均衡算法,轮询分配请求
balance roundrobin
# 定义后端服务器,
# inter 2000:每隔 2000 毫秒进行一次健康检查。
# rise 2:连续 2 次健康检查成功,认为服务器正常。
# fall 3:连续 3 次健康检查失败,认为服务器不可用。
server web1 192.168.1.101:80 check inter 2000 rise 2 fall 3
server web2 192.168.1.102:80 check inter 2000 rise 2 fall 3
示例:通过haproxy配置代理openstack节点
主机 | IP |
---|---|
haproxy代理 | 192.168.200.190 |
openstack | 192.168.200.195 |
vim /etc/haproxy/haproxy.cfg
frontend openstack_http_front
bind 192.168.200.190:80
mode http
option httplog
default_backend http_back
backend http_back
mode http
balance roundrobin
server controller 192.168.200.195:80/horizon check inter 2000 rise 2 fall 3
systemctl restart haproxy
访问haproxy节点IP
haproxy节点状态