千万级高并发负载均衡软件haproxy配置文件详解

时间:2022-09-21 00:22:05

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
 
千万级高并发负载均衡软件haproxy配置文件详解
 
 
另附一我自己的实例: 
 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&sol;LVS&sol;HAProxy 负载均衡软件的优缺点详解

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

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

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

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

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

  5. &lpar;总结&rpar;Nginx&sol;LVS&sol;HAProxy负载均衡软件的优缺点详解

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

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

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

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

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

  8. Nginx&sol;LVS&sol;HAProxy负载均衡软件的优缺点详解&lpar;转&rpar;

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

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

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

随机推荐

  1. react-native学习笔记--首次安装apk到小米5报错

    本文直接引用大神文档: [WINDOWS环境 React Native初识]com.android.ddmlib.InstallException: Failed to establish sessi ...

  2. hdu5714 拍照&lbrack;2016百度之星复赛C题&rsqb;

    由于船移动的速度都一样,那么对于往一个方向的船相对距离其实是不变的,我们可以把往一个方向移动的船都视作静止,并求出在哪些观测位置可以看到,很明显对于船[x,y,z],当x+z>=y-z的时候,可 ...

  3. 使用dom4j解析XML

    jar包:dom4j //使用dom4j解析返回的xml SAXReader reader = new SAXReader(); Document doc = reader.read(new Byte ...

  4. TCP协议下大数据传输IOCP乱序问题

    毕业后稀里糊涂的闭门造车了两年,自己的独立博客也写了两年,各种乱七八糟,最近准备把自己博客废了,现在来看了下这两年写的对我来说略微有点意义的文章只此一篇,转载过来以作留念. 写的很肤浅且凌乱,请见谅. ...

  5. 前端之JavaScript第二天学习&lpar;4&rpar;-JavaScript-注释

    JavaScript 注释可用于提高代码的可读性. JavaScript 注释 JavaScript 不会执行注释. 我们可以添加注释来对 JavaScript 进行解释,或者提高代码的可读性. 单行 ...

  6. 记一次Surface Pro 2还原操作

    因为要做Azure的一个case,对自己的域环境下直接进行了捕获.结果导致机器直接crash. 重启后使用本地账号登陆后发现所有Win 8 的App都无法使用,包括进入设置中还原方式也无法使用. 可以 ...

  7. Light&comma; more light - PC110701

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10110.html 原创:Ligh ...

  8. java猜数字(实验任务五)

    1.程序设计思想: 先随机获取1-100之内的数字i: 在建立让用户输入数字的对话框,然后判断猜高了.低了还是猜对了: 用循环直到用户猜对了. 2.程序流程图: 3.源代码: package 实验任务 ...

  9. Spring4 AOP详解

    Spring4 AOP详解 第一章Spring 快速入门并没有对Spring4 的 AOP 做太多的描述,是因为AOP切面编程概念不好理解.所以这章主要从三个方面详解AOP:AOP简介(了解),基于注 ...

  10. 图像识别基本算法之SURF

    图像识别.人脸识别可行的算法有很多.但是作为学习,如果能理清这个问题研究的历程及其主线,会对你深入理解当前研究最新的发展有很多帮助.本文是自己在学习过程中的笔记,大多内容来自于网络,出处请参考最后的引 ...