来源:互联网
1 什么是HAProxy
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
HA-Proxy 可以在4和7两层作负载均衡。HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器、Mysql等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。
HAProxy 支持的操作系统:
· Linux 2.4 on x86, x86_64, Alpha, SPARC, MIPS, PARISC
· Linux 2.6 on x86, x86_64, ARM (ixp425), PPC64
· Solaris 8/9 on UltraSPARC 2 and 3
· Solaris 10 on Opteron and UltraSPARC
· FreeBSD 4.10 – 8 on x86
· OpenBSD 3.1 to -current on i386, amd64, macppc, alpha, sparc64 and VAX (check the ports)
2 HAProxy的架构
HAProxy最主要的特点是性能,HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。 HAProxy完全可以支持数以万计的并发连接。并且HAProxy的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上,下图是HAProxy的架构:
·
· 下图是HAProxy的监控页面截图:
·
· HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。
3 负载均衡产品比较
现在的web系统一般都需要负载均衡和高可用性的支持,以支持7*24的服务。负载均衡可以使用硬件,也可以使用软件来实现。
1) 硬件负载均衡
硬件负载均衡产品,比如F5,Big-IP。
2) 软件的负载均衡
一般是4层(TCP层)或者7层(应用层)来实现。软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。
负载均衡的主要技术:
1) 反向代理负载均衡
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
在功能上能以proxy反向代理方式实现 WEB均衡负载的产品有很多。包括Nginx,ApacheProxy,lighttpd,Cheroke 等,它们同时也都是WEB服务器。 但要明确一点的,Haproxy 并不是 web 服务器,Haproxy仅仅一款的用于均衡负载的应用代理。其自身并不能提供http服务。
2) DNS负载均衡
基于DNS的方式,是基于DNS能够让多个IP地址(多个真实服务器)被赋给同一个主机名。
—————————————–
其他解决方案:
Linux Virtual Servers (LVS)
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。
Nginx ("engine X")
Nginx ("engine x")是一款高性能、轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强。
—————————————–
1) Nginx的优点:
性能好,可以负载超过1万的并发。
功能多,除了负载均衡,还能作Web服务器,而且可以通过Geo模块来实现流量分配。
社区活跃,第三方补丁和模块很多
支持gzip proxy
缺点:
不支持session保持。
对后端realserver的健康检查功能效果不好。而且只支持通过端口来检测,不支持通过url来检测。
2) Haproxy的优点:
它的优点正好可以补充nginx的缺点。支持session保持,同时支持通过获取指定的url来检测后端服务器的状态。
支持tcp模式的负载均衡。比如可以给mysql的从服务器集群和邮件服务器做负载均衡。
缺点:
日志通过net方式用syslogd进行记录如果日志太多很影响性能,不支持apache的日志格式。
3) LVS的优点:
性能好,接近硬件设备的网络吞吐和连接负载能力。
LVS的DR模式,支持通过广域网进行负载均衡。这个其他任何负载均衡软件目前都不具备。
缺点:
比较重型。另外社区不如nginx活跃。
—————————————–
HAProxy主要有以下优点:
1) 免费开源,稳定性也是非常好,稳定性可以与LVS相媲美;
2) 根据官方文档,HAProxy最高支持10G并发,作为软件级负载均衡,性能强大;
3) HAProxy可以作为MySQL、邮件或其它的非web的负载均衡;
4) 自带强大的监控服务器状态的页面;
5) HAProxy支持虚拟主机。
4 HAProxy支持分布式
HAProxy支持双机热备;HAProxy作为Loadbalance,支持对backend的健康检查,以保证在后端backend不能服务时,把从frotend进来的request分配至其它可服务的backend,从而保证整体服务的可用性 ;支持session会话保持功能,即同一个IP只转发到一台服务器上。
5 HAProxy的压力测试
完全可以支持数以万计的并发连接,根据官方文档,HAProxy最高支持10G并发流量。
6 系统搭建示例
1) 基于Keepalived+Haproxy搭建四层负载均衡器
Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
Haproxy的四层交换与Keepalived实现一个负载均衡器,适用于Socket、ICE、Mail、Mysql、私有通讯等任意TCP服务。系统架构图如下:
2) 基于Keepalived+Haproxy搭建七层负载均衡器