haproxy做TCP层的负载均衡


haproxy做TCP层的负载均衡
置顶
2015年06月10日 17:09:09
阅读数:16347


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

所以目前想通过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
<span style="color:#505050;">###########全局配置#########  
global  
chroot /usr/local/haproxy  
daemon  
nbproc 1  
group nobody  
user nobody  
pidfile /opt/haproxy/logs/haproxy.pid  
ulimit-n 65536  
#spread-checks 5m   
#stats timeout 5m  
#stats maxconn 100  
  
########默认配置############  
defaults  
mode tcp               #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK  
retries 3              #两次连接失败就认为是服务器不可用,也可以通过后面设置  
option redispatch      #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器  
option abortonclose    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接  
maxconn 32000          #默认的最大连接数  
timeout connect 5000ms #连接超时  
timeout client 30000ms #客户端超时  
timeout server 30000ms #服务器超时  
#timeout check 2000    #心跳检测超时  
log 127.0.0.1 local0 err #[err warning info debug]  
   
########test1配置#################  
listen test1  
bind 0.0.0.0:8008  
mode tcp  
balance roundrobin  
server s1 127.0.0.1:8010 weight 1 maxconn 10000 check inter 10s  
server s2 127.0.0.1:8011 weight 1 maxconn 10000 check inter 10s  
server s3 127.0.0.1:8012 weight 1 maxconn 10000 check inter 10s  
   
########test2配置#################  
listen test2  
bind 0.0.0.0:8007  
mode tcp  
balance roundrobin  
server s1 192.168.1.88:8010 weight 1 maxconn 10000 check inter 10s  
server s2 192.168.1.88:8011 weight 1 maxconn 10000 check inter 10s  
########统计页面配置########  
listen admin_stats  
bind 0.0.0.0:8099 #监听端口  
mode http         #http的7层模式  
option httplog    #采用http日志格式  
#log 127.0.0.1 local0 err  
maxconn 10  
stats refresh 30s #统计页面自动刷新时间  
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
####################全局配置信息########################   
#######参数是进程级的,通常和操作系统(OS)相关#########   
global   
       maxconn 20480                   #默认最大连接数   
       log 127.0.0.1 local3            #[err warning info debug]   
       chroot /var/haproxy             #chroot运行的路径   
       uid 99                          #所属运行的用户uid   
       gid 99                          #所属运行的用户组   
       daemon                          #以后台形式运行haproxy   
       nbproc 1                        #进程数量(可以设置多个进程提高性能)   
       pidfile /var/run/haproxy.pid    #haproxy的pid存放路径,启动进程的用户必须有权限访问此文件   
       ulimit-n 65535                  #ulimit的数量限制   
   
   
#####################默认的全局设置######################   
##这些参数可以被利用配置到frontend,backend,listen组件##   
defaults   
       log global   
       mode http                       #所处理的类别 (#7层 http;4层tcp  )   
       maxconn 20480                   #最大连接数   
       option httplog                  #日志类别http日志格式   
       option httpclose                #每次请求完毕后主动关闭http通道   
       option dontlognull              #不记录健康检查的日志信息   
       option forwardfor               #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip    
       option redispatch               #serverId对应的服务器挂掉后,强制定向到其他健康的服务器    
       option abortonclose             #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接   
       stats refresh 30                #统计页面刷新间隔   
       retries 3                       #3次连接失败就认为服务不可用,也可以通过后面设置   
       balance roundrobin              #默认的负载均衡的方式,轮询方式   
      #balance source                  #默认的负载均衡的方式,类似nginx的ip_hash   
      #balance leastconn               #默认的负载均衡的方式,最小连接   
       contimeout 5000                 #连接超时   
       clitimeout 50000                #客户端超时   
       srvtimeout 50000                #服务器超时   
       timeout check 2000              #心跳检测超时   
   
