Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29955770
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: 系统运维

2010-08-20 12:40:46

Cdn设计与技术实现

常见的应用场景

1.      网站的页面加速

2.      下载服务,类似于杀毒软件如果有新的客户端更新下载就可以用到CDN

3.      视频特别是在线视频FLV

CDN的访问模式

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


CDN的全称是Content Delivery Network,即内容分发网络,是位于网络层与应用层之间的网络应用,其目的是通过在现有的Internet中增加一层新的网络架构,通过智能的中心管理系统,使用广泛分布的服务器群来帮助网站、媒体运营商等满足用户的各类需求。

 

CDN的原理

o      内容缓存到不同地区的缓存服务器

o      就近访问原则

o      Dns视图(view)区分用户的访问来源。依据DNS视图进行转发请求实现就近原理

 

CDN实现的关键技术

(1)    dns视图(view): bind (实现DNS的功能)

(2)    内容缓存:squid

辅助技术

(1)负载均衡:lvs+keepalived

(2)监控:nagios,mrtg   

CDN设计的要点

o      选定核心缓存节点(电信、网通各2个)

o      选定边缘缓存节点(覆盖到省)

o      归类ip地址:哪些ip地址属于哪些运营商?Dns的解析依赖一个庞大的地址库判定客户请求来源,然后才可能实现用户的就近访问。

