HaProxy安装配置和图灵配置

Posted hguisu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HaProxy安装配置和图灵配置相关的知识,希望对你有一定的参考价值。

     HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持10G的并发。 

    HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

  其支持从4层至7层的网络交换,即覆盖所有的TCP协议。就是说,Haproxy 甚至还支持 mysql 的均衡负载。。

如果说在功能上,能以proxy反向代理方式实现 WEB均衡负载,这样的产品有很多。包括 nginx,ApacheProxy,lighttpd,Cheroke 等。 

但要明确一点的,Haproxy 并不是 Http 服务器。以上提到所有带反向代理均衡负载的产品,都清一色是 WEB 服务器。简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。而Haproxy 仅仅,而且专门是一款的用于均衡负载的应用代理。其自身并不能提供http服务。 

一.安装HaProxy


1、下载安装: 

  wget http://download.chinaunix.net/download.php?id=25784&ResourceID=12508
  如果源有问题,换wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.9.tar.gz
   tar -zxvf haproxy-1.5.14.tar.gz
   cd haproxy-1.3.15.10
  make TARGET=linux26 PREFIX=/usr/local/app/haproxy  (#将haproxy安装到/usr/local/app/haproxy)
   make install PREFIX=/usr/local/app/haproxy
  cd /usr/local/app/haproxy
可以自动启动:
#cp  haproxy.init/etc/init.d/haproxy 
#chmod 700 /etc/init.d/haproxy 
#chkconfig  --add haproxy 
#chkconfig  haproxy on

二、配置


安装完毕后,进入安装目录配置文件,默认情况下目录里是没有.cfg配置文件的,可以回到安装文件目录下将examples下的haproxy.cfg拷贝到usr/local/haproxy下。

haproxy.cfg的内容如下:

##全局配置信息###
global
        log 127.0.0.1 local3 #[error warringinfo debug]#定义haproxy 日志级别  使用syslog服务中的local0记录告警信息
#      log 127.0.0.1  local1 notice 
        #log loghost    local0 info (#日志输出配置,所有日志都记录在本机,通过local0输出  )
        maxconn 20480  #默认最大连接数 
        chroot /usr/local/app/haproxy    #chroot运行路径 
        uid 99                    #运行haproxy 用户 UID 
        gid 99                    #运行haproxy 用户组gid 
        daemon                    #以后台形式运行harpoxy 
        nbproc 1                  #设置进程数量 ,设置启动haproxy时的进程数量,可以为多个进程
        pidfile /usr/local/app/haproxy/run/haproxy.pid #haproxy 进程PID文件 
        ulimit-n 819200     #ulimit 的数量限制 
        #debug        #haproxy 调试级别,建议只在开启单进程的时候调试 
        #quiet

####默认配置选项#######

defaults 
        log    global
        mode    http            #所处理的类别。mode的语法mode {http|tcp|health},http为七层模式 tcp为4层模式 health为健康模式
        maxconn 50000      #最大连接数 
        option  httplog        #日志类别为http日志格式 
        option  httpclose     #每次请求完毕后主动关闭http通道 
        option  dontlognull  #不记录健康检查日志信息 
        option  forwardfor   #如果后端服务器需要获得客户端的真实ip,需要配置的参数,可以从http header 中获取客户端的IP 
        retries 3                 #3次连接失败就认为服务器不可用,也可以通过后面设置 
        option redispatch  #serverID 对应的服务器挂掉后,强制定向到其他健康的服务器 
        stats refresh 30    # 设置统计页面刷新时间间隔 
        option abortonclose  #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接 
        balance roundrobin    #设置默认负载均衡方式,轮询方式 
      #balance source        # 设置默认负载均衡方式,类似于nginx的ip_hash 
      #balnace leastconn    #设置默认负载均衡方式,最小连接数 
        contimeout 5000      #设置连接超时时间 
        clitimeout 50000      #设置客户端超时时间 
        srvtimeout 50000      #设置服务器超时时间 
        timeout check  2000  #设置心跳检查超时时间 
        #timeout http-request  10s  #默认http请求超时时间 
        #timeout queue          1m    #默认队列超时时间 
        #timeout connect        10s  #默认连接超时时间:设置成功连接到一台服务器的最长等待时间 不带单位的话默认为毫秒,此参数向后兼容
        #timeout client        1m    #定义客户端与haproxy连接后,数据传输完毕,不再有数据传输,即非活动连接的超时时间。
        #timeout server        1m    #定义haproxy与上游服务器非活动连接的超时时间。
        #timeout http-keep-alive10s  #默认持久连接超时时间

#########设置监控页面######
 listen  admin_status 
        bind 0.0.0.0:8181          #设置Frontend和Backend的组合体,监控组的名称,按需要自定义名称 
        mode http                #设置http的7 层模式层 
        log 127.0.0.1 local3 err  #错误日志记录 
        stats refresh 30s          #设置监控页面刷新时间:5s 
        stats uri  /haproxy-stats  # 设置监控页面的url 
        stats realm  Frank \\Frank #设置页面提示信息 
        stats auth admin:admin    #设置监控页面的用户和密码:admin,可以设置多个用户名 
        stats auth  Frank:Frank  #设置监控页面的用户和密码:Frank 
        stats hide-version        #隐藏统计页面的HAproxy版本信息 
        stats  admin if TRUE      #设置手工启动/禁用,后端服务器(haproxy-1.4.9以后版本)

########设置haproxy 错误页面#####

errorfile 403 /usr/local/app/haproxy/errorfiles/403.http
errorfile 500 /usr/local/app/haproxy/errorfiles/500.http
errorfile 502 /usr/local/app/haproxy/errorfiles/502.http
errorfile 503 /usr/local/app/haproxy/errorfiles/503.http
errorfile 504 /usr/local/app/haproxy/errorfiles/504.http

##### 设置frontend#########

frontend http_80_in 
      bind 0.0.0.0:80         #设置监听端口,即haproxy提供的web服务端口,和lvs的vip 类似 
      mode http                 # http 的7层模式 
      log global                  #应用全局的日志设置 
      option httplog           #启用http的log 
      option httpclose         #每次请求完毕后主动关闭http通道,HA-proxy不支持keep-alive模式 
      option forwardfor       #如果后端服务器需要获得客户端的真实IP需要配置此参数,将可以从HttpHeader中获得客户端IP

####acl 策略配置######
acl  frank_web hdr_reg(host)  -i ^(www.test.com.sh|news.test.com.sh)$ 
      #如果请求的域名满足正则表达式中的2个域名返回true -i 是忽略大小写 
      # acl frank_fund  hdr_dom(host)  -i fund.test.com.sh 
      #如果请求的域名满足fund.test.com.sh返回true -i是忽略大小写 
      acl frank    hdr(host) -i test.com.sh 
      #如果请求的域名满足test.com.sh返回true -i是忽略大小写 
      #acl file_req url_sub -i  killall= 
      #在请求url中包含killall=,则此控制策略返回true,否则为false 
      # acl dir_req url_dir -i allow 
      #在请求url中存在allow作为部分地址路径,则此控制策略返回true,否则返回false 
      acl missing_cl hdr_cnt(Content-length)eq 0
      #当请求的header中Content-length等于0时返回true 
      #### Manage interface #### 
      acl Frank_Manage path_dir /Frank/manage/
      acl Frank_Network src  192.168.151.189 192.168.152.0/24
      ## deny lb.html### 
      acl Frank_lb  path /lb.html

########acl策略匹配相应#############

block if Frank_lb 
      block if Frank_Manage !Frank_Network 
      #block if missing_cl 
      #当请求中header中Content-length等于0阻止请求返回403 
      #block if !file_req || dir_req 
      #block表示阻止请求,返回403错误,当前表示如果不满足策略file_req,或者满足策略dir_req,则阻止请求 
      redirect prefix http://192.168.151.249code 301 if frank 
      #当访问test.com.sh的时候,用http的301挑转到http://192.168.151.249 
      use_backend  server_web if frank_web 
      #当满足frank_web的策略时使用server_web的backend 
      #use_backend  server_blog if frank_fund 
      #当满足frank_fund的策略时使用server_blog的backend 
      default_backend server_web 
      #以上都不满足的时候使用默认server_bbs的backend

##########backend的设置#############

####################backend  server_web#########################
123456789101112 backendserver_web 
       mode http            #http的7层模式 
       balance roundrobin  #负载均衡的方式,roundrobin平均方式 
       cookie etnetchinaid insert indirectnocache domain .test.com.sh maxidle 20s maxlife 30s #允许插入serverid到cookie中,serverid后面可以定义 
#    cookie SERVERID insert indirect nocache 
#    appsession  JSESSIONID len 64 timeout 300s request-learn 
      option httpchk GET /lb.html HTTP/1.0 #心跳检测的文件 
      server 192.168.51.78 192.168.151.78:80cookie cookie78 check inter 1500 rise 3 fall 3 weight 1
      #服务器定义,cookie 1表示serverid为web1,check inter1500是检测心跳频率rise 3是3次正确认为服务器可用, 
      #fall 3是3次失败认为服务器不可用,weight代表权重 
      server 192.168.151.79 192.168.151.79:80cookie cookie79 check inter 1500 rise 3 fall 3 weight 1
      #服务器定义,cookie 1表示serverid为web2,check inter1500是检测心跳频率rise 3是3次正确认为服务器可用,  #fall 3是3次失败认为服务器不可用,weight代表权重

 

三.启动Haproxy


 
[root@node3 haproxy]# /usr/local/apphaproxy/sbin/haproxy -f /usr/local/app/haproxy/haproxy.cfg
[root@node3 app]# ps -ef |grep haproxy |grep -v grep
root      6950     1  0 19:35 ?        00:00:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
 
访问:http://192.168.1.51:8081/stats

四.测试:


由于我们把环回接口绑定127.0.0.1:8081端口到本机127.0.0.1:80端口上,
我们上次安装的httpd,绑定的是127.0.0.1:8081
http://www.cnblogs.com/super-d2/p/4134467.html
访问http://192.168.2.137:8081/可看到这个
而没配置haproxy之前,我们访问http://192.168.2.137:80/是访问不到的,因为这个端口80上没有这项服务;
如果现在我们启动haproxy的话,
再次访问:
可以通过通过haproxy我们实现了代理访问
http://192.168.2.137:80/
5.设置为服务命令
vim /etc/rc.d/init.d/haproxy
脚本如下:
#!/bin/bash  
BASE_DIR="/usr/local/haproxy"  
ARGV="$@"  
  
start()  
{  
echo "START HAPoxy SERVERS"  
$BASE_DIR/sbin/haproxy -f $BASE_DIR/haproxy.cfg  
}  
  
stop()  
{  
echo "STOP HAPoxy Listen"  
kill -TTOU $(cat $BASE_DIR/logs/haproxy.pid)  
echo "STOP HAPoxy process"  
kill -USR1 $(cat $BASE_DIR/logs/haproxy.pid)  
}  
case $ARGV in  
  
start)  
start  
ERROR=$?  
;;  
  