####################监控页面的设置#######################   
listen admin_status                    #Frontend和Backend的组合体,监控组的名称,按需自定义名称   
        bind 0.0.0.0:65532             #监听端口   
        mode http                      #http的7层模式   
        log 127.0.0.1 local3 err       #错误日志记录   
        stats refresh 5s               #每隔5秒自动刷新监控页面   
        stats uri /admin?stats         #监控页面的url   
        stats realm itnihao\ itnihao   #监控页面的提示信息   
        stats auth admin:admin         #监控页面的用户和密码admin,可以设置多个用户名   
        stats auth admin1:admin1       #监控页面的用户和密码admin1   
        stats hide-version             #隐藏统计页面上的HAproxy版本信息    
        stats admin if TRUE            #手工启用/禁用,后端服务器(haproxy-1.4.9以后版本)   
   
   
       errorfile 403 /etc/haproxy/errorfiles/403.http   
       errorfile 500 /etc/haproxy/errorfiles/500.http   
       errorfile 502 /etc/haproxy/errorfiles/502.http   
       errorfile 503 /etc/haproxy/errorfiles/503.http   
       errorfile 504 /etc/haproxy/errorfiles/504.http   
   
       #################HAProxy的日志记录内容设置###################   
       capture request  header Host           len 40   
       capture request  header Content-Length len 10   
       capture request  header Referer        len 200   
       capture response header Server         len 40   
       capture response header Content-Length len 10   
       capture response header Cache-Control  len 8   
       
#######################网站监测listen配置#####################   
###########此用法主要是监控haproxy后端服务器的监控状态############   
listen site_status   
       bind 0.0.0.0:1081                    #监听端口   
       mode http                            #http的7层模式   
       log 127.0.0.1 local3 err             #[err warning info debug]   
       monitor-uri /site_status             #网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回503   
       acl site_dead nbsrv(server_web) lt 2 #定义网站down时的策略当挂在负载均衡上的指定backend的中有效机器数小于1台时返回true   
       acl site_dead nbsrv(server_blog) lt 2   
       acl site_dead nbsrv(server_bbs)  lt 2    
       monitor fail if site_dead            #当满足策略的时候返回503,网上文档说的是500,实际测试为503   
       monitor-net 192.168.16.2/32          #来自192.168.16.2的日志信息不会被记录和转发   
       monitor-net 192.168.16.3/32   
   
########frontend配置############   
#####注意,frontend配置里面可以定义多个acl进行匹配操作########   
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需要配置次参数,将可以从Http Header中获得客户端IP   
       ########acl策略配置#############   
       acl itnihao_web hdr_reg(host) -i ^(www.itnihao.cn|ww1.itnihao.cn)$      
       #如果请求的域名满足正则表达式中的2个域名返回true -i是忽略大小写   
       acl itnihao_blog hdr_dom(host) -i blog.itnihao.cn   
       #如果请求的域名满足www.itnihao.cn返回true -i是忽略大小写   
       #acl itnihao    hdr(host) -i itnihao.cn   
       #如果请求的域名满足itnihao.cn返回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   
   
       ########acl策略匹配相应#############   
       #block if missing_cl   
       #当请求中header中Content-length等于0阻止请求返回403   
       #block if !file_req || dir_req   
       #block表示阻止请求,返回403错误,当前表示如果不满足策略file_req,或者满足策略dir_req,则阻止请求   
       use_backend  server_web  if itnihao_web   
       #当满足itnihao_web的策略时使用server_web的backend   
       use_backend  server_blog if itnihao_blog   
       #当满足itnihao_blog的策略时使用server_blog的backend   
       #redirect prefix http://blog.itniaho.cn code 301 if itnihao   
       #当访问itnihao.cn的时候,用http的301挑转到http://192.168.16.3   
       default_backend server_bbs   
       #以上都不满足的时候使用默认server_bbs的backend   
   
   
   
   
##########backend的设置##############   
#下面我将设置三组服务器 server_web,server_blog,server_bbs  
###########################backend server_web#############################   
backend server_web   
       mode http            #http的7层模式   
       balance roundrobin   #负载均衡的方式,roundrobin平均方式   
       cookie SERVERID      #允许插入serverid到cookie中,serverid后面可以定义   
       option httpchk GET /index.html #心跳检测的文件   
       server web1 192.168.16.2:80 cookie web1 check inter 1500 rise 3 fall 3 weight 1    
       #服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,   
       #fall 3是3次失败认为服务器不可用,weight代表权重   
       server web2 192.168.16.3:80 cookie web2 check inter 1500 rise 3 fall 3 weight 2   
       #服务器定义,cookie 1表示serverid为web2,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,   
       #fall 3是3次失败认为服务器不可用,weight代表权重   
   
