码迷,mamicode.com
首页 > 其他好文 > 详细

HAProxy

时间:2016-05-25 15:17:40      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:服务器   多线程   上下文   mysql   二叉树   

一、HAProxy概述

 1.haproxy简介

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

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

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

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

  2.性能优势

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

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

          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相关

 技术分享

技术分享

5 HAProxy代理相关的参数

5-1 balance

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

  可用算法如下

技术分享

  注意:

      (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

技术分享

技术分享还要继续努力,坚持。




















































HAProxy

标签:服务器   多线程   上下文   mysql   二叉树   

原文地址:http://liwenming18.blog.51cto.com/11068518/1783007

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!