[CDN 技术] Squid集群做CDN全网加速

Dec 27th, 2007

转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]

本文链接: http://www.php-oa.com/2007/12/27/squid-dnspod.html

 本文原创,转载说明来自www.php-oa.com

更新日期:08年1月10日 环境:Centos5.1 squid2.6

主服务器群,然后在利用Squid逆向缓存web80端口来加速自己的网站.各大门户网站象163,sina,chinaitlab之类基本都是使用的这种技术,好处是大大的有.比如加速了网络和可以防黑客(因为他们见到的都是CDN的主机)
这是利用Squid逆向集群模式做的一种应用

网络环境:

主服务器群:源Web服务器群 位于公网ip:220.XXX.XXX.X port:80(后台才是WEB的服务器)

注: 要保证TCP80,UDP3130在防火墙上是开的(供icp_port通讯使用,多台Squid集群才会用到)

全国各地分服务器:A服务器公网IP111.xxx.xxx.x

B服务器公网ip112.xxx.xxx.x

注: 要保证TCP80,UDP3130在防火墙上是开的(供icp_port通讯使用,多台Squid集群才会用到)

……………………
需要解决的问题:

全国的所有用户,无论是电信,还是网通,都能速度很好的打开网站

实施

1、分别在主服务器群和全国各地分服务器的三台服务器安装Squid,不会安装的请直接关闭本网页.

2、分别配置Squid,这里只重点叙述Squid集群配置要点.

主服务器群Squid的配置:

http_port 220.XXX.XXX.X:80 vhost vport #让Squid监听本机ip的80端口

icp_port 3130 #多台squid通信使用

cache_peer “内网web服务器的地址” parent 80 0 no-query originserver no-digest name=cache0 #设置源Web服务器群的ip和端口

cache_peer 220.XXX.XXX.X sibling 80 3130 name=cache1 #让远程的squid连接本地Squid工作在sibling模式并指定其端口

cache_peer 111.xxx.xxx.x sibling 80 3130 name=cache2 #A服务器

cache_peer 112.xxx.xxx.x sibling 80 3130 name=cache3 #B服务器

cache_peer_domain cache0 www.php-oa.com #配置本机squid允许接受访问的域名

acl Safe_ports port 80

acl Safe_ports port 3130 #允许以上端口的代理

全国各地分服务器Squid的配置:

A服务器:

http_port 111.xxx.xxx.x:80 vhost vport

icp_port 3130

cache_peer 220.xxx.xxx.x parent 81 0 no-query originserver no-digest name=cache0 #设置主服务器群Web服务器为源服务器

cache_peer 111.xxx.xxx.x sibling 80 3130 name=cache1

cache_peer 220.xxx.xxx.x sibling 80 3130 name=cache2

cache_peer 112.xxx.xxx.x sibling 80 3130 name=cache3

cache_peer_domain cache0 www.php-oa.com

acl Safe_ports port 80

acl Safe_ports port 3130

B服务器:

http_port 112.xxx.xxx.x:80 vhost vport

icp_port 3130

cache_peer 220.xxx.xxx.x parent 80 0 no-query originserver no-digest name=cache0

cache_peer 112.xxx.xxx.x sibling 80 3130 name=cache1

cache_peer 220.xxx.xxx.x sibling 80 3130 name=cache2

cache_peer 111.xxx.xxx.x sibling 80 3130 name=cache3

cache_peer_domain cache0 www.php-oa.com

acl Safe_ports port 80

acl Safe_ports port 3130
虽然配置好了但是如何让电信和网通的用户能有选择的访问两个不同镜像呢?这个请各位自己查相关的资料,要不到https://www.dnspod.com申请双线,电信网通的转发服务

注:下面看看cache_peer的参数