stop)  
stop  
ERROR=$?  
;;  
  
restart)  
stop  
start  
ERROR=$?  
;;  
  
*)  
echo "hactl.sh [start|restart|stop]"  
esac  
exit $ERROR  
chmod +x /etc/rc.d/init.d/haproxy 
启动与停止haproxy
[root@node3 ~]# service haproxy stop
STOP HAPoxy Listen
STOP HAPoxy process
[root@node3 ~]# ps -ef |grep haproxy |grep -v grep

[root@node3 ~]# service haproxy start
START HAPoxy SERVERS
[root@node3 ~]# ps -ef |grep haproxy |grep -v grep
root     11259     1  0 15:33 ?        00:00:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg

图灵配置


启动:/usr/sbin/haproxy -f /etc/haproxy/haproxy-3306.cfg

 /etc/haproxy/haproxy-3306.cfg

global  
        maxconn 4096  
        #daemon  
        chroot      /var/lib/haproxy  
        pidfile     /var/run/haproxy.pid  
        #debug  
        #quiet  
        user haproxy  
        group haproxy  
   
defaults  
        log     global  
        mode    http  
        option  httplog  
        option  dontlognull  
        log 127.0.0.1 local0  
        retries 3  
        option redispatch  
        maxconn 2000  
        #contimeout      5000  
        #clitimeout      50000  
        #srvtimeout      50000  
        timeout http-request    10s  
        timeout queue           1m  
        timeout connect         10s  
        timeout client          10m  
        timeout server          10m  
        timeout http-keep-alive 10s  
        timeout check           10s  
   
