HAProxy——HAproxy七层负载均衡、Nginx/HAProxy/LVS三者对比

一、HAproxy七层负载均衡

1、HAProxy介绍

HAProxy: 是法国人Willy Tarreau 开发的一个开源软件,是一款应对客户端10000以上的同时连接的高性能的TCP和HTTP 负载均衡器。

  • 功能是用来提供基于cookie的持久性,基于内容的交换,过载保护的高级流量管制,自动故障切换,以正则表达式为基础的标题控制运行时间,基于Web的报表,高级日志记录以帮助排除故障的应用或网络及其他功能。
  • LB Cluster:
  四层:lvs, nginx(stream)haproxy(mode tcp)
  七层:http: nginx(http), haproxy(mode http), httpd...
 
  • 软件负载均衡一般通过两种方式来实现: 基于操作系统的软负载实现和基于第三方应用的软负载实现
    LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。
    HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件。

2、HAProxy支持两种主要的代理模式

TCP 即4层 (大多用于邮件服务器、内部协议通信服务器等),在4层模式下,HAProxy仅在客户端和服务器之间转发双向流量。

  • 它主要是通过分析IP层及TCP/UDP层的流量实现的基于IP加端口的负载均衡。
  • 仅建立一次TCP连接。

HTTP 即7层模式,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或删除请求 (request)或者回应(response)里指定内容来控制协议, 七层负载均衡器可以根据报文内容,再配合负载均衡算法来选择后端服务器,因此也称为“内容交换器”。

  • 负载均衡器与客户端及后端的服务器会分别建立一次TCP连接

七层负载均衡对负载均衡设备的要求更高,而七层负载均衡的处理能力也必然低于四层模式的负载均衡。

3、HAProxy功能

 HAProxy 是TCP / HTTP 反向代理服务器,尤其适合于高可用性环境。
        可以针对HTTP 请求添加cookie,进行路由后端服务器
        可平衡负载至后端服务器,并支持持久连接
        支持基于cookie 进行调度
        支持所有主服务器故障切换至备用服务器
        支持专用端口实现监控服务
        支持不影响现有连接情况下停止接受新连接请求
        可以在双向添加,修改或删除HTTP 报文首部
        支持基于pattern 实现连接请求的访问控制
        通过特定的URI 为授权用户提供详细的状态信息
        支持http 反向代理
        支持动态程序的反向代理
        支持基于数据库的反向代理

4、 HAProxy 组成

HAProxy的配置文件是/etc/haproxy/haproxy.cfg, 该文件是 HAProxy功能配置的集中文件,其代理和负载均衡功能的配置均位于该配置文件中。 HAProxy的配置文件主要分为四个部分,即全局功能配置段、默认属性配置段、前端代理配置段、后端负载均衡配置段。

二、HAproxy、LVS与Nginx

LVS、Nginx、HAProxy 是目前使用最广泛的三种软件负载均衡软件。

一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术。具体的应用需求还得具体分析,如果是中小型的 Web 应用,比如日 PV 小于1000万,用 Nginx 就完全可以了;如果机器不少,可以用 DNS 轮询,LVS 所耗费的机器还是比较多的;大型网站或重要的服务,且服务器比较多时,可以考虑用 LVS。

目前关于网站架构一般比较合理流行的架构方案:Web 前端采用 Nginx/HAProxy+Keepalived 作负载均衡器;后端采用 MySQL数据库一主多从和读写分离,采用 LVS+Keepalived 的架构。

1、LVS

LVS 的体系结构

LVS 架设的服务器集群系统有三个部分组成:
(1) 最前端的负载均衡层,用 Load Balancer 表示
(2) 中间的服务器集群层,用 Server Array 表示
(3) 最底端的数据共享存储层,用 Shared Storage 表示
 

LVS 的优点

  • 抗负载能力强、是工作在传输层上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和 cpu资源消耗比较低。

  • 配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率。

  • 工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案,如 LVS + Keepalived。

  • 无流量,LVS 只分发请求,而流量并不从它本身出去,这点保证了均衡器 IO 的性能不会受到大流量的影响。

  • 应用范围比较广,因为 LVS 工作在传输层,所以它几乎可以对所有应用做负载均衡,包括 http、数据库、在线聊天室等等。

LVS 的缺点

  • 软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是 Nginx、HAProxy + Keepalived 的优势所在。
  • 如果是网站应用比较庞大的话,LVS/DR + Keepalived 实施起来就比较复杂了,相对而言,Nginx / HAProxy + Keepalived 就简单多了。

2、Nginx

Nginx 的架构设计是采用模块化的、基于事件驱动、异步、单线程且非阻塞。

Nginx 大量使用多路复用和事件通知,Nginx 启动以后,会在系统中以 daemon 的方式在后台运行,其中包括一个 master 进程,n(n>=1) 个 worker 进程。所有的进程都是单线程(即只有一个主线程)的,且进程间通信主要使用共享内存的方式。

其中,master 进程用于接收来自外界的信号,并给 worker 进程发送信号,同时监控 worker 进程的工作状态。worker 进程则是外部请求真正的处理者,每个 worker 请求相互独立且平等的竞争来自客户端的请求。请求只能在一个 worker 进程中被处理,且一个 worker 进程只有一个主线程,所以同时只能处理一个请求。

Nginx 的优点

  • 跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有 Windows 的移植版本

  • 配置异常简单:非常容易上手。配置风格跟程序开发一样,神一般的配置

  • 非阻塞、高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数

  • 事件驱动:通信机制采用 epoll 模型,支持更大的并发连接

  • Master/Worker 结构:一个 master 进程,生成一个或多个 worker 进程

  • 内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个 Nginx 进程才消耗150M 内存(15M*10=150M)

  • 内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问

  • 节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头

  • 稳定性高:用于反向代理,宕机的概率微乎其微
    Nginx 的缺点

  • Nginx 仅能支持http、https 和 Email 协议,适用范围小 。

  • 对后端服务器的健康检查,只支持通过端口来检测,不支持通过 ur l来检测。不支持 Session 的直接保持,但能通过 ip_hash 来解决。

3、HAProxy

HAProxy 支持两种代理模式 TCP(四层)和HTTP(七层),也是支持虚拟主机的。

HAProxy 的优点能够补充 Nginx 的一些缺点,比如支持 Session 的保持,Cookie 的引导;同时支持通过获取指定的 url 来检测后端服务器的状态。

HAProxy 跟 LVS 类似,本身就只是一款负载均衡软件;单纯从效率上来讲 HAProxy 会比 Nginx 有更出色的负载均衡速度,在并发处理上也是优于 Nginx 的。

HAProxy 支持 TCP 协议的负载均衡转发,可以对 MySQL 读进行负载均衡,对后端的 MySQL 节点进行检测和负载均衡,大家可以用 LVS+Keepalived 对 MySQL 主从做负载均衡。

HAProxy 负载均衡策略非常多:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)。

HAPorxy缺点:

(1)不支持POP/SMTP协议
(2) 不支持SPDY协议
(3) 不支持HTTP cache功能。现在不少开源的lb项目,都或多或少具备HTTP cache功能。
(4)重载配置的功能需要重启进程,虽然也是soft restart,但没有Nginx的reaload更为平滑和友好。
(5)多进程模式支持不够好

发布了102 篇原创文章 · 获赞 21 · 访问量 5333

猜你喜欢

转载自blog.csdn.net/ranrancc_/article/details/102797054