###################################backend server_blog###############################################   
backend server_blog   
       mode http            #http的7层模式   
       balance roundrobin   #负载均衡的方式,roundrobin平均方式   
       cookie SERVERID      #允许插入serverid到cookie中,serverid后面可以定义   
       option httpchk GET /index.html #心跳检测的文件   
         
       #服务器定义:   
       #cookie 1表示serverid为web1,   
       #check inter 1500是检测心跳频率  
       #rise 3是3次正确认为服务器可用,  
       #fall 3是3次失败认为服务器不可用,  
       #weight代表权重   
       server blog1 192.168.16.2:80 cookie blog1 check inter 1500 rise 3 fall 3 weight 1    
       server blog2 192.168.16.3:80 cookie blog2 check inter 1500 rise 3 fall 3 weight 2   
  
   
###################################backend server_bbs###############################################   
backend server_bbs   
       mode http            #http的7层模式   
       balance roundrobin   #负载均衡的方式,roundrobin平均方式   
       cookie SERVERID      #允许插入serverid到cookie中,serverid后面可以定义   
       option httpchk GET /index.html #心跳检测的文件   
         
       #服务器定义,  
       #cookie 1表示serverid为web1,  
       #check inter 1500是检测心跳频率  
       #rise 3是3次正确认为服务器可用,  
       #fall 3是3次失败认为服务器不可用,  
       #weight代表权重  
       server bbs1 192.168.16.2:80 cookie bbs1 check inter 1500 rise 3 fall 3 weight 1  
       server bbs2 192.168.16.3:80 cookie bbs2 check inter 1500 rise 3 fall 3 weight 2  
         


配置例子1

[cpp] view plain copy
###########全局配置#########  
global  
        daemon  
        nbproc 1  
        pidfile /var/run/haproxy.pid  
  
  
########默认配置############  
defaults  
        mode http               #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK  
        retries 2               #两次连接失败就认为是服务器不可用,也可以通过后面设置  
        option redispatch       #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器  
        option abortonclose     #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接  
        maxconn 4096            #默认的最大连接数  
        timeout connect 5000ms  #连接超时  
        timeout client 30000ms  #客户端超时  
        timeout server 30000ms  #服务器超时  
        #timeout check 2000      #=心跳检测超时  
        log 127.0.0.1 local0 err #[err warning info debug]  
  
  
########统计页面配置########  
listen admin_stats  
        bind 0.0.0.0:1080               #监听端口  
        mode http                       #http的7层模式  
        option httplog                  #采用http日志格式  
        #log 127.0.0.1 local0 err  
        maxconn 10  
        stats refresh 30s               #统计页面自动刷新时间  
        stats uri /stats                #统计页面url  
        stats realm XingCloud\ Haproxy  #统计页面密码框上提示文本  
        stats auth admin:admin          #统计页面用户名和密码设置  
        stats hide-version              #隐藏统计页面上HAProxy的版本信息  
  
  
########test1配置#################  
listen test1  
        bind 0.0.0.0:90  
        mode tcp  
        #maxconn 4086  
        #log 127.0.0.1 local0 debug  
        server s1 10.18.138.201:80  
        server s2 10.18.102.190:80  
        server s3 10.18.102.189:80  
        server s4 10.18.102.188:80  
        server s5 10.18.102.187:80  
########frontend配置##############  
  
  
########test2配置#################  
listen test2  
        bind 0.0.0.0:91  
        mode tcp  
        #maxconn 4086  
        #log 127.0.0.1 local0 debug  
        server s1 10.18.138.130:80      weight 1  
        server s2 10.18.138.201:8080    weight 6  
########frontend配置##############  




配置例子2

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


参考:

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值