listen  admin_stats 0.0.0.0:8888  
        mode        http  
        stats uri   /dbs  
        stats realm     Global\\ statistics  
        stats auth  admin:tuling123.com
   
listen  proxy-mysql 0.0.0.0:3306  
        mode tcp  
        balance roundrobin  
        option tcplog  
        option mysql-check user haproxy #在mysql中创建无任何权限用户haproxy,且无密码  
        
           server MySQL1 127.0.0.1:23306 check weight 1 maxconn 2000
        
        option tcpka

 

=====================================================

一、简介
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
   HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
   HAProxy是免费、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点。
   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):阻止非授权协议;
       透明代理(transparent proxy):在Linux系统上允许使用客户端IP直接连入服务器
       内核TCP拼接(kernel TCP splicing):无copy方式在客户端和服务端之间转发数据以实现数G级别的数据速率;
       分层设计(layered design):分别实现套接字、TCP、HTTP处理以提供更好的健壮性、更快的处理机制及便捷的演进能力;
       快速、公平调度器(fast and fair scheduler):为某些任务指定优先级可实现理好的QoS;
       会话速率限制(session rate limiting):适用于托管环境;
   支持的平台及OS:
     x86、x86_64、Alpha、SPARC、MIPS及PARISC平台上的Linux 2.4;
     x86、x86_64、ARM (ixp425)及PPC64平台上的Linux2.6;
     UltraSPARC 2和3上的Sloaris 8/9;
     Opteron和UltraSPARC平台上的Solaris 10;
     x86平台上的FreeBSD 4.1-8;
     i386, amd64, macppc, alpha, sparc64和VAX平台上的OpenBSD 3.1-current;
   在较新版本的Linux 2.6(>=2.6.27.19)上,HAProxy还能够使用splice()系统调用在接口间无复制地转发任何数据,这甚至可以达到10Gbps的性能。 
   官方文档:http://cbonte.github.io/haproxy-dconv/configuration-1.4.html
