HAProxy

1、HAProxy概述mysql

 1.haproxy简介web

      HAProxy主要提供两个功能:http协议反向代理(不提供缓存功能)、基于tcp层的负载均衡(httpsmysql协议)。适用于须要会话保持或七层处理的且负载特别大的站点。可支持数以万计的并发链接算法

      代理做用:web缓存(加速)、反向代理、内容路由(根据流量及内容类型等将请求转发至特定服务器)、转码器;sql

      HAProxy基于一种事件驱动(event-driven)、单一进程模型ebtree弹性二叉树机制。后端

      多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,不多能处理数千并发链接。事件驱动模型有更好的资源和时间管理的用户端(User-Space) 实现全部这些任务,因此并发响应能特别大在多核系统上此模型一般扩展性较差数组

  2.性能优点缓存

      HAProxy借助于OS上几种常见的技术来实现性能的最大化。服务器

          单进程、事件驱动模型显著下降了上下文切换的开销及内存占用。session

          O(1)事件检查器(eventchecker)容许其在高并发链接中对任何链接的任何事件实现即时探测。多线程

          在任何可用的状况下,单缓冲(singlebuffering)机制能以不复制任何数据的方式完成读写操做,这会节约大量的CPU时钟周期及内存带宽;

          借助于Linux 2.6 (>=2.6.27.19)上的splice()系统调用,HAProxy能够实现零复制转发(Zero-copy forwarding),在Linux3.5及以上的OS中还能够实现零复制启动(zero-starting);

           内存分配器在固定大小的内存池中可实现即时内存分配,这可以显著减小建立一个会话的时长;

           树型存储:侧重于使用做者多年前开发的弹性二叉树,实现了以O(log(N))的低开销来保持计时器命令、保持运行队列命令及管理轮询及最少链接队列;

          优化的HTTP首部分析:优化的首部分析功能避免了在HTTP首部分析过程当中重读任何内存区域;

          精心地下降了昂贵的系统调用,大部分工做都在用户空间完成,如时间读取、缓冲聚合及文件描述符的启用和禁用等;

  3.HAProxy目前主要版本

     1.4版本——提供较好的弹性:衍生于1.2版本,并提供了额外的新特性,其中大多数是期待已久的。

  客户端侧的长链接(client-side keep-alive)

  TCP加速(TCP speedups)

  响应池(response buffering)

  RDP协议

  基于源的粘性(source-based stickiness)

  更好的统计数据接口(a much better stats interfaces)

  更详细的健康状态检测机制(more verbose health checks)

  基于流量的健康评估机制(traffic-based health)

  支持HTTP认证

  服务器管理命令行接口(server management from the CLI)

  基于ACL的持久性(ACL-based persistence)

  日志分析器

     1.3版本——内容交换和超强负载:衍生于1.2版本,并提供了额外的新特性。

  内容交换(content switching):基于任何请求标准挑选服务器池;

  ACL:编写内容交换规则;

  负载均衡算法(load-balancing algorithms):更多的算法支持;

  内容探测(content inspection):阻止非受权协议;

  透明代理(transparentproxy):在Linux系统上容许使用客户端IP直接连入服务器;

  内核TCP拼接(kernel TCPsplicing):无copy方式在客户端和服务端之间转发数据以实现数G级别的数据速率;

  分层设计(layereddesign):分别实现套接字、TCP、HTTP处理以提供更好的健壮性、更快的处理机制及便捷的演进能力;

  快速、公平调度器(fast and fairscheduler):为某些任务指定优先级可实现理好的QoS;

  会话速率限制(session rate limiting):适用于托管环境;

  注意:

      1)1.11.21.3pollepoll机制对性能影响

          1.1l版本默认使用的polling系统为select(),其处理的文件数达数千个时性能便会急剧降低。

          1.2和1.3版本默认的为poll(),在有些操做系统上可会也会有性能方面的问题,但在Solaris上表现至关不错。

          HAProxy1.3在Linux 2.6及打了epoll补丁的Linux2.4上默认使用epoll,在FreeBSD上使用kqueue,这两种机制在任何负载上都能提供恒定的性能表现。

     2) 高性能选型方案