o      容错和负载均衡

    如果自己做一个简单的cdn应用,可能只需要电信和网通2个节点,不必有边缘和核心的区分;ip库也简化成电信、网通、其他,即dns只涉及3个视图(VIEW

 

一个示例

 

 

 


              

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

用户dns处理

o      一般情况下,用户的dnsA记录直接把主机名解析到源站IP.为了使用cdn,则需要在dns服务器上使用CNAME,把域名指向到cdn运营商解析出来域名上(注意:不能是某个固定IP),如:

o      dl    IN CNAME       sery.cn.ccdn.com.

 

   当用户访问dl.sery.cn这个域名时,实际访  问的域名是sery.cn.ccdn.com

 

 

 

 

 

CdnDNS处理

o      Cdn使用2 DNS系统,一套对外(即对internet提供域名解析服务,亦即是前面所使用的别名);一套内部使用的DNS,供各cdn节点使用(小规模的cdn可以使用Hosts文件来实现)。(就不需要用DNS了只需要用hosts)

一、内部dns

o      Cdn姐妹( sibling )、父子(parent)名称解析

o      解析源站地址

 

二、外部dns

o      Cdn最关键之处就是外部dns的视图功能(view)。至少需要定义3个视图:电信、网通和其他。为了更准确地提供cdn服务,建议每个省定义成一个View.

o      视图(View)一般以网段为单位,一个网段一行,更有效的方式是搜集DNS所属网段,这样视图(view)的列表就会变得比较小,可以大大加速检索速度。

术语:dns的视图区的概念.

三、一个简单的dns视图片断

o      ### KEYS FOR TSIG ####

o      key telecomkey {

o      algorithm hmac-md5;

o      secret "LaA4Y1MHlFSTTMz1mzwarA==";

o      };

 

o      key cnckey {

o      algorithm hmac-md5;

o      secret "l/rlorcG+7hhabIFKe8Kjg==";

o      };

 

o      key anykey {

o      algorithm hmac-md5;

o      secret "YMXXBAck4i5Sb4PlUg00Uw==";

o      };

 

o      include "cnc_acl.conf";

o      include "telecom_acl.conf";

 

o      view "view_cnc" {

o            match-clients {key cnckey;CNC;};

o            recursion yes;

o            allow-transfer { key cnckey;};

o            server 61.135.210.20 { keys cnckey; };

o            server 61.135.210.10 { keys cnckey; };

 

o      zone "." IN {

o              type hint;

o              file "named.ca";

o              };

 

o      zone "localhost" IN {

o              type master;

o              file "localhost.zone";

o              allow-update { none; };

o              };

 

 

o      include "cnc_acl.conf";

o      include "telecom_acl.conf";

 

o      view "view_cnc" {

o            match-clients {key cnckey;CNC;};

o            recursion yes;

o            allow-transfer { key cnckey;};

o            server 61.135.210.20 { keys cnckey; };

o            server 61.135.210.10 { keys cnckey; };

 

o      zone "." IN {

o              type hint;

o              file "named.ca";

o              };

 

o      zone "localhost" IN {

o              type master;

o              file "localhost.zone";

o              allow-update { none; };

o              };

 

三、一个简单的dns视图片断

o      zone "0.0.127.in-addr.arpa" IN {

o              type master;

o              file "named.local";

o              allow-update { none; };

o              };

 

o      zone “sery.cn" IN {

o              type master;

o              file "cnc.sery.cn.zone";

o              allow-update { none;} ;

o              };

 

o      zone "210.135.61.in-addr.arpa"  IN {

o              type master ;

o              file "210.135.61.in-addr.arpa.zone";

o              allow-update { none; };

o              };

o      };

 

 

四、视图列表片断

o      [root@nagios /var/named]# more cnc_acl.conf

o      acl "CNC" {

o      58.16.0.0/16;

o      58.168.225.0/24;

o      58.17.0.0/17;

o      58.17.128.0/17;

o      58.17.180.0/24;

o      58.17.186.0/24;

o      58.18.0.0/16;

o      58.19.0.0/16;

o      58.20.0.0/16;

o      58.21.0.0/16;

o      58.22.0.0/15;

o      58.22.0.0/16;

o      58.23.0.0/16;

o      58.240.0.0/15;

o      58.242.0.0/15;

o      ………………

o      222.163.128.0/17;

o      222.163.32.0/19;

o      222.163.64.0/18;

o      };

 

 

缓存服务器(配置了分布式的DNS之后还要再配置好缓存服务器)

o      分层设计(parent

o      层间堆叠( sibling

o      禁止使用ip地址访问

 

一、分层设计

o      中心节点为父节点、边缘节点为子节点。用户的访问被分配到边缘节点,当访问没有被命中时,子节点再向父节点请求,如果父节点仍然没有被命中,则继续向源站请求。这种机制保证了源站有更小的访问流量,大大降低源站的带宽耗费。

(尽可能不让用户来访问源站服务器)

o      acl CNSERY  dstdomain

o      cache_peer parent 80 3130 no-query originserver

o      cache_peer_access allow  CNSERY

 

二、层间堆叠

o      用户访问每个边缘服务器,如未命中,则访问临近的节点。这也是为降低源站流量和减少源站带宽所采取的措施。在实际的部署中,往往由数个服务器组成一个集群,相邻节点出于一个网段内,所以这种邻接关系相互访问是很有保障的。

 

o      cache_peer ccrshct02.html.ccdn.cn sibling 80 3130

o      cache_peer ccrshct03.html.ccdn.cn sibling 80 3130

o      cache_peer ccrshct04.html.ccdn.cn sibling 80 3130

 

三、禁止使用ip访问

o      禁止ip访问既有基于安全的考虑也有出于效率的考虑

o      acl IP dstdom_regex ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$

o      http_access deny IP

说明:统一使用域名进行访问它!

 

四、集群与负载均衡

o      所有节点都在各自的网段采取集群和负载均衡技术(不包括DNS

o      Lvs结合keepalived是最佳的选择

 

五、Keepalived 配置文件片断

o      #guration File for keepalived

o      global_defs {

o         router_id LVS_sery_2

o      }

o      vrrp_sync_group VGM {

o         group {

o            VI_OUT1

o         }

o      }

o      vrrp_sync_group VGB {

o         group {

o            VI_INT1

o         }

o      }

o      vrrp_instance VI_OUT1 {

o          state BACKUP

o          interface eth2

o          lvs_sync_daemon_inteface eth2

o          virtual_router_id 51

o          priority 150

o          advert_int 5

o          authentication {

o              auth_type PASS

o              auth_pass 1111

o          }

o          virtual_ipaddress {

o              61.135.210.4

o              61.135.220.123

o          }

o      }

 

 

监控:

o      服务及主机监控:nagios是很不错的选择。由于squid禁止使用ip访问,因此监控也应该使用域名来进行

o      流量监控: cactimrtg

o      报警:使用短信方式。可以外购短信服务,把它整合到监控平台中

 

田逸(

 

阅读(870) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~