二、性能
   HAproxy借助于OS上的集中常见的技术来实现性能的最大化
       单进程、时间驱动模型显著降低了上下文切换的开销和内存占用
       0(1)事件检查器(event checker)允许在其高并发连接中队任何连接的任何事件实现即时探测
       在任何可用的情况下,单缓存(singer buerffing)机制能以不复制任何数据的方式完成读写操作,这会节约大量的CPU时钟周期及内存带宽
       借助于Linux2.6(其实是2.6.19以上)上的splice()系统调用,HAproxy可以实现0复制转发(Zero-copy forwarding),在linux3.5及以上的OS中还可以实现零复制启动(Zero-starting)
       MRU内存分配器在固定大小的内存池中实现即时内存分配,这能够显著减少一个会话的时间
       树形存储:侧重于使用作者多年前开发的弹性二叉树,实现了以0(log(N))的低开销来保持计时器命令、保持运行队列及管理轮询及最少连接队列
       优化的HTTP首部分析:优化的首部分析过程避免了在HTTP首部分析过程中重读任何内存区域,精心的降低了昂贵的系统调用,大部时间都在用户空间完成,如时间读取、缓存聚合及文件描述符的启用和禁用等
   所有的这些细微之处的优化实现了在中等规模负载之上依然有着相当低的CPU负载,甚至在非常高的负载场景中,5%的用户空间占用率和95%的系统空间占用率也是非常普遍的现象,这意味着HAproxy集成消耗比系统消耗低了20倍以上,因此,对0S进行性能调优是非常重要的,即时用户空间的占用率提升了一倍,其CPU占用率也仅为10%,这也监视了为何7层处理对性能影响有限这一现象,由此,在高端系统上HAproxy的7层性能可轻易超过硬件负载均衡器
   可以从三个因素来评估负载均衡器的性能:会话率、会话并发能力、数据率            