Linux 2.6.32及以后版本上运行HAProxy 1.4;

打了epoll补丁的Linux2.4上运行HAProxy 1.4;

FreeBSD上运行HAProxy1.4;

Solaris10上运行HAProxy 1.4;

     3)splice()调用机制

            在较新版本的Linux2.6(>=2.6.27.19)上,HAProxy还可以使用splice()系统调用在接口间无复制地转发任何数据,甚至能够达到10Gbps的性能。

 4.HAProxy 安装配置详解

   代理服务器程序包的安装   yum install haproxy -y

   配置文件的所在位置 /etc/haproxy/haproxy.cfg

 4-1配置文件的格式

   "global"配置段,用于设定全局配置参数

 该配置段中的参数为进程级别的参数,且一般与其运行的os相关

 wKiom1dFNxzzTGW1AAEpaD8MExY346.jpg

wKioL1dFOJPQQ7Z0AAH9yvDM5sg105.jpg

5 HAProxy代理相关的参数

5-1 balance

  定义负载均衡算法,可用于“defaults"、"listen" 和"backend"配置段

  可用算法以下

wKioL1dFOoPhmSQsAALvXIGK6ws518.jpg

  注意:

      (1)当使用uri算法时,第一次请求一个URL分发到一个主机,则以后再次请求相同URL则使用一台主机响应。当第一次请求以后,若响应该请求的主机服务出现故障,则haproxy或将其调度到其余主机,此主机修复后再次调度回来

      (2)URI:统一资源标识符;格式以下:

    <SCHEME>://<USER>:<PASSWORD>@<HOST>:<PORT>/<PATH>;<PARAMS>?<QUERY>#<FRAG>

    方案://用户:密码@主机:端口/路径;参数(键值数据、能够多个参数字段)?查询语句#片断显示

 2.hash-type

        格式:hash-type <method>

         定义用于将hash码映射至后端服务器的方法;不能用于frontend区段;可用方法有map-based和consistent

  说明:

      (1) map-based:hash表是一个包含了全部在线服务器的静态数组。其hash值将会很是平滑,会将权重考虑在列,但其为静态方法,对在线服务器的权重进行调整将不会生效,这意味着其不支持慢速启动。此外,挑选服务器是根据其在数组中的位置进行的,所以,当一台服务器宕机或添加了一台新的服务器时,大多数链接将会被从新派发至一个与此前不一样的服务器上,对于缓存服务器的工做场景来讲,此方法不甚适用。

      (2) consistent:hash表是一个由各服务器填充而成的树状结构;基于hash键在hash树中查找相应的服务器时,最近的服务器将被选中。此方法是动态的,支持在运行时修改服务器权重,所以兼容慢速启动的特性。添加一个新的服务器时,仅会对一小部分请求产生影响,所以,尤为适用于后端服务器为cache的场景。不过,此算法不甚平滑,派发至各服务器的请求未必能达到理想的均衡效果,所以,可能须要不时的调整服务器的权重以得到更好的均衡性。


5-2

HAProxy 统计接口启用相关的参数;

    stats enable

          启用统计页;基于默认参数启用统计页;

     stats url<prefix>         配置时候填写  stats uri /  改变访问地址

           统计页的访问uri前缀,一般要加上?stats;

     stats realm <realm>

           设定认证时使用realm;

     stats auth 

            认证的帐号和密码;可使用屡次;

     stats refresh         3s

             定义测试页面刷新时间

     stats admin {if \unless}  <cond>                  stats admin if ture 

             在指定的条件下启用admin功能

示例配置以下所示;

状态页面,要求认证而后登录

listen stats *:9001

    stats enable

    stats uri /haproxyadmin?stats   状态页面的配置

    stats realm HAProxy\ Statistics    帐户密码的配置方法

    stats auth admin:admin

    stats admin if true

wKiom1dFQ6Lis8S6AAFvKGb1kOI013.jpg

wKiom1dFQ_mRcek1AAfA54wpehU730.jpg还要继续努力,坚持。