haproxy服务介绍

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

安装下载

bash 复制代码
apt install -y haproxy
bash 复制代码
systemctl enable --now haproxy

开启HAProxy的界面UI

bash 复制代码
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:启用管理功能。
bash 复制代码
systemctl restart haproxy

界面访问:IP:8080/huhy

配置负载均衡

一般用于高可用集群;可参考博文配置openstack高可用集群

bash 复制代码
vim /etc/haproxy/haproxy.cfg
bash 复制代码
#可根据服务自定义名称
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代理

bash 复制代码
vim /etc/haproxy/haproxy.cfg
bash 复制代码
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
bash 复制代码
vim /etc/haproxy/haproxy.cfg
bash 复制代码
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
bash 复制代码
systemctl restart haproxy

访问haproxy节点IP

haproxy节点状态

相关推荐
vvw&4 小时前
Linux 中的 .bashrc 是什么?配置详解
linux·运维·服务器·chrome·后端·ubuntu·centos
神也佑我橙橙12 小时前
Ubuntu 22.04 安装英伟达驱动
linux·ubuntu·nvidia
不喝水的鱼儿12 小时前
Ubuntu 25.04安装搜狗输入法
linux·运维·ubuntu
guygg881 天前
ubuntu手动编译VTK9.3 Generating qmltypes file 失败
linux·运维·ubuntu
诗意亭序1 天前
ubuntu16.04 虚拟机与电脑共用wifi
ubuntu
scilwb1 天前
Isaac Sim 4.5中iRobot Create 3机器人LightBeam传感器系统完整实现教程
ubuntu
applebomb1 天前
没合适的组合wheel包,就自行编译flash_attn吧
python·ubuntu·attention·flash
Rudon滨海渔村1 天前
解决阿里云ubuntu内存溢出导致vps死机无法访问 - 永久性增加ubuntu的swap空间 - 阿里云Linux实例内存溢出(OOM)问题修复方案
linux·运维·ubuntu
2401_861615281 天前
跨平台的ARM 和 x86 Docker 镜像:汇编语言实验环境搭建
linux·汇编·ubuntu·docker·容器
Ronin3052 天前
【Linux系统】vim编辑器 | 编译器gcc/g++ | make/Makefile
linux·运维·服务器·ubuntu·编辑器·vim