Haproxy服务介绍

张开发
2026/4/20 0:36:19 15 分钟阅读

分享文章

Haproxy服务介绍
haproxy搭建使用开启HAProxy的界面UI配置负载均衡配置web代理HAProxyHigh Availability Proxy是一个高性能的TCP/HTTP负载均衡器和代理服务器广泛用于提升Web应用的可用性和性能。官网功能和特点负载均衡支持多种负载均衡算法例如轮询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安装下载aptinstall-yhaproxysystemctlenable--nowhaproxy如果要指定版本下载可参考官网/etc/haproxy/haproxy.cfg主配文件的全局参数说明# 全局配置部分对整个 HAProxy 进程生效global# 将日志信息发送到 /dev/log 设备文件使用 local0 日志设施log /dev/log local0# 将日志信息发送到 /dev/log 设备文件使用 local1 日志设施仅记录 notice 及更高级别的日志log /dev/log local1 notice# 使用 chroot 机制将 HAProxy 的运行根目录限制在 /var/lib/haproxy增强安全性chroot/var/lib/haproxy# 创建一个用于获取 HAProxy 统计信息的 UNIX 域套接字路径为 /var/lib/haproxy/stats# 权限模式为 660属主和属组有读写权限需要 admin 级别权限访问stats socket /var/lib/haproxy/stats mode660level admin# 设置连接到统计套接字获取信息的超时时间为 30 秒statstimeout30s# 指定 HAProxy 进程运行时使用的用户为 haproxyuser haproxy# 指定 HAProxy 进程运行时使用的组为 haproxygroup haproxy# 让 HAProxy 以守护进程的方式在后台运行daemon# 设置 HAProxy 所能接受的最大并发连接数为 4000maxconn4000# 针对 SSL/TLS 配置设置默认的 Diffie-Hellman 参数大小为 2048 位增强安全性tune.ssl.default-dh-param2048# 默认配置部分为后续的前端、后端等配置提供默认设置defaults# 继承 global 部分定义的日志配置log global# 设置 HAProxy 的工作模式为 TCP 模式适用于基于 TCP 的流量转发mode tcp# 启用 TCP 模式下详细的日志记录功能option tcplog# 不记录空连接的日志信息减少不必要的日志量option dontlognull# 设置 HAProxy 尝试连接后端服务器的超时时间为 5 秒timeoutconnect 5s# 设置客户端连接的超时时间为 50 秒timeoutclient 50s# 设置与后端服务器交互的超时时间为 50 秒timeoutserver 50s# 当 HAProxy 将客户端请求转发到后端服务器出现故障时最多重试 3 次retries3开启HAProxy的界面UIcat/etc/haproxy/haproxy.cfgeof global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /var/lib/haproxy/stats mode 660 level admin stats timeout 30s user haproxy group haproxy daemon maxconn 4000 tune.ssl.default-dh-param 2048 defaults log global mode tcp option tcplog option dontlognull timeout connect 5s timeout client 50s timeout server 50s retries 3 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监听页面参数含义Queue队列Cur: 当前队列中的请求数Max: 历史最大队列长度Limit: 队列大小限制Session rate会话率Cur: 当前每秒新建会话数Max: 历史最大每秒会话数Limit: 会话率限制Sessions会话Cur: 当前活跃会话数Max: 历史最大并发会话数Limit: 最大会话数限制Total: 总会话数 - 从启动至今处理的所有会话总数LbTot: 负载均衡会话数 - 通过负载均衡算法分配的总会话数Last: 最后会话时间 - 距离最后一个新会话建立的时间Bytes字节流量In: 输入字节数客户端→HAProxyOut: 输出字节数HAProxy→客户端Denied拒绝Req: 被拒绝的请求数因安全规则等Resp: 被拒绝的响应数Errors错误Req: 请求错误数客户端侧Conn: 连接错误数Resp: 响应错误数服务器侧Warnings警告Retr: 重试次数Redis: 重新调度次数Server服务器状态Status: 服务器状态UP/DOWN/MAINTLastChk: 最后一次健康检查结果Wght: 服务器权重Act: 活跃服务器数Bck: 备份服务器数Chk: 健康检查状态Dwn: 宕机次数Dwntme: 总宕机时间Thrtle: 节流状态配置负载均衡一般用于高可用集群可参考博文配置openstack高可用集群vim/etc/haproxy/haproxy.cfg#可根据服务自定义名称listen openstack_mariadb_galera_cluster# 绑定HAProxy监听的IP地址和端口bind192.168.200.154:3306# 负载均衡算法基于客户端源IP地址进行负载均衡balancesource# 设置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秒timeoutconnect 5000ms# 设置客户端连接超时为30000毫秒30秒timeoutclient 30000ms# 设置服务器连接超时为30000毫秒30秒timeoutserver 30000ms# 设置连接重试次数为3次retries3# 定义后端服务器1启用健康检查检查间隔为2000毫秒2秒连续2次成功认为正常连续5次失败认为不可用限制最大连接数为100server controller01192.168.200.155:3306 check inter2000rise2fall5maxconn100# 定义后端服务器2启用健康检查检查间隔为2000毫秒2秒连续2次成功认为正常连续5次失败认为不可用限制最大连接数为100server controller02192.168.200.156:3306 check inter2000rise2fall5maxconn100# 定义后端服务器3启用健康检查检查间隔为2000毫秒2秒连续2次成功认为正常连续5次失败认为不可用限制最大连接数为100server controller03192.168.200.157:3306 check inter2000rise2fall5maxconn100# server后还可定义以下参数# weight 100 服务器权重负载均衡时有用# backup 标记为备份服务器主服务器宕机时使用# disabled 初始禁用状态负载均衡的算法有如下可根据需求修改balance roundrobin轮询算法将请求依次分配给后端服务器。balance leastconn最少连接数算法将请求分配给当前连接数最少的服务器。balance source源地址散列算法根据客户端的源 IP 地址进行负载均衡确保同一客户端的请求总是分配到同一台服务器。balance uriURI 散列算法根据请求的 URI 进行负载均衡确保相同 URI 的请求总是分配到同一台服务器。balance uri lenURI 长度散列算法根据请求 URI 的长度进行负载均衡。balance uri depthURI 深度散列算法根据请求 URI 的目录深度进行负载均衡。balance url_paramURL 参数散列算法根据指定的 URL 参数进行负载均衡。balance rdp-cookieRDP 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.cfgfrontend 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 web1192.168.1.101:80 check inter2000rise2fall3server web2192.168.1.102:80 check inter2000rise2fall3示例通过haproxy配置代理openstack节点主机IPhaproxy代理192.168.200.190openstack192.168.200.195vim/etc/haproxy/haproxy.cfgfrontend openstack_http_frontbind192.168.200.190:80 mode http option httplog default_backend http_back backend http_back mode http balance roundrobin server controller192.168.200.195:80/horizon check inter2000rise2fall3systemctl restart haproxy访问haproxy节点IPhaproxy节点状态

更多文章