本文介绍的 HAProxy 为开源版本 HAProxy,官网地址为:https://www.haproxy.org/,如需了解商业版本,可访问商业版官网:https://www.haproxy.com/;文中所使用到的软件版本:HAProxy 2.8.2、CentOS7.9.2009。

1、简介

HAProxy 是一个免费、非常快速和可靠的反向代理,为 TCP 和 HTTP 应用程序提供高可用的负载均衡和代理功能。它特别适用于高流量的网站,并支持全球访问量最高的一部分网站。多年来,它已成为事实上的标准开源负载均衡器,在大多数主流 Linux 发行版中都内置了它,并且经常默认在云平台上进行部署。

HAProxy 核心团队同时维护多个版本。自 1.8 版本以来,每年发布两个主要版本。第一个数字通常表示重大变更(配置格式等),但实际上很少改变。第二个数字表示新增功能。这两个数字构成了一个分支。在这些数字之后,还会添加一个额外的数字来表示修复错误的发布版本。

核心团队在修复旧版本时非常小心,以确保不会引入新的问题。因此,保持在同一分支上最新的状态非常重要,也就是说,保持在最后几位数字上的最高数值。这样可以确保您获得最新的 bug 修复和改进。

偶数数字的分支被称为”LTS”(长期支持),在发布后的 5 年内得到维护。在此期间,发现 bug 会得到修复。这些分支面向寻求极高稳定性并且不想频繁更新版本但仍希望获得修复程序的一般用户。它们提供长期的支持,使用户能够在相对较长的时间内使用稳定的版本。

奇数数字的分支仅被称为”stable”,面向高技能用户,他们更喜欢经常升级以获得现代特性,并且在出现问题时能够回滚。这些版本的维护周期为 12 到 18 个月。这种持续时间是短暂且有意放宽的,以便根据用户反馈决定维护周期,因此这些版本不适用于嵌入式产品。如果有合理的需求,并且操作被认为足够安全,可能会将一些新功能添加到这些版本中。这样做的目的是让用户在享受现代特性的同时保持较短的维护周期,以适应不断变化的需求。

1.1、性能

正如this test run on AWS ARM-based Graviton2测试所显示的那样,HAProxy 能够很好地与线程进行扩展,并且在 SSL 连接上能够达到每秒 200万 个请求和每秒 100Gbps 的转发流量。

这得益于 HAProxy 的事件驱动架构,它可以极快地响应 I/O 事件;通过轻量级的多线程提供并行处理能力;一个任务调度器,可以在低延迟和高吞吐量之间实时调整;并在各架构层次上不断追求资源的节约。这些特性可能会在开发时间上付出一些代价,但用户升级后能够立即享受到它们的价值,因为他们能够减少机器的数量。对于绝大多数普通负载而言,HAProxy 进程根本不被注意到,这使得用户会忘记它,有时会提出旧版本的问题。

1.2、可靠性

HAProxy 以其高度可靠性而闻名。它已经广泛应用于生产环境,并具有处理大负载和提供稳定一致性的可靠记录。
以下几个因素有助于 HAProxy 的可靠性:
1.健壮的架构:HAProxy 采用事件驱动架构,能够高效处理大量并发连接。它利用异步和非阻塞的 I/O 操作,确保响应性并最小化风险。
2.负载均衡和故障转移:HAProxy 在多个后端服务器之间均衡负载流量,平均分配工作负载,防止任何单个服务器过载。它还支持各种负载均衡算法,优化请求分发。此外,HAProxy 能够检测服务器故障,并自动将流量无缝重定向到健康的服务器,确保高可用性和容错性。
3.健康检查:HAProxy 通过执行健康检查持续监测后端服务器的健康状况。它可以自动移除或禁用未通过健康检查的服务器,防止其接收流量直到其恢复正常。
4.配置灵活性:HAProxy 提供广泛的配置选项,允许管理员根据特定需求对其行为进行微调。这种灵活性能够实现最佳性能,并适应不同的使用场景。
4.积极的社区和支持:HAProxy 受益于活跃和支持性的社区,该社区为其开发做出贡献并通过各种论坛和渠道提供帮助。这有助于快速解决问题和找到解决方案。
总的来说,HAProxy 的可靠性使其成为关键生产环境中负载均衡和代理的可信选择,其中稳定运行和可用性至关重要。

1.3、安全

安全是任何软件或系统的关键方面,HAProxy 非常重视确保用户基础设施的安全性。以下是 HAProxy 在安全方面的一些关键点:
1.防御常见安全漏洞:HAProxy 内置了保护机制,用于防御常见的安全漏洞,如跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。它应用严格的输入验证和清理技术,以防止恶意攻击。
2.SSL/TLS 加密:HAProxy 支持 SSL/TLS 加密,允许客户端和服务器之间进行安全通信。它可以终止 SSL/TLS 连接,执行证书验证,并强制使用安全的密码套件,为传输中的数据提供额外的保护层。
3.访问控制:HAProxy 通过ACL(访问控制列表)和 HTTP 头操纵实现细粒度的访问控制。这使管理员能够定义规则和限制,例如 IP 白名单、速率限制和身份验证,以防止未经授权的访问,并确保只有合法的流量被允许通过。
4.日志记录和审计:HAProxy 提供广泛的日志记录功能,允许管理员监视和分析流量模式,检测和调查潜在的安全事件。通过分析日志,管理员可以识别可疑活动、解决问题,并采取适当的措施来减轻安全风险。
5.定期更新和安全补丁:HAProxy 开发团队积极维护并发布更新,及时解决已识别的安全漏洞。建议用户安装的最新版本,以从最新的安全增强功能和错误修复中受益。
需要注意的是,虽然 HAProxy 本身专注于提供安全功能和减轻常见的安全风险,但整个基础设施的安全性取决于适当的配置、网络设置以及在整个系统堆栈中实施安全最佳实践。

2、安装2.1、下载源码

官网(https://www.haproxy.org/#down)下载源码,然后解压:

tar zxvf haproxy-2.8.2.tar.gz

2.2、编译安装

cd haproxy-2.8.2make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_PCRE=1 USE_SYSTEMD=1make install PREFIX=/home/mongo/soft/haproxy-2.8.2

详细的安装说明可查看源码中的 INSTALL 文件。

安装时启用 USE_SYSTEMD 时,可能会报错:src/haproxy.c:80:31: fatal error: systemd/sd-daemon.h: No such file or directory;这是因为缺少 systemd-devel 包,yum 安装即可:

yum install systemd-devel

2.3、 新建配置文件

编辑 /home/mongo/soft/haproxy-2.8.2/conf/haproxy.cfg 文件:

global  log 127.0.0.1 local0 info  maxconn 20480  daemon  pidfile /home/mongo/soft/haproxy-2.8.2/logs/haproxy.piddefaults  mode http  log global  timeout connect 10s  timeout client 30s  timeout server 30s  timeout check 5slisten tomcat  bind 0.0.0.0:18080  mode http  balance roundrobin  server web1 127.0.0.1:8080 check inter 2000 fall 5

2.4、启停

sbin/haproxy -f conf/haproxy.cfg #启动kill -USR1 pid #优雅停止kill pid #硬停止sbin/haproxy -f conf/haproxy.cfg -sf pid #优雅重启sbin/haproxy -f conf/haproxy.cfg -st pid #硬重启

2.5、访问代理地址