balance roundrobin         #轮询方式

balance source               #将用户IP经过hash计算后,使同一IP地址的所有请求都发送到同一固定的后端真实服务器上,与nginx的ip_hash相同,都是为了解决haproxy与客户端session一致性的问题

balance leastconn           #最小连接

--------------------------------------------------------------------------------

10.0.3.121:8080 ----->10.0.3.122:9090

用haproxy做端口转发实现以上功能:

global
maxconn 40000
#debug #调试模式,输出启动信息到标准输出
#quiet     #安静模式,启动时无输出
user allison
group users
nbproc 1
log 127.0.0.1 local3
spread-checks 2
defaults
option srvtcpka
option clitcpka
option tcpka
 
#以下几个timeout值注意不能设置太短,否则客户端和服务端连接容易断掉,默认单位:毫秒
timeout server 300s
timeout connect 300s
timeout client 300s
timeout http-request 300s
timeout queue 300s
listen yuan 10.0.3.121:8080
mode tcp
option persist #强制将http请求发往已经down 掉的server
server mubiao 10.0.3.122:9090 weight 256

---------------------------------------------------------------------------------------------------------------------------------------

#HAProxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择部分作为配置。

#global:参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改

#defaults:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件。而如果在frontend、backend和listen部分中也配置了与defaults部分一样的参数,那么default部分参数对应的值自动被覆盖。

#frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的backend(可动态选择)。

#backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器。

#listen:Frontend和Backend的组合体

