今天有时间研究squid的负载均衡,目前已经有了一定的进展,下面就把我的心得总结出来和大家分享一下
我的目标:1,使用squid进行负载均衡
2,做到会话保持
我使用的squid版本,SQUID 3.0.STABLE8
注:只有squid3.0stable8可以实现(SQUID 2.6.STABLE21也可以实现,2.7目前可以实现负载均衡,但无法实现会话保持)实现使用参数cache_peer,其中的options :sourcehash,这个参数是stable8新加入的,是按client的ip来进行loadbalance,配置参数如下
acl no_direct_domain dstdomain a.b.c 定义不被转发的域名
always_direct allow !no_direct_domain 除了定义的域名都可以被转发
include /path/to/a.b.c.conf
|
前两行的作用,如果你想cache_peer和/etc/hosts同时使用,就需要添加上面的两行,具体实现功能我后面会详细介绍,下面说下a.b.c.conf中的内容
cache_peer 192.168.213.130 parent 80 0 no-query originserver name=www1 sourcehash no-digest 定义第一台RS
cache_peer 192.168.213.133 parent 80 0 no-query originserver name=www2 sourcehash no-digest 定义第二台RS
cache_peer_domain www1 a.b.c a.b.c域名投递到第一台RS
cache_peer_domain www2 a.b.c a.b.c域名投递到第二台RS
|
到此,负载均衡的配置就完成了,接下来修改/etc/hosts文件添加另外一个域名
在RS213.133这台server上建立两个vhost,一个域名a.b.c,默认页面index.html内容a.b.c,另一个域名b.c.d,默认页面index.html,内容b.c.d。另外为了区分loadbalance成功,130这台RS我用的是nginx,这样默认页面内容就是Welcome to nginx!,下面开始测试
为了防止squid机器上dns对域名解析的干扰,我去掉了squid上的dns,启动squid使用-ND参数,启动RS1的nginx,启动RS2的apache,修改我自己windows的hosts文件,内容如下
192.168.213.129 a.b.c b.c.d
|
这样这两个域名的解析都知道squid上了,现在访问,开始显示130的内容,使用ctrl+F5刷新,第二次就是a.b.c的内容,当刷新多次以后,就会始终停留在停留在其中的一个页面了,之所以用ctrl+F5我是忽略squid缓存,由此证明会话保持成功,之前看到两个页面切换说明loadbalance成功,接下来是另一个测试
访问,结果浏览器显示b.c.d内容,说明域名可以通过hosts文件解析
首先说明一点:为了防止公网使用我的squid当代理服务器上网,所以我去掉了dns,这样所有域名我都会通过hosts文件解析
1,如果配置文件中加上always_direct allow all,将会出现a.b.c域名因为找不到对应的ip而无法访问,但b.c.d可以正常访问
2,如果注释掉always_direct allow all,则相反,a.b.c可以正常访问,b.c.d会提示squid无法转发请求
由此我就想到了用第一个实现的办法来同时工作,需要走loadbalance的就用cache_peer,不需要loadbalance的就用hosts文件转发
squid的loadbalance支持健康检测,如果后端RS服务停了,squid会自动判断,并不再把请求发给后方
以上配置已经在我的一台生产线环境的squid上应用,目前稳定性,性能还处于观察中
通过squidclient -p 80 mgr:sourcehash命令查看hash情况,每台机器上还都是有请求的(这个是我生产线上squid上看到的内容)
Hostname Hash Multiplier Factor Actual
www1
38830f16 1.000000 0.055556 0.000704
www2
654f5979 1.000000 0.055556 0.014789
www3
921ba3dc 1.000000 0.055556 0.092254
www4
bec7ee3f 1.000000 0.055556 0.000704
www5
eb9438a2 1.000000 0.055556 0.029577
www6
18408306 1.000000 0.055556 0.010563
www7
450ccd69 1.000000 0.055556 0.164789
www8
71d917cc 1.000000 0.055556 0.410563
www9
9e85622f 1.000000 0.055556 0.000704
www10
2ce0260 1.000000 0.055556 0.001408
www11
2f9a4cc3 1.000000 0.055556 0.011268
www12
5c469726 1.000000 0.055556 0.079577
www13
8912e189 1.000000 0.055556 0.009859
www14
b5df2bec 1.000000 0.055556 0.020423
www15
e28b764f 1.000000 0.055556 0.103521
www16
f57c0b3 1.000000 0.055556 0.004225
www17
3c040b16 1.000000 0.055556 0.000704
www18
68d05579 1.000000 0.055556
0.012676
|
不过以上基于client的ip做的会话保持,我发现了一个问题,就是我不知道在哪里设置会话保持的过期时间,如果谁找到了,还望告知,以上描述性的话语过多,如有不明白的地方,我们一起交流
阅读(2861) | 评论(0) | 转发(0) |