Haproxy搭建Web集群

Posted 老张学coding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Haproxy搭建Web集群相关的知识,希望对你有一定的参考价值。

一: Haproxy 概述

1.1 Haproxy 的作用

  • Haproxy是可以提供高可用,负载均衡,以及基于TCP 和HTTP 应用的代理,是免费、快速并且可靠的一种解决方案。
  • Haproxy 非常适用于并发大(并发1w 以上) web 站点。这些站点通常又需要会话保持或7层处理。
  • Haproxy的运行模式使得它可以很简单安全的整合至当前的架构中。同时可以保护web服务器不暴露到网络上。

1.2 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认证;
  • 基于命令行的管理接口;
  • 日志分析器,可对日志进行分析。

1.3 常见的web 集群调度器

目前常见的web集群调度器分为软件和硬件

  • 软件通常使用开源的LVS、 Haproxy、Nginx
    • LVS性能最好,但是搭建相对复杂;Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有Haproxy好。
  • 硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等

1.4 Haproxy应用分析

  • LVS在企业应用中抗负载能力很强,但存在不足
    • LVS不支持正则处理,不能实现动静分离
    • 对于大型网站,LVS的实施配置复杂,维护成本相对较高
  • Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件适用于负载大的web站点运行在硬件上可支持数以万计的并发连接的连接请求

1.5 Haproxy 的调度算法

HAProxy负载均衡策略非常多,常见的有如下8种:

  1. rr(Round Robin),表示轮询调度
  2. static-rr,表示根据权重
  3. LC(Least Conn),表示最少连接者先处理
  4. SH()Source Hashing),表示根据请求源IP
  5. uri,表示根据请求的URI,做cdn需使用;
  6. url param,表示根据请求的URl参数’ balance url param’ requires an URL parameter name
  7. hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
  8. rdp-cookie (name),表示根据据cookie (name)来锁定并哈希每一次TCP请求.

1.6 Nginx ,LVS ,Haproxy 各自的优点与缺点

1.6.1 Nginx 优缺点

  • Nginx的优点:
    工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构。Nginx正则规则比HAProxy更为强大和灵活。
  • Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,LVS对网络稳定性依赖比较大,稳定要求相对更高。
  • Nginx安装和配置、测试比较简单、方便,有清晰的日志用于排查和管理,LVS的配置、测试就要花比较长的时间了。
  • 正则表达式比Haproxy 强大
  • 可以承担高负载压力且稳定,一般能支撑几万次的并发量,负载度比LVS相对小些。
  • Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等。
  • Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。
  • Nginx作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,很多场景下都将其作为反向代理加速器。
  • Nginx作为静态网页和图片服务器,这方面的性能非常优秀,同时第三方模块也很多。

Nginx的缺点:

  • Nginx 7层代理仅能支持http、https和Email协议,这样就在适用范围上面小些。
  • 对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
  • 不支持Session的直接保持,需要通过ip_hash和cookie的引导来解决。

1.6.2 LVS优缺点

LVS的优点:

  • 抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生。因此负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低。
  • LVS工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案。
  • 无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。
  • 应用范围较广,因为LVS工作在4层,所以它几乎可对所有应用做负载均衡,包括http、数据库等。

LVS的缺点:

  • 软件本身不支持正则表达式处理,不能做动静分离。相对来说,Nginx/HAProxy+Keepalived则具有明显的优势。
  • 如果是网站应用比较庞大的话,LVS-DR+Keepalived实施起来就比较复杂了。相对来说,Nginx-HAProxy+Keepalived就简单多了。

1.6.3 Haproxy优缺点

HAProxy的优点:

  • HAProxy也是支持虚拟主机的。
  • HAProxy支持8种负载均衡策略。
  • HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导,同时支持通过获取指定的url来检测后端服务器的状态。
  • HAProxy跟LVS类似,本身就只是一款负载均衡软件,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
  • HAProxy支持TCP协议的负载均衡转发。

Haproxy缺点

  • 不支持POP/SMTP协议
  • 不支持HTTP cache功能。现在不少开源的lb项目,都或多或少具备HTTP cache功能。
  • 重载配置的功能需要重启进程,虽然也是soft restart,但没有Nginx的reaload更为平滑和友好。
  • 多进程模式支持不够好
  • 日志依赖于syslogd

1.7 Nginx ,LVS,Haproxy 的对比

NginxLVSHaproxy
性能一般最好稍好
转发支持 4层 ,7层转发。4层需要开启stream 模块只支持4层转发支持 4层7层
对节点的健康检查被动检查,检查功能比较差主动检查,检查功能弱于Haproxy主动检查,检查功能最强
是否支持正则支持 ,且正则表达式丰富不支持正则支持正则,但是弱于nginx
负载均衡策略一共有6种一共有 10种一共有8种
负载均衡功能应用7 层代理只能支持 http,https,mail 协议,应用面小应用面广,几乎可以为所有的应用提供负载均衡还能对mysql 进行负载均衡,应用强于nginx 但是比LVS 不足

以上是关于Haproxy搭建Web集群的主要内容,如果未能解决你的问题,请参考以下文章

Haproxy搭建Web集群

Haproxy搭建Web集群

使用Haproxy搭建web集群

Haproxy搭建web集群

Haproxy配合Nginx搭建Web集群

HAproxy搭建Web群集