240 likes | 388 Views
Cdn 设计与技术实现. 解决高并发访问的一种途径. 需求的产生. 南北互联问题导致北方的用户访问电信网内的服务器十分缓慢和艰难 , 南方的用户访问网通网内的服务器也是如此 高并发、大流量的站点 访问加速. 常见的应用场景: 一般用于静态对象. 网站的页面加速 下载服务:类似杀毒软件有客户端自动更新机制的下载,更需要 cdn 视频:特别是在线播放类型,如 FLV. 传统的访问模式. 所以的客户端访问同一个对象 众矢之的. Cdn 的访问模式. 把用户请求分散. Cdn 定义 - 摘自 http://www.roxbeam.com/CDN/gn.htm.
E N D
Cdn设计与技术实现 解决高并发访问的一种途径
需求的产生 • 南北互联问题导致北方的用户访问电信网内的服务器十分缓慢和艰难,南方的用户访问网通网内的服务器也是如此 • 高并发、大流量的站点 • 访问加速
常见的应用场景:一般用于静态对象 • 网站的页面加速 • 下载服务:类似杀毒软件有客户端自动更新机制的下载,更需要cdn • 视频:特别是在线播放类型,如FLV
传统的访问模式 • 所以的客户端访问同一个对象 众矢之的
Cdn的访问模式 • 把用户请求分散
Cdn定义-摘自http://www.roxbeam.com/CDN/gn.htm • CDN的全称是Content Delivery Network,即内容分发网络,是位于网络层与应用层之间的网络应用,其目的是通过在现有的Internet中增加一层新的网络架构,通过智能的中心管理系统,使用广泛分布的服务器群来帮助网站、媒体运营商等满足用户的各类需求。
Cdn原理 • 内容缓存到不同地区的缓存服务器 • 就近访问原则 • Dns视图(view)区分用户的访问来源
Cdn实现的技术 • 关键技术 (1) dns视图(view):bind (2)内容缓存:squid • 辅助技术 (1)负载均衡:lvs+keepalived (2)监控:nagios,mrtg
Cdn设计要点 • 选定核心缓存节点(电信、网通各2个) • 选定边缘缓存节点(覆盖到省) • 归类ip地址:哪些ip地址属于哪些运营商?Dns的解析依赖一个庞大的地址库判定客户请求来源,然后才可能实现用户的就近访问。 • 容错和负载均衡 如果自己做一个简单的cdn应用,可能只需要电信和网通2个节点,不必有边缘和核心的区分;ip库也简化成电信、网通、其他,即dns只涉及3个视图(VIEW)
用户dns处理 • 一般情况下,用户的dns用A记录直接把主机名解析到源站IP.为了使用cdn,则需要在dns服务器上使用CNAME,把域名指向到cdn运营商解析出来域名上(注意:不能是某个固定IP),如: • dl IN CNAME sery.cn.ccdn.com. 当用户访问dl.sery.cn这个域名时,实际访 问的域名是sery.cn.ccdn.com
Cdn的DNS处理 • Cdn使用2套 DNS系统,一套对外(即对internet提供域名解析服务,亦即是前面所使用的别名);一套内部使用的DNS,供各cdn节点使用(小规模的cdn可以使用Hosts文件来实现)。
一、内部dns • Cdn姐妹( sibling )、父子(parent)名称解析 • 解析源站地址
二、外部dns • Cdn最关键之处就是外部dns的视图功能(view)。至少需要定义3个视图:电信、网通和其他。为了更准确地提供cdn服务,建议每个省定义成一个View. • 视图(View)一般以网段为单位,一个网段一行,更有效的方式是搜集DNS所属网段,这样视图(view)的列表就会变得比较小,可以大大加速检索速度。
### KEYS FOR TSIG #### key telecomkey { algorithm hmac-md5; secret "LaA4Y1MHlFSTTMz1mzwarA=="; }; key cnckey { algorithm hmac-md5; secret "l/rlorcG+7hhabIFKe8Kjg=="; }; key anykey { algorithm hmac-md5; secret "YMXXBAck4i5Sb4PlUg00Uw=="; }; include "cnc_acl.conf"; include "telecom_acl.conf"; view "view_cnc" { match-clients {key cnckey;CNC;}; recursion yes; allow-transfer { key cnckey;}; server 60.28.210.20 { keys cnckey; }; server 60.28.210.10 { keys cnckey; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { type master; file "named.local"; allow-update { none; }; }; zone "maxthon.cn" IN { type master; file "cnc.maxthon.cn.zone"; allow-update { none;} ; }; zone "210.28.60.in-addr.arpa" IN { type master ; file "210.28.60.in-addr.arpa.zone"; allow-update { none; }; }; }; 三、一个简单的dns视图片断 • ### KEYS FOR TSIG #### • key telecomkey { • algorithm hmac-md5; • secret "LaA4Y1MHlFSTTMz1mzwarA=="; • }; • key cnckey { • algorithm hmac-md5; • secret "l/rlorcG+7hhabIFKe8Kjg=="; • }; • key anykey { • algorithm hmac-md5; • secret "YMXXBAck4i5Sb4PlUg00Uw=="; • }; • include "cnc_acl.conf"; • include "telecom_acl.conf"; • view "view_cnc" { • match-clients {key cnckey;CNC;}; • recursion yes; • allow-transfer { key cnckey;}; • server 61.135.210.20 { keys cnckey; }; • server 61.135.210.10 { keys cnckey; }; • zone "." IN { • type hint; • file "named.ca"; • }; • zone "localhost" IN { • type master; • file "localhost.zone"; • allow-update { none; }; • }; • zone "0.0.127.in-addr.arpa" IN { • type master; • file "named.local"; • allow-update { none; }; • }; • zone “sery.cn" IN { • type master; • file "cnc.sery.cn.zone"; • allow-update { none;} ; • }; • zone "210.135.61.in-addr.arpa" IN { • type master ; • file "210.135.61.in-addr.arpa.zone"; • allow-update { none; }; • }; • };
四、视图列表片断 • [root@nagios /var/named]# more cnc_acl.conf • acl "CNC" { • 58.16.0.0/16; • 58.168.225.0/24; • 58.17.0.0/17; • 58.17.128.0/17; • 58.17.180.0/24; • 58.17.186.0/24; • 58.18.0.0/16; • 58.19.0.0/16; • 58.20.0.0/16; • 58.21.0.0/16; • 58.22.0.0/15; • 58.22.0.0/16; • 58.23.0.0/16; • 58.240.0.0/15; • 58.242.0.0/15; • ……………… • 222.163.128.0/17; • 222.163.32.0/19; • 222.163.64.0/18; • };
缓存服务器 • 分层设计(parent) • 层间堆叠( sibling ) • 禁止使用ip地址访问
一、分层设计 • 中心节点为父节点、边缘节点为子节点。用户的访问被分配到边缘节点,当访问没有被命中时,子节点再向父节点请求,如果父节点仍然没有被命中,则继续向源站请求。这种机制保证了源站有更小的访问流量,大大降低源站的带宽耗费。 • acl CNSERY dstdomain www.sery.cn • cache_peer www.sery.cn parent 80 3130 no-query originserver • cache_peer_access www.sery.cn allow CNSERY
二、层间堆叠 • 用户访问每个边缘服务器,如未命中,则访问临近的节点。这也是为降低源站流量和减少源站带宽所采取的措施。在实际的部署中,往往由数个服务器组成一个集群,相邻节点出于一个网段内,所以这种邻接关系相互访问是很有保障的。 • cache_peer ccrshct02.html.ccdn.cn sibling 80 3130 • cache_peer ccrshct03.html.ccdn.cn sibling 80 3130 • cache_peer ccrshct04.html.ccdn.cn sibling 80 3130
三、禁止使用ip访问 • 禁止ip访问既有基于安全的考虑也有出于效率的考虑 • acl IP dstdom_regex ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ • http_access deny IP
集群与负载均衡 • 所有节点都在各自的网段采取集群和负载均衡技术(不包括DNS) • Lvs结合keepalived是最佳的选择
Keepalived 配置文件片断 • #guration File for keepalived • global_defs { • router_id LVS_sery_2 • } • vrrp_sync_group VGM { • group { • VI_OUT1 • } • } • vrrp_sync_group VGB { • group { • VI_INT1 • } • } • vrrp_instance VI_OUT1 { • state BACKUP • interface eth2 • lvs_sync_daemon_inteface eth2 • virtual_router_id 51 • priority 150 • advert_int 5 • authentication { • auth_type PASS • auth_pass 1111 • } • virtual_ipaddress { • 61.135.210.4 • 61.135.220.123 • } • } • ……………………………………………………..
监控: • 服务及主机监控:nagios是很不错的选择。由于squid禁止使用ip访问,因此监控也应该使用域名来进行 • 流量监控: cacti或mrtg • 报警:使用短信方式。可以外购短信服务,把它整合到监控平台中
谢谢 报告人:田逸(sery@163.com) 2008-01-03