• haproxy做TCP层的负载均衡


    最新项目中发现,大量游戏玩家访问登录服务器时出现延迟,导致玩家无法登录,愿意可能是登录服务器性能达到极限。

    所以目前想通过proxy的方式访问登录服务器集群,避免登录延迟。

    1.下载haproxy最新版本

    http://www.haproxy.org/download/1.5/src/haproxy-1.5.12.tar.gz

    2.安装haproxy软件

       tar zxvf haproxy-1.5.12.tar.gz

       cd haproxy-1.5.12

      uname -a    //查看Linux内核版本, TARGET是内核版本,2.6就写作26

      make TARGET=linux26 PREFIX=/usr/local/haproxy

      make install PREFIX=/usr/local/haproxy

    3.配置haproxy

    mkdir /etc/haproxy/conf

    vim /etc/haproxy/conf/haproxy.cfg

     

    [cpp] view plain copy
     
    1. <span style="color:#505050;">###########全局配置#########  
    2. global  
    3. chroot /usr/local/haproxy  
    4. daemon  
    5. nbproc 1  
    6. group nobody  
    7. user nobody  
    8. pidfile /opt/haproxy/logs/haproxy.pid  
    9. ulimit-n 65536  
    10. #spread-checks 5m   
    11. #stats timeout 5m  
    12. #stats maxconn 100  
    13.   
    14. ########默认配置############  
    15. defaults  
    16. mode tcp               #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK  
    17. retries 3              #两次连接失败就认为是服务器不可用,也可以通过后面设置  
    18. option redispatch      #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器  
    19. option abortonclose    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接  
    20. maxconn 32000          #默认的最大连接数  
    21. timeout connect 5000ms #连接超时  
    22. timeout client 30000ms #客户端超时  
    23. timeout server 30000ms #服务器超时  
    24. #timeout check 2000    #心跳检测超时  
    25. log 127.0.0.1 local0 err #[err warning info debug]  
    26.    
    27. ########test1配置#################  
    28. listen test1  
    29. bind 0.0.0.0:8008  
    30. mode tcp  
    31. balance roundrobin  
    32. server s1 127.0.0.1:8010 weight 1 maxconn 10000 check inter 10s  
    33. server s2 127.0.0.1:8011 weight 1 maxconn 10000 check inter 10s  
    34. server s3 127.0.0.1:8012 weight 1 maxconn 10000 check inter 10s  
    35.    
    36. ########test2配置#################  
    37. listen test2  
    38. bind 0.0.0.0:8007  
    39. mode tcp  
    40. balance roundrobin  
    41. server s1 192.168.1.88:8010 weight 1 maxconn 10000 check inter 10s  
    42. server s2 192.168.1.88:8011 weight 1 maxconn 10000 check inter 10s  
    43. ########统计页面配置########  
    44. listen admin_stats  
    45. bind 0.0.0.0:8099 #监听端口  
    46. mode http         #http的7层模式  
    47. option httplog    #采用http日志格式  
    48. #log 127.0.0.1 local0 err  
    49. maxconn 10  
    50. stats refresh 30s #统计页面自动刷新时间  
    51. stats uri /stats  #</span><span style="color:#ff0000;"><strong>统计页面url:port/stats</strong></span><pre name="code" class="cpp" style="color: rgb(80, 80, 80); font-size: 14px; line-height: 28px;"><span style="font-family: 宋体, 'Arial Narrow', arial, serif;">stats realm XingCloud Haproxy #统计页面密码框上提示文本</span>  

    stats auth admin:admin #统计页面用户名和密码设置stats hide-version #隐藏统计页面上HAProxy的版本信息

    
    
    
    

    4.配置启动脚本

    vim /usr/local/haproxy/sbin/haproxy.sh

    #!/bin/sh
    cd /usr/local/haproxy/sbin
    /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/conf/haproxy.cfg &

    5.查看启动进程

    ps -ef |grep haproxy  或者netstat -ntpl |grep haproxy  来检查haproxy是否启动成功!

    ###############################################################

    配置详解

    [cpp] view plain copy
     
    1. ####################全局配置信息########################   
    2. #######参数是进程级的,通常和操作系统(OS)相关#########   
    3. global   
    4.        maxconn 20480                   #默认最大连接数   
    5.        log 127.0.0.1 local3            #[err warning info debug]   
    6.        chroot /var/haproxy             #chroot运行的路径   
    7.        uid 99                          #所属运行的用户uid   
    8.        gid 99                          #所属运行的用户组   
    9.        daemon                          #以后台形式运行haproxy   
    10.        nbproc 1                        #进程数量(可以设置多个进程提高性能)   
    11.        pidfile /var/run/haproxy.pid    #haproxy的pid存放路径,启动进程的用户必须有权限访问此文件   
    12.        ulimit-n 65535                  #ulimit的数量限制   
    13.    
    14.    
    15. #####################默认的全局设置######################   
    16. ##这些参数可以被利用配置到frontend,backend,listen组件##   
    17. defaults   
    18.        log global   
    19.        mode http                       #所处理的类别 (#7层 http;4层tcp  )   
    20.        maxconn 20480                   #最大连接数   
    21.        option httplog                  #日志类别http日志格式   
    22.        option httpclose                #每次请求完毕后主动关闭http通道   
    23.        option dontlognull              #不记录健康检查的日志信息   
    24.        option forwardfor               #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip    
    25.        option redispatch               #serverId对应的服务器挂掉后,强制定向到其他健康的服务器    
    26.        option abortonclose             #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接   
    27.        stats refresh 30                #统计页面刷新间隔   
    28.        retries 3                       #3次连接失败就认为服务不可用,也可以通过后面设置   
    29.        balance roundrobin              #默认的负载均衡的方式,轮询方式   
    30.       #balance source                  #默认的负载均衡的方式,类似nginx的ip_hash   
    31.       #balance leastconn               #默认的负载均衡的方式,最小连接   
    32.        contimeout 5000                 #连接超时   
    33.        clitimeout 50000                #客户端超时   
    34.        srvtimeout 50000                #服务器超时   
    35.        timeout check 2000              #心跳检测超时   
    36.    
    37. ####################监控页面的设置#######################   
    38. listen admin_status                    #Frontend和Backend的组合体,监控组的名称,按需自定义名称   
    39.         bind 0.0.0.0:65532             #监听端口   
    40.         mode http                      #http的7层模式   
    41.         log 127.0.0.1 local3 err       #错误日志记录   
    42.         stats refresh 5s               #每隔5秒自动刷新监控页面   
    43.         stats uri /admin?stats         #监控页面的url   
    44.         stats realm itnihao itnihao   #监控页面的提示信息   
    45.         stats auth admin:admin         #监控页面的用户和密码admin,可以设置多个用户名   
    46.         stats auth admin1:admin1       #监控页面的用户和密码admin1   
    47.         stats hide-version             #隐藏统计页面上的HAproxy版本信息    
    48.         stats admin if TRUE            #手工启用/禁用,后端服务器(haproxy-1.4.9以后版本)   
    49.    
    50.    
    51.        errorfile 403 /etc/haproxy/errorfiles/403.http   
    52.        errorfile 500 /etc/haproxy/errorfiles/500.http   
    53.        errorfile 502 /etc/haproxy/errorfiles/502.http   
    54.        errorfile 503 /etc/haproxy/errorfiles/503.http   
    55.        errorfile 504 /etc/haproxy/errorfiles/504.http   
    56.    
    57.        #################HAProxy的日志记录内容设置###################   
    58.        capture request  header Host           len 40   
    59.        capture request  header Content-Length len 10   
    60.        capture request  header Referer        len 200   
    61.        capture response header Server         len 40   
    62.        capture response header Content-Length len 10   
    63.        capture response header Cache-Control  len 8   
    64.        
    65. #######################网站监测listen配置#####################   
    66. ###########此用法主要是监控haproxy后端服务器的监控状态############   
    67. listen site_status   
    68.        bind 0.0.0.0:1081                    #监听端口   
    69.        mode http                            #http的7层模式   
    70.        log 127.0.0.1 local3 err             #[err warning info debug]   
    71.        monitor-uri /site_status             #网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回503   
    72.        acl site_dead nbsrv(server_web) lt 2 #定义网站down时的策略当挂在负载均衡上的指定backend的中有效机器数小于1台时返回true   
    73.        acl site_dead nbsrv(server_blog) lt 2   
    74.        acl site_dead nbsrv(server_bbs)  lt 2    
    75.        monitor fail if site_dead            #当满足策略的时候返回503,网上文档说的是500,实际测试为503   
    76.        monitor-net 192.168.16.2/32          #来自192.168.16.2的日志信息不会被记录和转发   
    77.        monitor-net 192.168.16.3/32   
    78.    
    79. ########frontend配置############   
    80. #####注意,frontend配置里面可以定义多个acl进行匹配操作########   
    81. frontend http_80_in   
    82.        bind 0.0.0.0:80      #监听端口,即haproxy提供web服务的端口,和lvs的vip端口类似   
    83.        mode http            #http的7层模式   
    84.        log global           #应用全局的日志配置   
    85.        option httplog       #启用http的log   
    86.        option httpclose     #每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式   
    87.        option forwardfor    #如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP   
    88.        ########acl策略配置#############   
    89.        acl itnihao_web hdr_reg(host) -i ^(www.itnihao.cn|ww1.itnihao.cn)$      
    90.        #如果请求的域名满足正则表达式中的2个域名返回true -i是忽略大小写   
    91.        acl itnihao_blog hdr_dom(host) -i blog.itnihao.cn   
    92.        #如果请求的域名满足www.itnihao.cn返回true -i是忽略大小写   
    93.        #acl itnihao    hdr(host) -i itnihao.cn   
    94.        #如果请求的域名满足itnihao.cn返回true -i是忽略大小写   
    95.        #acl file_req url_sub -i  killall=   
    96.        #在请求url中包含killall=,则此控制策略返回true,否则为false   
    97.        #acl dir_req url_dir -i allow   
    98.        #在请求url中存在allow作为部分地址路径,则此控制策略返回true,否则返回false   
    99.        #acl missing_cl hdr_cnt(Content-length) eq 0   
    100.        #当请求的header中Content-length等于0时返回true   
    101.    
    102.        ########acl策略匹配相应#############   
    103.        #block if missing_cl   
    104.        #当请求中header中Content-length等于0阻止请求返回403   
    105.        #block if !file_req || dir_req   
    106.        #block表示阻止请求,返回403错误,当前表示如果不满足策略file_req,或者满足策略dir_req,则阻止请求   
    107.        use_backend  server_web  if itnihao_web   
    108.        #当满足itnihao_web的策略时使用server_web的backend   
    109.        use_backend  server_blog if itnihao_blog   
    110.        #当满足itnihao_blog的策略时使用server_blog的backend   
    111.        #redirect prefix http://blog.itniaho.cn code 301 if itnihao   
    112.        #当访问itnihao.cn的时候,用http的301挑转到http://192.168.16.3   
    113.        default_backend server_bbs   
    114.        #以上都不满足的时候使用默认server_bbs的backend   
    115.    
    116.    
    117.    
    118.    
    119. ##########backend的设置##############   
    120. #下面我将设置三组服务器 server_web,server_blog,server_bbs  
    121. ###########################backend server_web#############################   
    122. backend server_web   
    123.        mode http            #http的7层模式   
    124.        balance roundrobin   #负载均衡的方式,roundrobin平均方式   
    125.        cookie SERVERID      #允许插入serverid到cookie中,serverid后面可以定义   
    126.        option httpchk GET /index.html #心跳检测的文件   
    127.        server web1 192.168.16.2:80 cookie web1 check inter 1500 rise 3 fall 3 weight 1    
    128.        #服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,   
    129.        #fall 3是3次失败认为服务器不可用,weight代表权重   
    130.        server web2 192.168.16.3:80 cookie web2 check inter 1500 rise 3 fall 3 weight 2   
    131.        #服务器定义,cookie 1表示serverid为web2,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,   
    132.        #fall 3是3次失败认为服务器不可用,weight代表权重   
    133.    
    134. ###################################backend server_blog###############################################   
    135. backend server_blog   
    136.        mode http            #http的7层模式   
    137.        balance roundrobin   #负载均衡的方式,roundrobin平均方式   
    138.        cookie SERVERID      #允许插入serverid到cookie中,serverid后面可以定义   
    139.        option httpchk GET /index.html #心跳检测的文件   
    140.          
    141.        #服务器定义:   
    142.        #cookie 1表示serverid为web1,   
    143.        #check inter 1500是检测心跳频率  
    144.        #rise 3是3次正确认为服务器可用,  
    145.        #fall 3是3次失败认为服务器不可用,  
    146.        #weight代表权重   
    147.        server blog1 192.168.16.2:80 cookie blog1 check inter 1500 rise 3 fall 3 weight 1    
    148.        server blog2 192.168.16.3:80 cookie blog2 check inter 1500 rise 3 fall 3 weight 2   
    149.   
    150.    
    151. ###################################backend server_bbs###############################################   
    152. backend server_bbs   
    153.        mode http            #http的7层模式   
    154.        balance roundrobin   #负载均衡的方式,roundrobin平均方式   
    155.        cookie SERVERID      #允许插入serverid到cookie中,serverid后面可以定义   
    156.        option httpchk GET /index.html #心跳检测的文件   
    157.          
    158.        #服务器定义,  
    159.        #cookie 1表示serverid为web1,  
    160.        #check inter 1500是检测心跳频率  
    161.        #rise 3是3次正确认为服务器可用,  
    162.        #fall 3是3次失败认为服务器不可用,  
    163.        #weight代表权重  
    164.        server bbs1 192.168.16.2:80 cookie bbs1 check inter 1500 rise 3 fall 3 weight 1  
    165.        server bbs2 192.168.16.3:80 cookie bbs2 check inter 1500 rise 3 fall 3 weight 2  
    166.          



    配置例子1

    [cpp] view plain copy
     
    1. ###########全局配置#########  
    2. global  
    3.         daemon  
    4.         nbproc 1  
    5.         pidfile /var/run/haproxy.pid  
    6.   
    7.   
    8. ########默认配置############  
    9. defaults  
    10.         mode http               #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK  
    11.         retries 2               #两次连接失败就认为是服务器不可用,也可以通过后面设置  
    12.         option redispatch       #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器  
    13.         option abortonclose     #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接  
    14.         maxconn 4096            #默认的最大连接数  
    15.         timeout connect 5000ms  #连接超时  
    16.         timeout client 30000ms  #客户端超时  
    17.         timeout server 30000ms  #服务器超时  
    18.         #timeout check 2000      #=心跳检测超时  
    19.         log 127.0.0.1 local0 err #[err warning info debug]  
    20.   
    21.   
    22. ########统计页面配置########  
    23. listen admin_stats  
    24.         bind 0.0.0.0:1080               #监听端口  
    25.         mode http                       #http的7层模式  
    26.         option httplog                  #采用http日志格式  
    27.         #log 127.0.0.1 local0 err  
    28.         maxconn 10  
    29.         stats refresh 30s               #统计页面自动刷新时间  
    30.         stats uri /stats                #统计页面url  
    31.         stats realm XingCloud Haproxy  #统计页面密码框上提示文本  
    32.         stats auth admin:admin          #统计页面用户名和密码设置  
    33.         stats hide-version              #隐藏统计页面上HAProxy的版本信息  
    34.   
    35.   
    36. ########test1配置#################  
    37. listen test1  
    38.         bind 0.0.0.0:90  
    39.         mode tcp  
    40.         #maxconn 4086  
    41.         #log 127.0.0.1 local0 debug  
    42.         server s1 10.18.138.201:80  
    43.         server s2 10.18.102.190:80  
    44.         server s3 10.18.102.189:80  
    45.         server s4 10.18.102.188:80  
    46.         server s5 10.18.102.187:80  
    47. ########frontend配置##############  
    48.   
    49.   
    50. ########test2配置#################  
    51. listen test2  
    52.         bind 0.0.0.0:91  
    53.         mode tcp  
    54.         #maxconn 4086  
    55.         #log 127.0.0.1 local0 debug  
    56.         server s1 10.18.138.130:80      weight 1  
    57.         server s2 10.18.138.201:8080    weight 6  
    58. ########frontend配置##############  



    配置例子2

    [cpp] view plain copy
     
    1. global  
    2.        maxconn 51200 #限制单个进程的最大连接数  
    3.         chroot /usr/local/haproxy  
    4.        uid 99 #所属运行用户,默认99为nobody  
    5.        gid 99 #所属运行用户组,默认99为nobody  
    6.        daemon #让进程作为守护进程在后台运行  
    7.         quiet  
    8.        nbproc 2 #指定作为守护进程运行时的进程数,推荐设置为与CPU核心数相同  
    9.         pidfile //usr/local/haproxy/haproxy.pid  
    10.   
    11. defaults  
    12.   
    13.        mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK  
    14.        #retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置  
    15.         option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器  
    16.         option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接  
    17.         timeout connect 5000ms #连接超时  
    18.         timeout client 30000ms #客户端超时  
    19.         timeout server 30000ms #服务器超时  
    20.         #timeout check 2000 #=心跳检测超时  
    21.         log 127.0.0.1 local0 err #[err warning info debug]  
    22.        balance roundrobin                     #负载均衡算法  
    23.         #option  httplog                        #日志类别,采用httplog  
    24.        #option  httpclose   #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现  
    25.         #option  dontlognull  
    26.        #option  forwardfor  #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip  
    27.   
    28.   
    29. listen www.123p6.cn 0.0.0.0:80 #运行的端口及主机名  
    30.        mode http #使用http的7层模式  
    31.        balance roundrobin #设置服务器负载分配算法  
    32.        option httpclose  
    33.       option forwardfor  
    34.       option httpchk GET /keepalive.html #健康检测页面  
    35.        server webapp1 192.168.1.101:80 weight 1 check inter 2000 rise 2 fall 3  
    36.       server webapp2 192.168.1.102:80 weight 1 check inter 2000 rise 2 fall 3  
    37.       # weight - 调节服务器的负重   
    38.        # check - 允许对该服务器进行健康检查   
    39.        # inter - 设置连续的两次健康检查之间的时间,单位为毫秒(ms),默认值 2000(ms)   
    40.       # rise - 指定多少次连续成功的健康检查后,即可认定该服务器处于可操作状态,默认值 2   
    41.       # fall - 指定多少次不成功的健康检查后,认为服务器为当掉状态,默认值 3   
    42.       # maxconn - 指定可被发送到该服务器的最大并发连接数   
    43.   
    44. listen localhost 0.0.0.0:8888 #监控页面的端口  
    45.        mode http  
    46.       transparent  
    47.       stats refresh 30s #统计页面自动刷新时间  
    48.        stats uri /haproxy-stats #监控页面的访问地址  
    49.        stats realm Haproxy  statistic #统计页面密码框上提示文本  
    50.        stats auth haproxyadmin:haproxypass #统计页面用户名和密码设置  
    51.        stats hide-version #隐藏统计页面上HAProxy的版本信息  



    参考:

    http://lanlian.blog.51cto.com/6790106/1305228

    http://itnihao.blog.51cto.com/1741976/915537

    原文: http://blog.csdn.net/zzhongcy/article/details/46443765

  • 相关阅读:
    Postgresql HStore 插件试用小结
    postgres-xl 安装与部署 【异常处理】ERROR: could not open file (null)/STDIN_***_0 for write, No such file or directory
    GPDB 5.x PSQL Quick Reference
    postgresql 数据库schema 复制
    hive 打印日志
    gp与 pg 查询进程
    jquery table 发送两次请求 解惑
    python 字符串拼接效率打脸帖
    postgresql 日期类型处理实践
    IBM Rational Rose软件下载以及全破解方法
  • 原文地址:https://www.cnblogs.com/jiftle/p/6690853.html
Copyright © 2020-2023  润新知