squid
squid转发特定请求到父cache并做会话保持
十 25th
squid转发特定请求到父cache并做会话保持
三 13th
#测试环境: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 sourcehashcache_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 liguibaonever_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/ip – DIRECT/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/ip – DIRECT/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/ip – DIRECT/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/ip – DIRECT/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/ip – ANY_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/ip – ANY_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/ip – ANY_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/ip – ANY_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