全部博文(2065)
分类: 系统运维
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 一般情况下,用户的dns用A记录直接把主机名解析到源站IP.为了使用cdn,则需要在dns服务器上使用CNAME,把域名指向到cdn运营商解析出来域名上(注意:不能是某个固定IP),如:
o dl IN CNAME sery.cn.ccdn.com.
当用户访问dl.sery.cn这个域名时,实际访 问的域名是sery.cn.ccdn.com
Cdn的DNS处理
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
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 流量监控: cacti或mrtg
o 报警:使用短信方式。可以外购短信服务,把它整合到监控平台中
田逸()