三、配置HAproxy
   3.1 配置文件格式
      HAproxy的配置处理3类主要参数来源:
           最优先处理的命令行参数
           "global"配置段,用于设定全局配置参数
           prxoy相关配置端,如"defaults","listen","frontend"和"backend"等
   3.2 时间格式
       一些包含了值得参数表示时间,如超时时长。这些值一般都以毫秒为单位,但也可以使用其他的时间单位做后缀,如us(微妙,1/10000000秒),ms(毫秒,1/1000秒),s(秒),m(分钟),h(小时),d(天)
   3.3 全局配置
   “global”配置中的参数为进程级别的参数,且通常与其运行的OS有关
     进程管理及安全相关的参数
         chroot: 修改haproxy的工作目录至指定的目录,并在放弃权限之前执行chroot()操作,可以提升haproxy的安全级别,不过需要注意的是确保指定的目录为空目录且任何用户均不能有写权限
         daemon:让haproxy以守护进程的方式工作于后台,其等同于“-D”选项的功能,当然,也可以在命令行中以“-db”选项将其禁用
         gid:以指定的GID运行haproxy,建议使用专用于运行haproxy的GID,以避免因权限带来的风险
         group:同gid,不过这里为指定的组名
         uid: 已指定的UID身份运行haproxy进程
         user:同uid,但这里使用的为用户名
         log:定义全局的syslog服务器,最多可以定义两个
         log-send-hostname <string>:在syslog信息的同步添加当前主机名,可以为“string”指定的名称,也可以缺省使用当前主机名
         nbproc: 指定启动的haproxy进程个数,只能用于守护进程模式的haproxy;默认为止启动一个进程,鉴于调试困难等多方面的原因,一般只在但进程仅能打开少数文件描述符的场中中才使用多进程模式
         pidfile: pid文件的存放位置
         ulimit-n:设定每个进程所能够打开的最大文件描述符,默认情况下其会自动进行计算,因此不建议修改此选项
         node:定义当前节点的名称,用于HA场景中多haproxy进程共享同一个IP地址时
         description: 当前实例的描述信息
     性能调整有关的参数
         maxconn:设定每个haproxy进程所接受的最大并发连接数,其等同于命令行选项"-n","ulimit-n"自动计算的结果正式参照从参数设定的
         maxpipes: haproxy使用pipe完成基于内核的tcp报文重组,此选项用于设定每进程所允许使用的最大pipe个数,每个pipe会打开两个文件描述符,因此,"ulimit -n"自动计算的结果会根据需要调大此值,默认为maxcoon/4
         noepoll: 在linux系统上禁用epoll机制
         nokqueue:在BSE系统上禁用kqueue机制
         nopoll:禁用poll机制
         nosepoll: 在linux系统上禁用启发式epoll机制
         nosplice:禁止在linux套接字上使用tcp重组,这会导致更多的recv/send调用,不过,在linux2.6.25-28系列的内核上,tcp重组功能有bug存在
         spread-checks<0..50,in percent>: 在haprorxy后端有着众多服务器的场景中,在紧缺是时间间隔后统一对中服务器进行健康状况检查可能会带来意外问题,此选项用于将检查的时间间隔长度上增加或减少一定的随机时长,为当前检查检测时间的%
         tune.bufsize: 设定buffer的大小,同样的内存条件下,较小的值可以让haproxy有能力接受更多的并发连接,较大的值了可以让某些应用程序使用较大的cookie信息,默认为16384,其可以在编译时修改,不过强烈建议使用默认值
         tune.chksize: 设定检查缓冲区的大小,单位为字节,更大的值有助于在较大的页面中完成基于字符串或模式的文本查找,但也会占用更多的系统资源,不建议修改
         tune.maxaccept:设定haproxy进程内核调度运行时一次性可以接受的连接的个数,较大的值可以带来较大的吞吐量,默认为单进程模式下为100,多进程模式下为8,设定为-1可以禁止此限制,一般不建议修改
         tune.maxpollevents:设定一次系统调用可以处理的事件最大数,默认值取决于OS,其至小于200时可介于带宽,但会略微增大网络延迟,但大于200时会降低延迟,但会稍稍增加网络带宽的占用
         tune.maxrewrite:设定在首部重写或追加而预留的缓存空间,建议使用1024左右的大小,在需要更大的空间时,haproxy会自动增加其值
         tune.rcvbuf.client:设定内核套接字中客户端接收缓存区的大小,单位为字节,强烈推荐使用默认值
         tune.rcvbuf.server:设定内核套接字中服务器接收缓存区的大小,单位为字节,强烈推荐使用默认值
         tune.sndbuf.client:设定内核套接字中客户端发送缓存区的大小,单位为字节,强烈推荐使用默认值
         tune.sndbuf.server:设定内核套接字中服务器端发送缓存区的大小,单位为字节,强烈推荐使用默认值
     与调试相关的参数
         debug
         quiet
   3.4 代理
       代理相关的配置可以如下配置端中
          defaults:用于为所有其他配置段提供默认参数,这配置默认配置参数可由下一个"defaults"所重新设定
          forntend:用于定义一系列监听的套接字,这些套接字可以接受客户端请求并与子建立连接
          backend: 用于定义一系列“后端”服务器,代理将会将对应客户端的请求转发至这些服务器
          listen: 用于定义通过关联“前段”和“后端”一个完整的代理,通常只对TCP流量有用
          所有代理的名称只能使用大写字母、小写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号)。此外,ACL名称会区分大小写
