haproxy
基本介绍
HAProxy 特点
相比 LVS 和 Nginx,LVS 性能最好但搭建相对复杂。Nginx 的 upstream 模块支持集群功能,但对集群节点的健康检查功能不强,性能不如 HAProxy。
主要特性
- 可靠性和稳定性非常好,可以与硬件级的 F5 负载均衡设备相媲美
- 最高可以同时维护 40000-50000 个并发连接,单位时间内处理的最大请求数为 20000 个,最大处理能力可达 10Git/s
- 支持多达八种负载均衡算法,也支持会话保持
- 基于流量的健康评估机制,基于 HTTP 认证
- 基于命令行的管理接口,有日志分析器,可以对日志进行分析
- 有强大的 ACL 支持,用于访问控制(黑白名单)
- 支持虚拟主机的功能,从而实现 Web 负载均衡更加灵活
LVS、Nginx、HAProxy 区别
- LVS 基于 Linux 操作系统内核实现软负载均衡,而 HAProxy 和 Nginx 是基于第三方应用实现的软负载均衡
- LVS 是可实现 4 层的 IP 负载均衡技术,无法实现基于目录、URL 的转发,而 HAProxy 和 Nginx 都可以实现 4 层和 7 层技术,HAProxy 可以提供 TCP 和 HTTP 应用的负载均衡综合解决方案
- LVS 因为工作在 ISO 模型的第四层,其状态检测功能单一,而 HAProxy 在状态检测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式
- HAProxy 功能强大,但整体性能低于 4 层模式的 LVS 负载均衡
- Nginx 主要用于 Web 服务器或者缓存服务器,Nginx 的 upstream 模块虽然也支持集群功能,但对集群节点健康检查功能不强,性能没有 HAProxy 强
总体来说
反向代理、前端部署等 HTTP 服务,都使用 Nginx。
如果需要用到 TCP 转发,就需要用到 HAProxy(HAProxy 和 FRP 从 TCP 转发角度来说,HAProxy 的性能更高,所以生产环境的 TCP 转发需要使用 HAProxy)。
部署
启动脚本
重载脚本
HAProxy 基本配置
global 配置
全局配置部分,一般设置进程级别的配置。
示例:
defaults 配置
定义默认配置,所有的 frontend、backend 和 listen 都从该区段继承默认配置。如果在这些区段中重新声明指令配置项,则会覆盖 defaults 中的配置。
示例:
listen 配置
该区段定义了一个完整的代理,属于 frontend 和 backend 的结合体,在新版中该区段不是必须的。但在老版本中所有的配置都在这一部分完成,为保证配置的兼容性,这一部分被保留。
示例:
Prometheus 监控收集
转发 TCP
send-proxy 模式
在 HAProxy 中,send-proxy 模式是一种功能,用于在代理之间传递客户端的原始连接信息。它允许在代理之间传递客户端的原始 IP 地址和端口信息,而不是只传递已经建立的连接。
通常情况下,在 TCP 代理中,当客户端连接到代理时,代理会建立一个新的连接到后端服务器,而此时代理服务器和后端服务器之间的连接是新建立的,与客户端的连接不同。这就导致后端服务器无法获取客户端的真实 IP 地址。
但是,通过使用 send-proxy 模式,代理服务器可以在与后端服务器建立连接时,发送客户端的原始连接信息,包括客户端的 IP 地址和端口等。后端服务器收到这些信息后,就可以知道客户端的真实 IP 地址,并可以根据需要进行相应的处理,比如记录日志、做访问控制等。
这会告诉 HAProxy 在与后端服务器建立连接时,发送客户端的原始连接信息。在后端服务器的配置中,你也需要相应地配置以接收这些信息。
总的来说,send-proxy 模式可以帮助你解决代理服务器无法获取客户端真实 IP 地址的问题,提高了代理服务的灵活性和功能性。
当你启用 send-proxy 模式后,在与后端服务器建立连接时,HAProxy 会在 TCP 数据包的头部添加一些特殊的代理协议头。这些头部信息包含了客户端的 IP 地址和端口,以及一些其他的元数据。
