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


    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
     
     
     
    另附一我自己的实例: 
      1 global
      2         log 127.0.0.1 local3 debug
      3         maxconn 50000   
      4         chroot /usr/local/haproxy
      5         uid 99   
      6         gid 99   
      7         daemon  
      8         nbproc 4
      9         pidfile /usr/local/haproxy/haproxy.pid  
     10 #######
     11 defaults
     12         log     global
     13         mode    http
     14         option  dontlognull
     15         retries 3
     16         option redispatch
     17         maxconn 50000
     18         timeout connect    5000
     19         timeout client     50000
     20         timeout server     50000
     21 ######
     22 
     23 
     24 frontend http-in
     25          bind *:80   
     26          acl push dst 10.2.1.106
     27          acl match  dst 10.2.1.107
     28          acl social dst  10.2.1.108
     29          acl promotion dst  10.2.1.109
     30          acl cms dst  10.2.1.111
     31          acl cms-web dst 10.2.1.119
     32          #acl cms dst  10.2.1.111
     33          #errorfile 404 /usr/local/haproxy/html/404.html
     34 
     35          use_backend Push if push    
     36          use_backend Match if match
     37          use_backend Social if social
     38          use_backend Promotion  if promotion 
     39          use_backend CMS  if cms
     40          
     41 backend  Push    
     42          balance roundrobin    
     43          cookie SERVERID insert nocache indirect 
     44          option httpclose    
     45          option forwardfor   header X-Forwarded-For      
     46          #如果服务器上的应用程序想记录发起请求的客户端的IP地址,需要在HAProxy上配置此选项,这样HAProxy会把客户端的IP信息发送给服务器,在HTTP请求中添加"X-Forwarded-For"字段
     47          server 10.2.1.53-PS 10.2.1.53:8094 backup check inter 5000 fall 1 rise 2 
     48          server 10.2.1.54-PS 10.2.1.54:8094  check inter 5000 fall 1 rise 2   
     49          #check inter 5000 是检测心跳频率,rise 2是2次正确认为服务器可用,fall 1是1次失败认为服务器不可用,weight代表权重
     50          timeout server     50000 
     51          
     52 backend  Match    
     53          balance roundrobin    
     54          cookie SERVERID insert nocache indirect 
     55          option httpclose    
     56          option forwardfor   header X-Forwarded-For 
     57          server 10.2.1.53-MC 10.2.1.53:8992 backup check inter 5000 fall 1 rise 2
     58          server 10.2.1.54-MC 10.2.1.54:8992  check inter 5000 fall 1 rise 2 59  
       timeout server 50000 60 61 backend Social 62 balance roundrobin 63 cookie SERVERID insert nocache indirect 64 option httpclose 65 option forwardfor header X-Forwarded-For 66 server 10.2.1.53-weibo 10.2.1.53:25100 check inter 5000 fall 1 rise 2 67 server 10.2.1.54-weibo 10.2.1.54:25100 backup check inter 5000 fall 1 rise 2 68 timeout server 50000 69 70 backend CMS 71 balance roundrobin 72 cookie SERVERID insert nocache indirect 73 option httpclose 74 option forwardfor header X-Forwarded-For 75 server 10.2.1.53-CMS 10.2.1.53:9981 check inter 5000 fall 1 rise 2 76 server 10.2.1.54-CMS 10.2.1.54:9981 backup check inter 5000 fall 1 rise 2 79 timeout server 50000 80 81 backend Promotion 82 balance roundrobin 83 cookie SERVERID insert nocache indirect 84 option httpclose 85 option forwardfor header X-Forwarded-For 86 server 10.2.1.53-PRO 10.2.1.53:8982 check inter 5000 fall 1 rise 2 87 server 10.2.1.54-PRO 10.2.1.54:8982 backup check inter 5000 fall 1 rise 2 88 timeout server 50000 89 90 91 92 ####### 93 listen localhost 10.2.1.53:18888 94 mode http 95 stats refresh 30s #统计页面的自动刷新时间 96 stats uri /haproxy-stats #统计页面的url 97 stats realm Haproxy statistic #统计页面密码框上提示的文本 98 stats auth admin:uuzz@123 #统计页面用户名和密码设置 99 stats hide-version #隐藏统计页面上HAProxy的版本信息 100 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
     
     
     
  • 相关阅读:
    安装Windows Live Writer
    CSS实现鼠标滑过表格变色
    简单实用TAB选项卡,支持单页面多个调用
    在asp:Repeater中的label中分类绑定值时用asp:Repeater的ItemDataBound方法
    在asp:Repeater中的asp:LinkButton中按Id删除对应行的数据时用asp:Repeater的ItemCommand方法
    密码请设为616位字母或数字的检查
    List 和 IList的区别
    取得前九条之后的数据
    对List(IList)集合作求和,最大(小)值操作
    验证码验证
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/3766284.html
Copyright © 2020-2023  润新知