软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。

  HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮 件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式下,HAproxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy 会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求(request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。

另外,Haproxy也可用于MySQL数据库(读操作)的负载均衡。

配置:    # vi haproxy.cfg

配置内容如下:

global                                #全局设置
        log 127.0.0.1   local0 #日志输出配置,所有日志都记录在本机,通过local0输出
        #log 127.0.0.1  local1 notice
        #log loghost    local0 info

ulimit-n 82000       #设置每个进程的可用的最大文件描述符
        maxconn 4096        #最大连接数
        chroot /usr/local/haproxy    #改变当前工作目录
        uid 99                       #所属运行的用户uid
        gid 99                       #所属运行的用户组
        daemon                   #以后台形式运行ha-proxy
        nbproc 3                 #启动3个ha-proxy实例

pidfile /usr/local/haproxy/run/haproxy.pid     #pid文件位置
        debug        #调试模式,输出启动信息到标准输出
        #quiet     #安静模式,启动时无输出

defaults                       #默认设置
        log     global
        log     127.0.0.1       local3       #日志文件的输出定向
        mode    http                            #所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
        option  httplog                         #日志类别,采用httplog
        option  httpclose               #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现

option  dontlognull        #保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包
        option  forwardfor         #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip

option  redispatch     #是否允许重新分配在session 失败后
        retries 2                      #3次连接失败就认为服务器不可用,主要通过后面的check检查

maxconn 2000             #最大连接数
        balance roundrobin                     #负载均衡算法
        stats   uri     /haproxy-stats        #haproxy 监控页面的访问地址,可通过http://ip/haproxy-stats访问
        contimeout      5000                   #连接超时时间       
        clitimeout      50000                   #客户端连接超时时间
        srvtimeout      50000                 #服务器端连接超时时间

listen app-balancer 0.0.0.0:80
        mode http
      #  log 127.0.0.1 local3
        #cookie ServerID insert nocache
        cookie ServerID prefix
        cookie JSESSIONID prefix

capture request header Cookie len 200
        capture request header X-Forwarded-For len 15
        capture request header Host len 15
        capture request header Referrer len 15

appsession JSESSIONID len 52 timeout 1080000
        balance roundrobin
        option httpchk GET /ok.jsp HTTP/1.0   #健康检查
        server app_1 192.168.0.243:8080 cookie app1 minconn 100 maxconn 40960 check inter 5000 rise 2 fall 5 weight 2
        server app_2 192.168.0.242:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000 rise 2 fall 5 weight 2
        server app_4 192.168.0.245:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000 rise 2 fall 5 weight 1
        #option forwardfor except 192.168.0.159
        option forwardfor
        stats enable
        stats uri /haproxy-stat
        stats realm "test_123 monitor"
        stats auth admin:admin

重新打开配置文件haproxy.cfg,留意最下部分的均衡主机选项
listen  localhost 0.0.0.0:1080                   #运行的端口及主机名
   mode    http
   option  httpchk GET /index.htm              #用于健康检测的后端页面
   server  s1 127.0.0.1:3121 weight 3 check    #后端的主机 IP &权衡
   server  s2 127.0.0.1:3122 weight 3 check    #后端的主机 IP &权衡

在实验中,我们的的后端是 squid 分开了2个端口在同一台服务器上。
以其中一项为例:

server  s1 127.0.0.1:3121 weight 3 check

s1                     是可自己定义的服务器别名
127.0.0.1:3121   服务器的IP地址以及端口号
weight 3        所能分配到请求的高低权衡,数字越大分配到的请求数就越高
check          接受 haproxy 的定时检查,以确定后端服务器的健康情况。

如需配置虚拟主机,相当简单,紧需修改 localhost 为你虚拟主机的的域名,加到haproxy配置中, 再为其分配后端服务器的参数即可。

例:

listen  www.x1.com 0.0.0.0:1080                    #运行的端口及主机名
   mode    http
   option  httpchk GET /index.htm              #用于健康检测的后端页面
   server  s1 127.0.0.1:3121 weight 3 check  #后端的主机 IP &权衡
   server  s2 127.0.0.1:3122 weight 3 check  #后端的主机 IP &权衡

listen  www.x2.com 0.0.0.0:1080                     #运行的端口及主机名
   mode    http
   option  httpchk GET /index.htm                     #用于健康检测的后端页面
   server  s1 127.0.0.1:3121 weight 3 check       #后端的主机 IP &权衡
   server  s2 127.0.0.1:3122 weight 3 check       #后端的主机 IP &权衡

保存配置后重新加载,即可生效,刷新管理页面也可看到新的虚拟主机。

反复测试,得出其结果:
Haproxy 单独进行均衡负载的性能最强,超过了Nginx。
然而 Nginx + Haproxy 的搭配性能最弱,应该是跟通过了2层反向代理有关。
所以想用 Haproxy 替代 Nginx 所自带的均衡负载功能将会令性能打折。
但虽然如此 Haproxy 对均衡负载功能远比 Nginx 成熟,例如session粘贴,cookies 引导等都是 nginx 所没有的。
可根据需要而选择搭配。

相关启动参数介绍

#./haproxy –help //haproxy相关命令参数介绍.

haproxy  -f  <配置文件>

[-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]

[-ds] [-de] [-dp] [-db] [-m <内存限制M>] [{-sf|-st} pidlist...]

-d     前台,debug模式

-D     daemon模式启动

-q     安静模式,不输出信息

-V     详细模式

-c     对配置文件进行语法检查

-s     显示统计数据

-l     显示详细统计数据

-dk    不使用kqueue

-ds    不使用speculative epoll

-de    不使用epoll

-dp    不使用poll

-db    禁用后台模式,程序跑在前台

-sf <pidlist>      程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后

-st <pidlist>      程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后

附:一个比较简单的配置文件内容

global  
        log 127.0.0.1   local0
        maxconn 4096
        chroot /usr/local/haproxy
        uid 99
        gid 99
        daemon
        nbproc 1
        pidfile /usr/local/haproxy/haproxy.pid          
        debug #quiet
defaults  
        log     127.0.0.1       local3
        mode    http
        option httplog
        option httpclose
        option dontlognull
        option forwardfor
        option redispatch
        retries 2
        maxconn 2000
        balance roundrobin
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000 
  
listen webinfo :1080  
       mode http  
       balance roundrobin  
       option httpclose  
       option forwardfor  
server phpinfo1 192.168.18.2:10000 check weight 1 minconn 1 maxconn 3 check inter 40000  
server phpinfo2 127.0.0.1:80 check weight 1 minconn 1 maxconn 3 check inter 40000  
  
listen webmb :1081  
       mode http  
       balance roundrobin  
       option httpclose  
       option forwardfor  
server webmb1 192.168.1.91:10000 weight 1 minconn 1 maxconn 3 check inter 40000  
server webmb2 127.0.0.1:10000 weight 1 minconn 1 maxconn 3 check inter 40000  
  
listen stats :8888  
       mode http  
       transparent  
       stats uri / haproxy-stats  
       stats realm Haproxy \ statistic  
       stats auth admin:admin

------------------------------------------------------------------------------------------------

#acl 参数
acl(关键字) 定义acl(名称)  方法          -i (忽略大小写)  [匹配的路径或文件]
                          hdr_beg(host)
                          hdr_reg(host)
                          path_beg
                          path_end
 
 
 
另附一我自己的实例: 
 global
log 127.0.0.1 local3 debug
maxconn
chroot /usr/local/haproxy
uid
gid
daemon
nbproc
pidfile /usr/local/haproxy/haproxy.pid
#######
defaults
log global
mode http
option dontlognull
retries
option redispatch
maxconn
timeout connect
timeout client
timeout server
###### frontend http-in
bind *:
acl push dst 10.2.1.106
acl match dst 10.2.1.107
acl social dst 10.2.1.108
acl promotion dst 10.2.1.109
acl cms dst 10.2.1.111
acl cms-web dst 10.2.1.119
#acl cms dst 10.2.1.111
#errorfile /usr/local/haproxy/html/.html use_backend Push if push
use_backend Match if match
use_backend Social if social
use_backend Promotion if promotion
use_backend CMS if cms backend Push
balance roundrobin
cookie SERVERID insert nocache indirect
option httpclose
option forwardfor header X-Forwarded-For
#如果服务器上的应用程序想记录发起请求的客户端的IP地址,需要在HAProxy上配置此选项,这样HAProxy会把客户端的IP信息发送给服务器,在HTTP请求中添加"X-Forwarded-For"字段
server 10.2.1.53-PS 10.2.1.53: backup check inter fall rise
server 10.2.1.54-PS 10.2.1.54: check inter fall rise
#check inter 是检测心跳频率,rise 2是2次正确认为服务器可用,fall 1是1次失败认为服务器不可用,weight代表权重
timeout server backend Match
balance roundrobin
cookie SERVERID insert nocache indirect
option httpclose
option forwardfor header X-Forwarded-For
server 10.2.1.53-MC 10.2.1.53: backup check inter fall rise
server 10.2.1.54-MC 10.2.1.54: check inter fall rise
   timeout server backend Social
balance roundrobin
cookie SERVERID insert nocache indirect
option httpclose
option forwardfor header X-Forwarded-For
server 10.2.1.53-weibo 10.2.1.53: check inter fall rise
server 10.2.1.54-weibo 10.2.1.54: backup check inter fall rise
timeout server backend CMS
balance roundrobin
cookie SERVERID insert nocache indirect
option httpclose
option forwardfor header X-Forwarded-For
server 10.2.1.53-CMS 10.2.1.53: check inter fall rise
server 10.2.1.54-CMS 10.2.1.54: backup check inter fall rise
timeout server backend Promotion
balance roundrobin
cookie SERVERID insert nocache indirect
option httpclose
option forwardfor header X-Forwarded-For
server 10.2.1.53-PRO 10.2.1.53: check inter fall rise
server 10.2.1.54-PRO 10.2.1.54: backup check inter fall rise
timeout server #######
listen localhost 10.2.1.53:
mode http
stats refresh 30s #统计页面的自动刷新时间
stats uri /haproxy-stats #统计页面的url
stats realm Haproxy \ statistic #统计页面密码框上提示的文本
stats auth admin:uuzz@ #统计页面用户名和密码设置
stats hide-version #隐藏统计页面上HAProxy的版本信息
stats admin if TRUE #手工启用/禁用,后端服务器

另:

COOKIE 选项:

cookie JSESSIONID prefix :如果客户端只支持一个cookie,并且服务器上的应用程序已经对返回设置了cookie,HAProxy设置此选项可以改写应用程序设置的cookie信息,把服务器的信息添加到原cookie中去。

cookie SERVERID indirect :HAProxy会删除添加的cookie信息,避免此cookie信息发送到服务器。

cookie SERVERID rewrite :

cookie SERVERID insert :

cookie SERVERID insert nocache :

cookie SERVERID insert postonly :

cookie参数设置:  http://dngood.blog.51cto.com/446195/1098105/

 
参考资料:http://www.cnblogs.com/xiaocen/p/3721029.html
 
 
 

千万级高并发负载均衡软件haproxy配置文件详解的更多相关文章

  1. 千万级高并发负载均衡软件HAproxy

    1负载均衡产品介绍 基于硬件的负载均衡设备例如F5,Big-IP,基于软件的负载均衡产品HAproxy,LVS,nginx在这些软件产品中,又分为基于操作系统的软负载实现和基于第三方应用的软负载实现. ...

  2. Nginx/LVS/HAProxy 负载均衡软件的优缺点详解

    Nginx/LVS/HAProxy 负载均衡软件的优缺点详解   Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验 ...

  3. 总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解

    总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解 PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使 ...

  4. Nginx/LVS/HAProxy负载均衡软件的优缺点详解【转】

    转自 (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解http://www.ha97.com/5646.html PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均 ...

  5. (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解

    Nginx/LVS/HAProxy负载均衡软件的优缺点详解 PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均 ...

  6. 【高并发解决方案】8、Nginx/LVS/HAProxy负载均衡软件的优缺点详解

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  7. Nginx/LVS/HAProxy负载均衡软件的优缺点详解

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  8. Nginx/LVS/HAProxy负载均衡软件的优缺点详解(转)

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  9. Nginx/LVS/HAProxy负载均衡软件的优缺点详解(转)

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

随机推荐

  1. ng-model的用法

    参考: http://www.cnblogs.com/guanglin/p/5200097.html http://www.runoob.com/angularjs/ng-ng-cloak.html ...

  2. TextBox(只允许输入字母或者数字)——重写控件

    实现如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System ...

  3. windows任务计划程序 坑

  4. Unity3D NGUI Sprite精灵动画

    NGUI 2.6.1下载: part1 part2 NGUI 实现Sprite精灵动画很简单: 1.先制作图像集合.打开NGUI菜单下Atlas Maker,选中切好的图片,点击Add/Update按 ...

  5. httpclient httpcore jar包及源码

    HttpClient HttpCore HttpComponents jar src download httpclient home help

  6. Android RIL Architecture

    Android RIL Architecture   by Gomathi Sankar   Introduction   The Article explains about the buildin ...

  7. oracle 年龄计算 岁 月 天

    select trunc(months/12) || '岁' || trunc(mod(months, 12)) || '月' ||       trunc(sysdate - add_months( ...

  8. vs2013编写的ASP.NET网站配置在XP IIS5.1上

     1.vs创建项目时,选择.Net Framework2.0 2.配置网站属性 Step1.进入命令行,注册ASP.NET IIS cmd => cd "C:\WINDOWS\Mi ...

  9. VS2013下.Net Framework4配置FineUI4.14

    配置步骤: 工具箱:空白处右键--选项卡--浏览,选择FineUI.dll配置web.config,管道模式设置为:传统 配置web.config 在form表单下添加: <f:PageMana ...

  10. 解决php7.1的中遇到的问题

    在php7.1中部署微擎遇到问题 1.mysql_xxx函数不支持,修改install.php为mysqli的写法 2.session读取失败,不是php.ini设置的问题,应该是php7.1的bug ...