通过squid.conf配置文件中的cache_peer选项来配置代理服务器阵
列,通过其他的选项来控制选择代理伙伴的方法.Cache_peer的使用格式如下:
cache_peer  hostname type http_port icp_port
共有5个选项可以配置:
1. hostname:指被请求的同级子代理服务器或父代理服务器.可以用主机名或ip地址表示;
2. type:指明hostname的类型,是同级子代理服务器还是父代理服务器,也即parent(父) 还是 sibling(子);
3. http_port:hostname的监听端口;
4. icp_port:hostname上的ICP监听端口,对于不支持ICP协议的可指定7;
5. options:可以包含一个或多个关键字.
Options可能的关键字有:
1. proxy-only:指明从peer得到的数据在本地不进行缓存,缺省地,squid是要缓存这部分数据的;
2. weight=n:用于你有多个peer的情况,这时如果多于一个以上的peer拥有你请求的数据时,squid通过计算每个peer的ICP响应时间来 决定其weight的值,然后squid向其中拥有最大weight的peer发出ICP请求.也即weight值越大,其优先级越高.当然你也可以手工 指定其weight值;
3. no-query:不向该peer发送ICP请求.如果该peer不可用时,可以使用该选项;
4. Default:有点象路由表中的缺省路由,该peer将被用作最后的尝试手段.当你只有一个父代理服务器并且其不支持ICP协议时,可以使用default和
no-query选项让所有请求都发送到该父代理服务器;
5.login=user:password:当你的父代理服务器要求用户认证时可以使用该选项来进行认证.

curl -I http://www.xxx.com

Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪 ViVi 365Key 网摘 天极网摘 和讯网摘 博拉网 POCO 网摘 饭否 QQ 书签 Digbuzz 我挖网 Mister Wong
  1. badboy
    Oct 21st, 2008 at 08:58
    Reply | Quote | #1

    有个问题,请教楼主…..

    父cache能为子cache转发cache丢失,然而姐妹cache之间允许转发cache丢失。这意味着,在发送请求到姐妹cache前,发起者应该知道这是个cache命中。

    那么如果我在A服务器有这样一个请求http://www.php-oa.com/show.htm,那我应该如何与其他cache会话呢?

    个人想法:
    cache_peer_domain cache0 http://www.php-oa.com
    这个条件的限制,让所有对www.php-oa.com这个域名下的资源的请求都要转到父cache中了,请问是这样吗?能帮讲讲这个流程吗?谢谢~~

  2. badboy
    Oct 21st, 2008 at 09:10
    Reply | Quote | #2

    cache堆叠关系有两种,一种是parent和sibling.
    它们对请求资源的流程应该如下:
    (1)先向本地squid要资料
    (2)如果本地没有,再向sibling要资料
    (3)如果再没有,就向parent要资料
    (4)如果再没有,就向源服务器要资料.

    故我对下面这几段是这样理解的:

    cache_peer 220.xxx.xxx.x parent 80 0 no-query originserver no-digest name=cache0

    cache_peer 112.xxx.xxx.x sibling 80 3130 name=cache1

    cache_peer 220.xxx.xxx.x sibling 80 3130 name=cache2

    cache_peer 111.xxx.xxx.x sibling 80 3130 name=cache3

    当一个对B服务器的请求到来时,它先
    cache_peer 112.xxx.xxx.x sibling 80 3130 name=cache1
    如果没有,再
    cache_peer 220.xxx.xxx.x sibling 80 3130 name=cache2

    cache_peer 111.xxx.xxx.x sibling 80 3130 name=cache3

    如果再没有,再
    cache_peer 220.xxx.xxx.x parent 80 0 no-query originserver no-digest name=cache0

    过后,就交给父cache处理了…….

    唯一不明白的是:
    cache_peer_domain cache0 http://www.php-oa.com
    用了这条限制,那所有用这个www.php-oa.com请求的资源是否不会按照,我上面所说的那四步走了,而是直接将请求资源扔给父cache处理了呢?

    请扶凯兄弟,帮解答…. 感谢….