squid

squid转发特定请求到父cache并做会话保持

2010年03月13日 #测试环境:SQUID 2.7.STABLE6 @ RHEL AS 4.7 使用squid的 cache_peer 中 sourcehash 参数,来根据客户端源IP地址做会话保持: #  TAG: cache_peer #       To specify other caches in a hierarchy, use the format: # #               cache_peer hostname type http-port icp-port [options] # #                    use ’sourcehash’ to load-balance … 继续阅读

Squid Optimization Guide(squid优化)

Squid Optimization Guide[......]

继续阅读

squid转发特定请求到父cache并做会话保持

#测试环境:SQUID 2.7.STABLE6 @ RHEL AS 4.7

使用squid的 cache_peer 中 sourcehash 参数,来根据客户端源IP地址做会话保持:

#  TAG: cache_peer
#       To specify other caches in a hierarchy, use the format:
#
#               cache_peer hostname type http-port icp-port [options]

#
#                    use ’sourcehash’ to load-balance amongst a set of parents
#                    based on the client source ip.
#

我们的需求是:

1)转发特定域名的请求(如 www.uc.cn )到 指定的父cache;

2)配置多台“指定父cache”,避免1台down掉不能转发(squid有自动检测和剔除机器);

3)多台“指定父cache”间实现简单的负载均衡;

4)有会话保持机制。

引用《squid权威指南》:

10.11.4 通过父cache发送某些请求来绕过本地过滤器?

某些ISP(或其他组织)有上级服务提供者,他们强迫HTTP传输通过包过滤代理(也许使用HTTP拦截)。假如你能在他们的网络之外使用不同的代理,那就能绕过其过滤器。这里显示你怎样仅发送特殊的请求到远端的代理:

cache_peer far-away-parent.host.name parent 3128 0 

acl BlockedSites dstdomain www.censored.com 

cache_peer_access far-away-parent.host.name allow BlockedSites

never_direct allow BlockedSites

——————

问题1:配置多个cache_peer时,第一个cache_peer有默认的选项(default),即所有特定请求都从第一个cache_peer出去;

问题2:squid 访问到父cache失效时,会自己去拿网页direce(在没有配置never_direct的情况下);

问题3:实现会话保持,新版squid针对cache_peer有sourehash选项,可以根据client ip 做会话保持。

—————–

开始配置:

acl liguibao dstdomain www.uc.cn

cache_peer mob35 parent 3129 0 http11 sourcehash
cache_peer mob36 parent 3128 0 http11 sourcehash
cache_peer mob37 parent 3128 0 http11 sourcehash
cache_peer mob38 parent 3128 0 http11 sourcehash
cache_peer mob39 parent 3128 0 http11 sourcehash

cache_peer_access mob35 allow liguibao
cache_peer_access mob36 allow liguibao
cache_peer_access mob37 allow liguibao
cache_peer_access mob38 allow liguibao
cache_peer_access mob39 allow liguibao

never_direct allow liguibao
#never_direct deny all

OK!

——————

测试结果说明:

1)当不配置 never_direct allow liguibao 时,且 算法为 round-robin 时:

刷新页面会轮询,当轮询到失败的父cache时,squid会自己去拿网页,即direct:

1268391204.500     48 192.168.20.140 TCP_MISS/200 271 GET http://www.uc.cn/ipDIRECT/123.150.188.22 text/html
1268391235.511     87 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob39 text/html
1268391235.869     92 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob38 text/html
1268391236.180     86 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob37 text/html
1268391236.435     86 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob36 text/html
1268391236.676     90 192.168.20.140 TCP_MISS/200 271 GET http://www.uc.cn/ipDIRECT/123.150.188.22 text/html
1268391236.967     44 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob39 text/html
1268391237.846     44 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob39 text/html
1268391238.050     44 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob38 text/html
1268391238.264     43 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob37 text/html
1268391238.654     43 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob36 text/html
1268391239.152     48 192.168.20.140 TCP_MISS/200 271 GET http://www.uc.cn/ipDIRECT/123.150.188.22 text/html

2)当不配置 never_direct allow liguibao 时,且 算法为 sourcehash 时:

刷新页面会会话保持,当正好保持到失败的父cache时,squid会自己去拿网页,即direct:

1268391767.028     50 192.168.20.140 TCP_MISS/200 271 GET http://www.uc.cn/ipDIRECT/123.150.188.22 text/html
1268391767.346     48 192.168.20.140 TCP_MISS/200 271 GET http://www.uc.cn/ip – DIRECT/123.150.188.22 text/html
1268391767.492     48 192.168.20.140 TCP_MISS/200 271 GET http://www.uc.cn/ip – DIRECT/123.150.188.22 text/html
1268391767.722     47 192.168.20.140 TCP_MISS/200 271 GET http://www.uc.cn/ip – DIRECT/123.150.188.22 text/html

3)当配置 never_direct allow liguibao 时,且 算法为 sourcehash 时:

刷新页面会会话保持,当hash到失败的父cache时(hash规则是无状态的,不管父cache是否存活,都是确定的),会再找最后的替代路径ANY_PARENT:

1268391819.297     92 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ipANY_PARENT/mob36 text/html
1268391819.558     48 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ANY_PARENT/mob36 text/html
1268391819.745     48 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ANY_PARENT/mob36 text/html
1268391819.963     49 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ANY_PARENT/mob36 text/html
1268391820.120     49 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ANY_PARENT/mob36 text/html

4)当配置 never_direct allow liguibao 时,且 算法为 round-robin 时:

刷新页面会轮询,当轮询到失败的父cache时,会再找最后的替代路径ANY_PARENT:

1268391978.208     91 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob39 text/html
1268391978.431     87 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob38 text/html
1268391978.679     86 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob37 text/html
1268391978.890     87 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob36 text/html
1268391979.183     50 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ipANY_PARENT/mob36 text/html
1268391979.360     44 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob39 text/html
1268391979.527     44 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob38 text/html
1268391979.749     43 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob37 text/html
1268391979.965     43 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob36 text/html
1268391980.236     49 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ipANY_PARENT/mob36 text/html
1268391981.178     44 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob39 text/html
1268391981.375     44 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob38 text/html
1268391981.536     43 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob37 text/html
1268391981.693     43 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ip – ROUNDROBIN_PARENT/mob36 text/html
1268391981.879     49 192.168.20.140 TCP_MISS/200 336 GET http://www.uc.cn/ipANY_PARENT/mob36 text/html

————————

参考资料:

http://blog.chinaunix.net/u1/55815/showart_1151186.html

http://blog.chinaunix.net/u1/55815/showart_1163222.html

http://blog.chinaunix.net/u1/55815/showart_1154519.html

http://www.phpfans.net/manu/Squid/chap10.html#a61

http://www.phpfans.net/manu/Squid/chap13.html