漂泊雪狼的博客

思考,讨论,分享C#,JavaScript,.NET,Oracle,SQL Server……技术

导航

centos之Haproxy 负载均衡学习笔记

Posted on 2016-08-13 23:36  漂泊雪狼  阅读(1022)  评论(0编辑  收藏  举报

HAProxy的特点是:
1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
10、不能做Web服务器即Cache。

源码方式安装Haproxy

#tar xzvf haproxy-1.4.17.tar.gz
#cd haproxy-1.4.17
#make TARGET=linux26
#make install

测试配置文件如下

  1 global
  2     log    127.0.0.1 local0
  3 #    log    127.0.0.1 local1
  4     maxconn    4000
  5     ulimit-n 8000
  6     uid    0
  7     gid    0
  8 #    chroot    /tmp
  9 #    nbproc    2
 10 #    daemon
 11 #    debug
 12 #    quiet
 13 
 14 listen proxy1 192.168.207.128:8000
 15     mode    http
 16 #    source    127.0.0.2:0
 17 #    log    127.0.0.1 local0
 18 #    log    127.0.0.1 local1
 19     log global
 20     #mode    tcp
 21         cookie SERVERID insert indirect
 22     balance roundrobin
 23     #dispatch 127.0.0.1:3130
 24     #dispatch 127.0.0.1:31300
 25     #dispatch 127.0.0.1:80
 26     #dispatch 127.0.0.1:22
 27     option httpchk
 28 #    server test 127.0.0.1:80 cookie cookie1 check inter 300
 29 #        server web02 192.168.0.104:80 cookie cookie2 check inter 300
 30 server  web01 127.0.0.1:80 cookie cookie1  check inter 2000 fall 3 weight 30              #定义的多个后端
 31 server  web02 192.168.0.104:80 cookie cookie2 check inter 2000 fall 3 weight 30              #定义的多个后端
 32 
 33 #    server nc 127.0.0.1:8080 cookie cookie1 check inter 300
 34 #    server tuxlocal0 10.101.23.9:80 cookie cookie1 check
 35 #    server tuxlocal1 127.0.0.1:80 cookie cookie1 check
 36 #    server tuxlocal2 127.0.0.1:80 cookie cookie2 check
 37 #    server tuxlocal3 127.0.0.1:80 cookie cookie3 check
 38 #    server tuxlocal4 127.0.0.1:80 cookie cookie4 check
 39 #    server vax 10.101.14.1:80 cookie cookie1 check
 40     #server tuxceleron 10.101.0.1:80 cookie cookie2 check
 41     #server telnet 127.0.0.1:23
 42     #server ssh 127.0.0.1:22
 43     #server local 127.0.0.1:3130 cookie cookie3 check
 44     #server ko 127.0.0.1:0 cookie cookie3 check
 45     #server local 127.0.0.1:8001 cookie cookie3 check
 46     #server local 127.0.0.1:3130
 47     #server celeron 10.101.0.1:80 cookie srv1
 48     #server celeron 10.101.0.1:31300
 49     #server local 10.101.23.9:31300
 50     contimeout    3000
 51     clitimeout    150000
 52     srvtimeout    150000
 53     maxconn 60000
 54     option redispatch
 55     retries    3
 56     grace 3000
 57     #rsprep    ^Server.* Server:\ IIS
 58     #rspdel    ^Server.*
 59     #rspadd Set-Cookie:\ mycookie=0;\ path=/
 60     #rsprep ^(Date:\ )([^,]*)(,\ )(.*) LaDate\ est:\ \4\ (\2)
 61     # force connection:close
 62     #reqidel ^Connection:
 63     #rspidel ^Connection:
 64     #reqadd    Connection:\ close
 65     #rspadd    Connection:\ close
 66     # processing options
 67     #option    keepalive
 68     option    forwardfor
 69     option httplog
 70     option dontlognull
 71 #    reqirep ^(Test:\ ) \0_toto_\1_toto
 72 #    reqidel ^X-Forwarded-for:
 73 #    reqirep ^(GET|POST)\ .* \0
 74 #    reqirep ^(Host:|Connection:|User-agent:|Cookie:)\ .* \0
 75 #    reqideny ^
 76     
 77 listen proxy2 0.0.0.0:8001
 78     mode    http
 79     #mode    tcp
 80     dispatch 127.0.0.1:80
 81     #dispatch 127.0.0.1:31300
 82     #dispatch 127.0.0.1:80
 83     #dispatch 127.0.0.1:22
 84     #server tuxlocal 127.0.0.1:80 cookie cookie1 check
 85     #server tuxceleron 10.101.0.1:80 cookie cookie2 check
 86     #server telnet 127.0.0.1:23
 87     #server ssh 127.0.0.1:22
 88     #server local 127.0.0.1:3130 cookie cookie3 check
 89     #server local 127.0.0.1:3130
 90     #server celeron 10.101.0.1:80 cookie srv1
 91     #server celeron 10.101.0.1:31300
 92     #server local 10.101.23.9:31300
 93     contimeout    3000
 94     clitimeout    150000
 95     srvtimeout    150000
 96     maxconn 60000
 97     option redispatch
 98     retries    3
 99     grace 3000
100     #rsprep    ^Server.* Server:\ IIS
101     #rspdel    ^Server.*
102     rspadd Set-Cookie:\ SERVERID=12345678;\ path=/
103     #rsprep ^(Date:\ )([^,]*)(,\ )(.*) LaDate\ est:\ \4\ (\2)
104     
105 listen proxy3 0.0.0.0:3128
106     disabled
107     mode    http
108         cookie SERVERID insert indirect
109     #dispatch 127.0.0.1:8080
110     server srv1 127.0.0.1:8080
111      #server srv2 192.168.12.3:8080
112     contimeout    3000
113     clitimeout    450000
114     srvtimeout    450000
115     maxconn 60000
116     option redispatch
117     retries    3
118     grace 3000
119     rspdel ^Via:.*
120     monitor-net    192.168.12.252/30
121     
122 
123 listen proxy4 0.0.0.0:3129
124     disabled
125     mode    http
126     transparent
127 #    dispatch 127.0.0.1:80
128     contimeout    3000
129     clitimeout    150000
130     srvtimeout    150000
131     maxconn 60000
132     retries    3
133     grace 3000
134 
135 #    log    10.101.11.1 local1
136 #    log    10.101.11.1 local2
137 
138 #    cliexp    ^(.*ASPSESSIONID.*=)(.*) \1FENICGGCBECLFFEEOAEAIFGF
139 #    cliexp    ^(GET.*)(.free.fr)(.*) \1.online.fr\3
140 #    cliexp    ^(POST.*)(.free.fr)(.*) \1.online.fr\3
141 #    cliexp    ^Proxy-Connection:.*    Proxy-Connection:\ close
142 #    srvexp    ^(Location:\ )([^:]*://[^/]*)(.*) \1\3
143 
144 listen health 0.0.0.0:3130
145     mode    health
146     clitimeout    1500
147     srvtimeout    1500
148     maxconn 6000
149     grace 0
150 
151 
152 listen health2 0.0.0.0:31300
153     mode    health
154     option  httpchk
155     clitimeout    1500
156     srvtimeout    1500
157     maxconn 6000
158     grace 0
Haproxy配置

 

运行一下命令启动Haproxy

[wilson@localhost sbin]$ ./haproxy -f /usr/local/haproxy/examples.cfg

启动效果如下

 

server web01 127.0.0.180 check inter 2000 fall 3 weight 30 #定义的多个后端
server web02 192.168.0.104:80 check inter 2000 fall 3 weight 30 #定义的多个后端

配置的第一个80端口为centos本机的Apache 服务器,第二个为其他windowsPC上的 iis7,用IE和火狐打开可以看到请求被转发到不同的web服务器,效果如下

Haproxy session保持

1、session知识
   Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。
服务器也通过URL重写的方式来传递SessionID的值,因此不是完全依赖Cookie。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。
在后端应用服务器上php.ini 里几个session相关值的,可以进行简单设置
session.use_cookies = 1  #表示 服务端和客户端交互session是通过cookie的方式 默认值
session.name = LXSYM      #默认值是PHPSESSID 可以自行定义。比如LXSYM
session.cache_limiter = nocache #此设置确保对每个请求,在可能提供缓存的版本前,先请求发送到最初的服务器。
   针对session数据推荐使用共享存储,实现方法很多。比如存于多个memcached中,具体会写博文说明,敬请关注~
2、实现haproxy与客户端session一致的方法有:
2.1 用户IP 识别 
   haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上。
 配置指令  balance source  (如: balance  uri len 100)
2.2 cookie 识别  
   haproxy 将WEB服务端发送给客户端的cookie中插入(或添加前缀)haproxy定义的后端的服务器COOKIE ID。
 配置指令例举  cookie  SESSION_COOKIE  insert indirect nocache   
 可以使用firebug可以观察到用户的请求头的cookie信息
2.3 session 识别  
   haproxy 将后端服务器产生的session和后端服务器标识存在haproxy中的一张表里。客户端请求时先查询这张表。
 配置指令例举 appsession LXSYM len 64 timeout 5h request-learn 
 注意LXSYM这个值替换成 你的php.ini 里session.name的值。

 

参考:

http://blog.csdn.net/tantexian/article/details/50056199

http://www.cnblogs.com/kgdxpr/p/3272861.html