Haproxy
特点
可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;
最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;
支持多达8种负载均衡算法,同时也支持会话保持;
支持虚机主机功能,从而实现web负载均衡更加灵活;
支持连接拒绝、全透明代理等独特的功能;
拥有强大的ACL支持,用于访问控制;
其独特的弹性二叉树数据结构,使数据结构的复杂性上升到了0(1),即数据的查寻速度不会随着数据条目的增加而速度有所下降
支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成;
支持TCP加速,零复制功能,类似于mmap机制;
支持响应池(response buffering);
支持RDP协议;
基于源的粘性,类似nginx的ip_hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器;
更好统计数据接口,其web接口显示后端集群中各个服务器的接收、发送、拒绝、错误等数据的统计信息
详细的健康状态检测,web接口中有关于对上游服务器的健康检测状态,并提供了一定的管理功能;
基于流量的健康评估机制;
基于http认证;
基于命令行的管理接口;
日志分析器,可对日志进行分析。
负载均衡算法
roundrobin:轮询,默认的调度算法,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除;
static-rr:根据权重,轮询调度,每个请求按时间顺序逐一分配,同时考虑服务器的权重,后端服务器down掉,能自动剔除;
leastconn:最少连接,把新的连接请求分配到当前连接数最少的服务器;
source:源地址哈希,根据请求的源地址分配,可以保证同一ip的请求会发送到同一台后端服务器,主要应用于有session会话保持的场景;
ri:优先级,权重,优先级高的服务器优先分配请求;
least-time:最少时间,最少时间优先,根据服务器响应时间来分配请求;
hdr(name):自定义header,根据header的值来分配请求;
rdp-cookie(name):根据cookie(name)来分配请求;
常见的使用场景
Web服务器负载均衡: 将大量的HTTP/HTTPS流量分发到多台Web服务器上,提高网站的可用性和可扩展性。
应用服务器负载均衡: 将应用服务的请求均衡分发到多台应用服务器上,如Java应用、.NET应用等。
数据库负载均衡: 将数据库查询请求分发到多台数据库服务器上,提升数据库的性能和可用性。
缓存服务器负载均衡: 将缓存服务的请求分发到多台缓存服务器上,如Redis、Memcached等。
反向代理: 作为反向代理服务器,接收来自客户端的请求并转发到后端的真实服务器。
SSL/TLS终结: 处理客户端与服务器之间的SSL/TLS加密连接,并将明文流量转发给后端服务器。
HTTP/2支持: 处理客户端的HTTP/2请求,并将其转换为后端服务器能够理解的协议。
TCP/UDP代理: 作为TCP或UDP协议的代理服务器,转发这些协议的网络流量。
高可用性和容错性: 通过健康检查和故障转移机制来提高系统的可用性和容错能力。
缺点
HAProxy 作为中间层组件,需要在客户端和后端服务器之间传输数据。每次请求和响应都需要经过 HAProxy,这会增加一些额外的延迟。具体的性能损耗取决于:
数据复制:每个请求和响应数据包都需要在 HAProxy 内存中复制和处理。
网络传输:数据需要在客户端、HAProxy、和后端服务器之间传输,这增加了网络延迟。
健康检查和故障转移机制
健康检查是 HAProxy 用来确定后端服务器是否可以处理请求的机制。如果后端服务器被认为是不可用的,HAProxy 会自动将流量重定向到其他可用的服务器。在 HAProxy 的配置文件中,可以为每个后端服务器定义健康检查。以下是一个示例配置:
backend my_backend
balance roundrobin
server server1 192.168.1.1:80 check
server server2 192.168.1.2:80 check
server server3 192.168.1.3:80 check
在这个示例中,check 关键字用于启用健康检查。HAProxy 会定期向每个后端服务器发送健康检查请求,并根据服务器的响应来确定其状态。如果服务器无法响应健康检查请求,HAProxy 会将其标记为不可用,并将流量重定向到其他可用的服务器。
HAProxy 提供了多种类型的健康检查,包括简单的 TCP 检查、HTTP 状态码检查以及自定义脚本检查。
# TCP 检查
server server1 192.168.1.1:80 check port 80
# HTTP 检查
server server1 192.168.1.1:80 check check-ssl verify none
# 自定义 HTTP 检查
server server1 192.168.1.1:80 check inter 2000 rise 2 fall 3
当一个或多个后端服务器不可用时,HAProxy 的故障转移机制会自动将流量重定向到其他可用的服务器。 故障转移机制通常不需要额外的配置,因为它是健康检查的一部分。如果健康检查检测到服务器不可用,HAProxy 会自动将流量转移到其他可用服务器。 可以通过配置不同的负载均衡算法和服务器权重来影响故障转移的行为。例如:
# 轮询算法
balance roundrobin
# 最少连接数算法
balance leastconn
# 服务器权重
server server1 192.168.1.1:80 check weight 1
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服务器或缓存服务器。