四、配置文件中的关键字详解
   4.1 balance
       balance <algorithm> [<arguments>] 
       balance url_param <param> [check_post [<max_wait>]]
       定义负载均衡算法,可用于"defaults"、"listen"和"backend"中。<algorithm>用于在负载均衡场景中挑选一个server,其仅用于持久信息不可用的条件下或需要将一个连接重新派发至另一个服务器时。支持的算法有:
           roundrobin:基于权重进行轮询,在服务器的处理时间保持均匀分布时 ,这是最平衡、最公平的算法。此算法是动态的,这表示某权重可以在运行时进行调整,不过,在设计上,每个后端服务器仅能最多支持4128个连接
           static-rr:基于权重进行轮询,与roundrobin类似,但是为静态方法,在运行时调整期后端权重不会生效,不过,其在后端服务器连接数上没有限制
           leastconn:新的连接强求笨哦派发至具有最少连接数目的后端服务器,在有这较长会话的场景中推荐使用此算法,如LDAP、SQL等。其并不太适合用于较短会话的应用层协议,如HTTP,此算法是动态的,可以在运行时调整其权重
           source:将请求的源地址进行hash运算,并有后端的服务器的权重总数相处后派发至某匹配的服务器,这可以使得同一个客户端IP的请求始终被派发至某特定的服务器,不过,当服务器权重总数发生变化时,如某服务器宕机或者添加新服务器,许多的请求可能会被派发至与此前请求不同的服务器,常用于负载均衡无cooki功能的基于TCP的协议,默认为动态,不过可以使用hash-type修改此特性
           uri:对URI的左半部分(“问号”标记之前的部分)或整个URI进行hash运算,并由服务器的总权重相除后派发至某匹配的服务器;这可以使得对同一个URI的请求总是派发至某匹配的服务器,除法服务器的权重总数发生了变化,此算法常用于代理缓存或反病毒代理以提高缓存的命中率,需要注意的是,此算法仅应用于HTTP后端服务器场景,其默认为静态算法,不过可以使用hash-type修改此特性
           url_param:通过<argument>为URL指定的参数在每个HTTP GET请求中将会被索引,日过找到了指定的参数且其通过等于号“=”被赋予了一个值,那么此值将被执行hash运算并被服务器的总权重相处后派发至某匹配的服务器,此算法可以通过追踪请求中的用户标识进而确保同一个用户的ID请求被发送同一个特定的服务器,除非服务器的总权重发生了变化;如果某请求中没有出现指定的参数或其没有有效值,则使用轮询算法对其想用请求进行调度,此算法默认为静态,不过可以使用hash-type修改此特性
           har(<name>):对于每个HTTP请求,通过<name>指定的HTTP首部将会被检索,如果对于那个的首部没有出现或其没有有效值,则使用轮询算法对响应请求进行调度,其有一个可选项“use_domain_only”可以指定检索类似host类的首部时仅计算域名部分(比如通过www.wangfeng7399.com来说,仅计算wangfeng7399.com字符串的hash值)以降低hash算法的运算量,此算法默认为静态,不过可以使用hash-type修改此特性
           rdp-cookie
           rdp-cookie(name):
   4.2 bind
       bind [<address>]:<port_range>[,.....]
       bind [<address>]:<port_range>[,.....] interface <interface>
       从指令仅能用于frontend和listen区段,用于定义一个或多个监听的套接字
       <address>:可选项,其可以为主机名、IPV4地址、IPV6地址或*:省略此选项、将其指定为*或0.0.0.0时,将监听当前系统的所有IPv4地址
       <port_range>:可以是一个特定的TCP端口,也可是一个端口范围(如6604-6610),代理服务器将通过制定的端口来接受客户端请求,需要注意的是,每组监听的套接字<address:prot>在同一个实例上只能使用一次,而且小于1024的端口需要有特定的权限的用户才能使用,这可能需要通过uid参数来定义
       <interface>:指定物理接口的名称,仅能在linux系统上使用,其不能使用接口别名,二进程使用物理端口名称,而且只有管理有权限指定绑定的物理端口
   4.3 mode
       mode{ tcp|http|health }
       设定实例的运行模式或协议,当实现内容交换时,前段和后端必须工作与统一中模式(一般说来时tcp模式),否则将无法启动实例
       tcp: 实例运行于纯tcp模式,在客户端和服务器端之间将建立一个全双工的连接,且不会对7层报文做任何类型的检查,此为默认模式,通常用于SSL、SSH、SMTP等应用
       http:实例运行于http模式,客户端请求在转发至后端服务器之前将被深度分析,所有不与RFC模式兼容的请求都会被拒绝
       health:实例运行于health模式,其对入站请求仅响应“OK”信息并关闭连接,且不会记录任何日志信息 ,此模式将用于相应外部组件的监控状态检测请求;目前来讲,此模式已经废弃,因为tcp或http模式中的monitor关键字可完成此类功能
   4.4 hash-type
       hash-type <method>
       定义用户将hash码映射至后端服务器的方法:其不能用于forntend区段,可用方法有map-based和consistent,在大多数场景下推荐使用默认的map-based方法
        map-based:hash表示一个包含了所有在线服务器的静态数组。其hash值将会非常平滑,会将权重考虑在列,但其为静态方法,对在线服务器的权重进行调整将不会生效,这意味着不支持慢速启动。此外,挑选服务器是根据其在属组中的位置运行的,因此,当一台服务器宕机或添加了一台新的服务器时,大多数连接将会倍重新派发至一个与此前不同的服务器上,对于缓存服务器的工作场景来说,此方法不甚适应
       consistent:hash表一个由个服务器填充而成的树状结构;基于hash间在hash树种查找相应的服务器时,最近的服务器将被选中,此方法是动态的,支持在运行时修改服务器的权重,因此兼容慢启动的特性,添加一个新的服务器时,仅会对一部分请求产生影响,因此,尤其适用于后端服务器为cache的场景 。不过,此算法不甚平滑,派发至各服务器的请求未必能达到理想的均衡效果,因此,可能需要不时的调整上游服务器的权重以获得更好的均衡性
   4.5  log
       log global
       log<address><facility>[<level>[<minlevel>]]
       为每个实例启用事件和流量日志,因此可用于所有区段。每个实例最多可硬定义两个log参数,不过,如果使用了“log global”且“global”端定义了两个log参数时,多余的log参数将会倍忽略
       global:当前实例的日志系统参数同“global”段中的定义时,将使用此格式,每个实例仅能定义一个“log global”语句,且其没有额外的参数
       <address>:定义日志发往的位置,其格式之一可以为<ipv4_address:port>,其中prot为udp协议,默

以上是关于HaProxy安装配置和图灵配置的主要内容,如果未能解决你的问题,请参考以下文章

haproxy安装配置及haproxy+keepalived配置

Haproxy的安装和配置

centos7下haproxy1.7的使用与配置

Keepalive+Haproxy高可用集群安装与配置

mysql 主从配置和集群负载均衡

haproxy反向代理功能配置