




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章 设计模式基础简单cdn2437.1 cdn概述提示cdn历史上最有名的事件当属关于克林顿丑闻的斯塔尔报告被放在互联网,因下载该报告的人太多,最终导致服务器瘫痪。该事件直接促使cdn的诞生。cdn是content delivery network首字母缩写,译成中文就是内容分发网络。使用cdn技术的主要目的在于增加访问速度、解决南北互联(中国适用)、提高用户体验等。最早的商业cdn服务可能诞生于1999年,但本人闻之cdn这个业务则是2005年的事情了。到了2006年的春天,我有幸得到一个cdn设计方面的工作,这才有机会全面了解cdn原理、设计、部署以及运营等。7.1.1 为什么使用cdn(1)解决网站高流量、大并发的问题。我们知道,任何一个物理设备,其负载都有一个极限。为了应对访问量突增,使用cdn服务是一个好的系统扩容方案。(2)解决南北互联问题。我国的网络是划江而治的格局,因为利益之争,各网络服务商之间并不是通力协作,而是采取各种手段相互限制。这就导致各网之间的互联互通存在很大的问题,具体表现为:电信的用户访问放置在网通机房的服务器,响应时间特别长,反之亦然。使用cdn技术,可以让电信的用户访问电信的内容缓存服务器,网通的用户访问网通的内容缓存服务器。通过这样一种策略,绕开了网络运营商之间人为设置的障碍。(3)访问加速。cdn采用缓存技术,把访问对象缓存起来,有的技术甚至能把对象缓存到内存(如varnish),这在效果上表现出来的即是访问加速。(4)降低总体运营成本。在一些互联互通比较好的第三方bgp机房,其带宽费高达300 400元/兆/月,而二、三线城市单线接入的带宽费100m一年的费用才5万左右。使用cdn运营方案,我们把源站放在bgp机房,而把缓存服务器放置在带宽费用较低的其他地方。因为cdn的大部分流量被转移到缓存服务器上,源站只有较小的访问请求,因此总体运营成本大幅降低。(5)提高网站的可用性。源站的访问量变得很小,这意味着源站系统有更低的负载,更低的磁盘i/o,防故障的几率大大降低。对于缓存服务器,多个服务器做成集群,保证了整个系统的高可用。(6)防ddos攻击。攻击负载被分配到不同的物理服务器,客观上起到防ddos的作用。7.1.2 cdn适用的场合任何一门技术,都有一定的适用范围,cdn也不例外。实践证明,cdn对于静态对象的加速和发布具有很好的效果,但对于动态的网站,则效果不佳。为了使用cdn技术所带来的好处,我们可以通过动态内容静态化、静态内容分离(如动态站点里的图片)等方式,来加速访问和增强用户体验。有哪些对象是静态可缓存的呢?这包括html页面文件、视频文件、js文件、css文件、exe文件、图片文件(jpeg、gif、png)等。7.1.3 cdn的组成cdn是一种组合技术,包括源站、缓存服务器、智能dns、客户端等几个部分。n 源站指发布内容的原始站点。新增、删除和更改网站的文件,都是在源站上进行的;缓存服务器抓取的对象也全部来自于源站。n 缓存服务器是直接提供给用户访问的站点资源,有一个或数个服务器组成;当一个用户发起访问时,他的访问请求被智能dns定位到离他较近的缓存服务器。如果访问所需的内容没有被缓存,则缓存服务器向邻近的缓存服务器或直接向源站抓取内容,然后再返还给用户;如果用户所请求的内容刚好在缓存里面,则直接把内容返还给用户。n 智能dns是整个cdn的核心,它负责根据用户的来源,将其访问请求转向到离用户较近或较合适的缓存服务器,如把长沙电信的用户请求转向到长沙电信机房的缓存服务器。实现智能dns的一种技术是:bind view,在bind 9以后的版本,都应该支持view 视图这个功能。另外还有一个方案,即dns轮询方式。n 客户端即发起访问的普通用户,一般的访问方式是浏览器。这个不再做说明。除了前面列举的组件外,还有一个可选项目,即用来进行内部域名以及源站的域名解析。因为是可选的,因此也可以通过使用本地hosts指定主机名来代替。注意内部域名系统不能使用合法注册的域名服务器,也即在互联网上,找不到这个域名系统的ns记录。为什么呢?请继续往下看。接下来,我们以图示来总结一下cdn各组件间的关系和访问流程。dns查询路径dns本地dns本地dns内部dns图7-1 cdn各部分间的关系图7-1展示了两种比较典型的访问场景,这两种场景,基本上能反映整个cdn的工作机制。n 场景一:当“a网用户”访问被cdn加速的站点 时,从本地的dns查询域名,最终可能在全局智能dns服务器得到域名所对应的ip地址,即图7-1所示“a网的缓存服务器”的ip;接着“a网用户”浏览器向“a网的缓存服务器”发起访问请求,幸运的是所需的默认页面文件index.htm正好被缓存在“a网的缓存服务器”里,于是缓存服务器立即返还数据,完成一次访问请求。n 场景二:当“b网用户”访问被cdn加速的站点 时,从本地的dns查询域名,最终可能在全局智能dns服务器得到域名所对应的ip地址,即图7-1所示“b网的缓存服务器”的ip;接着“b网用户”浏览器向“b网的缓存服务器”发起访问请求,但是缓存服务器并没有缓存默认页面文件index.html,它需要先从源站取得这个对象,缓存并把内容返还给“b网用户”。“b网缓存服务器”通过“内部dns”知道源站在哪里。7.1.4 cdn的基本特点cdn的基本特点可概括为:内容缓存、就近访问以及以dns视图方式根据用户来源确定其访问位置。n 内容缓存:缓存服务器从源站取得所需数据,然后暂存在本地的硬盘或内存。使用这种缓存机制的好处是:内容自动更新;无多个服务器数据相互同步问题。n 就近访问:让用户的访问请求转向到离用户最近或最易于访问的缓存服务器。n 以dns视图方式根据用户来源确定其访问位置:即让电信的用户访问电信的缓存服务器,网通的用户访问网通的缓存服务器。7.1.5 什么是简单cdn简单cdn这个概念,是相对于复杂cdn来定义的。因此,我们先来了解一下什么是复杂的cdn。笼统一点讲,cdn服务提供商所运营的环境,就是复杂cdn。就缓存服务器而言,其结构是分层次的,一般可划分为核心节点和边缘节点,并且同一层级的相邻节点之间又可形成姐妹关系,亦即在同一个集群下的节点互为姐妹关系。为了保证最高的性能和效率,不提倡跨网或跨物理范围的节点形成姐妹关系。为了更直观地理解这个结构和由此产生的好处,这里以一个最长访问路径的图示来说明,如图7-2所示。图7-2 缓存服务器相互关系说明如下:(1)用户向某边缘服务器(边缘a)发起访问请求,所需内容没有被缓存。(2)边缘服务器(边缘a)于是询问其邻居,是否缓存了用户所需的请求对象,邻居节点也没有缓存所需的对象。(3)边缘服务器(边缘a)转而向某个父节点(核心a)请求文件,如果该父节点仍然无所需的文件,则该父节点询问其邻居;如果邻居也没有所需的文件,则把请求转给源站。(4)源站返回数据给核心节点(核心a),并缓存数据在该节点。(5)核心节点(核心a)返还数据给边缘节点(边缘a),并缓存数据在该节点。(6)边缘节点返还数据给用户,一次最长路径的访问完成。这种分层机制,既能保证最高的可用性,又能最大限度地减少向上一级节点的网络流量。除了缓存服务器结构上的差异外,复杂cdn还具备以下一些特性。n 缓存服务器布点范围广,服务器数量庞大。n 复杂的日志处理系统。因为计费依赖于访问日志。n 详细的视图划分。例如精确到每个省的ip地址段。n 预加载机制。提示把复杂的cdn简化,使之符合我们的业务需求,是本章“简单cdn”撰写的用意所在。当我们了解了复杂cdn以后,再来了解简单cdn就容易多了。所谓简单cdn,就是节点层次简单、服务器数量有限、能实现有限规模站点加速和发布的平台。通常情况下,我们不必为实现cdn带来的好处而部署复杂的cdn系统,这将花费巨大的人力、物力。7.2 简单cdn的设计提示先声明一下,本文所设计的简单cdn只是一个样例,并非适用于所有的场景。读者可根据我的思路,设计出更适合自己应用环境的简单cdn。7.2.1 简单cdn设计的基本原则简单cdn设计主要考虑以下几点。n 选点合理,能覆盖大部分网络用户。最起码得在电信和网通机房放置缓存服务器,如果经费充裕,把教育网也考虑进来。n 系统本身具备很好的高可用特性。用户的访问主要集中在缓存服务器,缓存服务器之间使用集群技术就能得到比较高的系统可用性。n 核算自建简单cdn的成本,使之有较好的性价比。如果自建一个cdn远比购买cdn服务商所花费的资金还高(目前国内商用cdn每兆带宽为50元/月,基数是1g),基本上没必要自己建立cdn了。n 系统应该具备很好的伸缩能力,以适应各种业务变化。如增加布点、增加设备、增加站点等。7.2.2 需求描述欲对3个web服务进行加速。为了描述方便,使用域名来进行说明。这3个加速站点为图片站点 、下载站点、主站 ,3个站点全部是静态内容,其页面文件主要是.html(htm)、.exe、.css、.jpeg、.js等,非常适合被缓存。服务的主要目标用户包括电信线路的用户、网通线路的用户、教育网的用户,其他线路的用户(如科技网、长城宽带等)访问请求被转向到网通线路的缓存服务器。为了实现这个目标,我们可能需要放置4组服务器来做缓存,即电信1组,网通2组,教育网1组。7.2.3 简单cdn的设计需求明确之后,接下来的设计工作包括:布点选取、工具选取、cdn结构设计等几部分。1布点选取布点包括源站、全局智能dns和缓存服务器集群。n 源站及全局智能dns选择互联互通性较好的第三方bgh机房;因为使用cdn服务的站点数量有限,故在缓存服务器以主机名的方式寻址源站。n 缓存服务器共4组,选择二线或三线城市的机房托管,能节省大量的资金(北京、上海等城市带宽价格大概在300 400元/兆/月,而偏远一点二三线城市(如安阳)1g带宽的年总费用才8 10万)。2工具选取工具包括操作系统、dns软件、缓存服务器软件、负载均衡软件、源站软件以及定制的脚本。n 所有的服务器均使用32位的centos 5.x。曾经使用过64位的系统,但在执行缓存服务器的缓存清理操作时,有些小问题。n dns使用bind-9.4.0。低于9.4.0的版本,可能不支持视图view,没有视图功能,智能dns就无法实现。n 缓存服务器有两种选择,一种是squid,另一种是varnish。squid多用在复杂cdn场景,它能实现缓存服务器间的层级关系(邻居形成姊妹、边缘节点与核心节点形成父子关系),功能强大而配置复杂;varnish为后起之秀,配置简单而性能卓越,维护起来也比较简单,因此本案选择varnish作为缓存工具。提示最初的选择是squid,后来因为在运行过程中tcp的连接数过高而换成varnish。n 负载均衡由ipvsadm和keepalived两部分组成。ipvsadm是核心,负责包转发和负载分摊;keepalived为框架,负责故障隔离和失败切换failover。n 可做web服务的软件比较多,因为站点为简单的静态文件,选择nginx比较省事。n 定制脚本的主要目的是自动刷新缓存服务,把这个脚本放在某个服务器上,只需执行一次(也可使用crontab自动调用)就能实现所有缓存服务器的缓存清理。3cdn结构设计我们可以根据cdn的角色来设计整个结构,这些角色包括源站、智能dns及缓存服务器3大部分,根据布点选择和其他因素综合考虑,可以绘出整个cdn的布局结构图如图7-3所示。全局智能dns源站web服务器集群图7-3 cdn服务器布局从图7-3中可以看出有两组缓存服务器放置在网通机房,这两组服务器不在同一个物理位置。这样做的主要目的是:bind规划视图view时,能收集到的地址比较有限,不再收集列表的其他ip地址段,则统统转发给网通b机房的服务器;另外网通b机房的带宽比较便宜,机器数量也比较多,跟其他网段的互联互通还可以。(1)源站源站为内容的原始发布,尽管采用cdn技术以后源站的负荷会变得很小,但为了有较高的可用性,可以把它部署成负载均衡集群。(2)智能dns强调ip地址列表为客户dns服务器所在网段的列表,而不是用户接入网络的ip段。客户端计算机所设定的dns,通常称为用户本地dns。同样,为了使其有较高的可用性,dns采用主从同步的架构。智能dns是用来实现用户访问转向功能的,即通过建立访问列表,判断用户的访问来源,确定其访问对象的位置。在本案中,建立电信、网通、教育网3个ip地址列表,未在这3个列表中的称为其他;每个列表关联一个bind的视图view,那么一共有4个视图view。地址列表可以自己收集,也可以花钱购买,地址列表越大,dns定向准确性越高。(3)缓存服务器缓存服务器是cdn环境使用量最大的设备。为保证缓存服务本身的高可用,每个布点的服务器都以负载均衡集群的方式存在。根据以往的经验,访问负荷比较重的机器,非常容易损坏硬盘,因此在设计时,尽可能地缓存内容到内存中,以增加访问的速度和延长机器的寿命。据说,一些cdn运营商已经开始用固态盘来做缓存空间。在简单cdn的运行环境中,由于我们所使用的资源有限(服务器数量有限、带宽有限),很可能出现超负荷运行的情况,如单个服务器tcp连接数过高、cpu负载过大、流量峰值带宽超出合同规定的范围等。为了随时掌握整个系统的运行情况,并能对其进行快速反应和调整,因此必须有监控系统对其服务、资源进行实时监控。为了对设计有一个整体把握,将上文所做的叙述做一个汇总,如表7-1所示。表7-1 cdn设计汇总角 色机器数量总带宽高可用方式放置位置备 注源站3个100m负载均衡集群第三方bgh机房跟其他服务器共用负载均衡器智能dns2个100mdns主从同步第三方bgh机房cdn运营商可能把它的dns服务器群放在中国科技网缓存服务器8*4100m*4+1g负载均衡集群电信、网通、教育网每个集群2个负载均衡器,6个真实服务器7.3 简单cdn的实现这里所讲“简单cdn的实现”主要偏重于技术上的实现,即怎么部署相应的服务和运行它。根据从简到繁的顺序,我们依次描述源站、缓存服务器及全局智能dns的部署及运行。7.3.1 源站的部署和运行源站web服务既可以是apache,也可以是nginx。基于性能和部署简单考虑,选用nginx做web工具。1安装nginx(1)下载最新的稳定版到当前目录: wget /download/nginx-0.7.63.tar.gz(2)解包: tar zxvf nginx-0.7.63.tar.gz(3)切换目录: cd nginx-0.7.63(4)检查是否存在:pcre rpm -qa | grep pcre(5)配置: ./configure prefix=/usr/local/nginx(6)编译、安装:注意不是configure带的选项越多越高明。 make;make install检查安装是否正常:查看是否生成指定目录/usr/local/nginx即可初步判定。2配置nginx根据前面的规划,需要把源站做成高可用的负载均衡环境,因此,需要在一个物理web上同时运行3个站点,然后由这3个web组成lvs集群。对于单个的nginx配置文件,就是运行3个虚拟主机。为了方便以后的维护,采取配置文件分割的方式进行处理。即配置文件分主配置文件和虚拟机配置文件。主配置文件include指令包含各个虚拟机配置文件。对应于3个不同的站点,其配置文件的名称分别为www.conf、dl.conf和images.conf。(1)主配置文件 /usr/local/nginx/conf/nginx.conf(部分参数来源于小毛)。user www;worker_processes 10;error_log /data/logs/error.log;events worker_connections 10240; use kqueue;http include mime.types; default_type application/octet-stream; include vhosts/*.conf; log_format main $remote_addr - $remote_user $time_local $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for; access_log /data/logs/access.log main; sendfile on; userid_expires max; tcp_nopush on; tcp_nodelay on; server_names_hash_bucket_size 256; client_header_buffer_size 256k; large_client_header_buffers 4 256k; client_max_body_size 20m; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; output_buffers 1 32k; postpone_output 1460; keepalive_timeout 60 10; gzip on; gzip_types text/plain text/html text/css application/x-javascript;(2)虚拟主机配置文件,一共3个。在/usr/local/nginx/conf下创建目录vhosts,然后在这个目录下创建3个虚拟机配置文件,其内容分别如下: 配置文件www.conf:server listen 80 ; server_name ; index index.htm index.html; root /mnt/html/www; error_page 404 /404.htm; autoindex_exact_size on; access_log /data/logs/nginx-access/www.log combined; 配置文件images.conf:server listen 80 ; server_name ; index index.htm index.html; root /mnt/html/images; error_page 404 /404.htm; autoindex_exact_size on; access_log /data/logs/nginx-access/images.log combined; 配置文件dl.conf:server listen 80 ; server_name ; index index.htm index.html; root /mnt/html/dl; error_page 404 /404.htm; autoindex_exact_size on; access_log /data/logs/nginx-access/dl.log combined;配置文件的根文档所在的目录/mnt/html为nfs服务的挂接点,3个物理服务器共享该目录,这样做的好处是修改站点时只需登录任意一个服务器做更改,而不必额外做同步操作。如果条件许可,使用分布式文件系统共享存储,将会得到更好的可用性和更快的访问速度。上述文件都配置好以后,安装配置文件的设定创建好相关的目录,然后把相关的站点文件复制到各自的目录。接着运行/usr/local/nginx/sbin/nginx t检查一下语法,无误后再执行命令 /usr/local/nginx/sbin/nginx 启动nginx。接着,我们在windows客户端机器修改系统的hosts文件,把如下的行追加进文件hosts:00 00 00 保存文件以后,再用浏览器分别访问这3个站点,以检验配置的正确性。3配置负载均衡(1)安装和配置其他两个服务器的nginx,并逐个检查其正确性。因为3个服务器均以共享方式挂接网站的目录,因此只需要安装和配置好nginx,而不必再复制站点的内容到本地文件系统。(2)部署负载均衡,具体过程参见“负载均衡”一章。负载均衡被正确配置和启动以后,我们再回来修改客户端windows 的系统hosts文件,使负载均衡的vip与域名绑定,然后再用浏览器访问3个域名,检查加入负载均衡环境后,各站点的运行情况。记住这个vip(9),以后我们在缓存服务器上会使用它。7.3.2 缓存服务器的部署和运行说明最开始,我使用了squid做缓存工具,但是运行一段时间以后,发现负载比较大,具体表现在单个服务器的tcp连接数(established)一般在20000以上,从而导致一些访问失败。后来,把它换成varnish,则单服务器的连接数稳定在1000以下的水平。缓存服务器部署包括负载均衡和缓存工具两部分的操作。1安装varnish(1)下载varnish到本地目录:wget /projects/varnish/files/varnish/1.1.2/varnish-1.1.2.tar.gz/download (2)解包:tar zxvf varnish-1.1.2.tar.gz(3)切换目录: cd varnish-1.1.2(4)配置,编译和安装:提示撰写本文的时候,varnish的最新稳定版本是2.0.6。和旧的1.x版本相比,其配置文件的书写规则有较大的变化,具体请参照官方的文档或手册。./configure prefix=/usr/local/varnish ; make ; make install2配置varnishvarnish的配置分两部分:源站名称的解析和varnish本身的配置文件。在我的应用中,总共有3个站点需要缓存,因此需要解析出3个源站和配置3个站点的缓存。(1)源站地址解析这里我们再来回顾一下源站地址解析的作用:缓存服务器通过这个机制来寻找源站在何处。在我们这个小规模的场景,用本地hosts绑定域名即可实现源站地址解析,而在复杂的cdn环境,则需要使用专门的dns服务器来完成这个工作。修改后的服务器的/etc/hosts文件如下:9 9 9 修改保存后,用域名检查其网络连通性,如ping 。(2)配置varnishvarnish解包以后,可在解包后的目录找到一个名为default.vcl的配置样例文件,参考这个样例文件,则能编写出符合我们实际需求的配置。这里,我先列出完整的配置文件,然后再做一些说明。more /usr/local/varnish/sery_vcl.conf1 #write by sery,2009-10-122 backend www 3 set backend.host = ; 4 set backend.port = 80; 5 67 backend images8 set backend.host = ;9 set backend.port = 80;10 1112 backend dl13 set backend.host = ;14 set backend.port = 80;15 161718 acl purge 19 localhost;20 ;21 /24;22 232425 sub vcl_recv 26 if (req.request = purge) 27 if (!client.ip purge) 28 error 405 not allowed.;29 30 lookup;31 3233 if (req.http.host ) 34 set req.backend = www; 35 if (req.request != get & req.request != head) 36 pipe;37 38 elseif(req.url .(php|cgi)($|?) 39 pass;40 41 else 42 lookup;43 44 4546 if (req.http.host ) 47 set req.backend = images;48 if (req.request != get & req.request != head) 49 pipe;50 51 elseif(req.url .(php|cgi)($|?) 52 pass;53 54 else 55 lookup;56 57 5859 if (req.http.host ) 60 set req.backend = dl;61 if (req.request != get & req.request != head) 62 pipe;63 64 elseif(req.url .(php|cgi)($|?) 65 pass;66 67 else 68 lookup;69 70 71 72 else 73 error 404 sery cache server; 74 lookup;75 76 7778 sub vcl_hit 79 if (req.request = purge) 80 set obj.ttl = 0s;81 error 200 purged.;82 83 8485 sub vcl_miss 86 if (req.request = purge) 87 error 404 not in cache.;88 89 9091 sub vcl_fetch 92 if (req.request = get & req.url .(html|htm|css|txt|js)$) 93 set obj.ttl = 600s; 94 95 else 96 set obj.ttl = 5d;97 98 n 2 15行定义需要做缓存的域名。n 18 22行定义哪些主机或网段可以执行缓存刷新操作。n 25 76行定义用户请求及缓存处理的方法:缓存哪些域名、不缓存哪些对象(如动态对象-php,jsp等)。不缓存的内容,则把用户的请求直接转向到源站处理。n 91 98行定义缓存对象的过期时间。本案中,凡是url以.html、.htm、.css、.txt、.js结尾的,其缓存期限设定为600秒,其他不在这个列表中的url则设定为5天。3运行varnish与其他开源软件相比,varnish的启动确实很复杂。为了能正确运行varnish并检验其是否正常运行起来,建议以如下的步骤进行操作。(1)检查/etc/hosts文件是否正确。在本案中,可以在缓存服务器ping 等3个域名,检查地址解析是否正确、网络是否连通。(2)检查varnish配置文件的书写是否有遗漏或错误。一般最容易犯的错误是少写花括号“”。(3)创建缓存目录。为提高可靠性,我把缓存目录创建到其他分区。varnish安装的目录为/usr/local/varnish,则创建的目录为/var/vcache。注:/var与/usr是不同的分区。(4)修改系统内核参数,以优化系统的性能。我的某个服务器的系统内核参数新增内容如下(可选):net.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_keepalive_time = 30net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.ip_local_port_range = 5000 65000net.ipv4.tcp_max_syn_backlog = 8192dev_max_backlog = 1000net.ipv4.tcp_max_tw_buckets = 50000net.ipv4.ip_conntrack_max = 655360filter.ip_conntrack_tcp_timeout_established = 180net.ipv4.tcp_rmem = 4096 87380 524288net.core.rmem_max = 1048576(5)启动varnish。内容实在太长,得写成好几行才行:/usr/local/varnish/sbin/varnishd -n /var/vcache -f /usr/local/varnish/sery.vcl -a :80 -s file,/var/vcache/varnish_cache.data,2047m -w 30000,51200,10 -t :3500 -p client_http11=on提示曾经参看张宴的文档(/post/313/),出于安全考虑,他在部署时使用了其他用户来运行varnish。而在我的环境里,由于缓存服务器只做缓存用,所以舍弃了这个步骤,直接用root来操作了。为了能开机自动运行varnish,需要把这个内容追加到文件/etc/rc.local。(6)检验varnish是否正常运行:n 检查进程。正常运行的varnish,应该是两个进程。n 检查目录/var/vcache,查看是否有varnish_cache.data等文件自动生成。n 检查tcp 80端口是否处于监听状态。n 查看系统日志,了解varnish的启动状态。如果有问题的话,会在系统日志得到有用的排错信息。n 查看varnish 缓存情况:/usr/local/varnish/bin/varnishstat n /var/vcache。(7)varnish缓存功能验证:n 在其他windows主机修改hosts文件,新增如下3行:21 21 21 n 用此windows主机的浏览器访问 21 。正常情况下,应该访问不到任何页面(404错误)。n 用此windows主机的浏览器分别访问 等3个域名,如果都能正常访问到页面文件,则表明varnish完全按照我们的意愿进行工作。接下来,在其他缓存服务器上进行相同的操作,这里不再赘述。4缓存服务负载均衡配置(1)配置:请参看第6章“负载均衡”相关内容。(2)检验varnish集群服务(负载均衡集群的vip是20)。(3)在其他windows主机修改hosts文件,新增如下3行。20 20 20 (4)用此windows主机的浏览器访问 20。正常情况下,应该访问不到任何页面(404错误)。(5)用此windows主机的浏览器分别访问 等3个域名,如果都能正常访问到页面文件,则表明varnish完全按照我们的意愿进行工作。(6)在其他的机房做同样的部署和操作。7.3.3 智能dns的部署和运行智能dns的部署和运行分为:收集ip地址、部署dns以及运行这几个部分。1收集ip地址(1)收集的策略根据前边的设计,我们需要3份地址列表,以对应电信、网通及教育网的用户。已经分配出去的ip地址那么多,我们应当怎样收集和归类呢?如果地址列表过大,可能会严重影响dns服务器的性能(bind将遍历一个很大的文件)。另外,可能有些ip地址即使收集上来了,也不会有什么帮助,如普通adsl拨号自动分配的ip。在整个cdn环节,由哪些组件来进行寻址呢?答案是用户使用的dns(自己在电脑里指定的,称本地dns)和做cdn名称解析dns的这部分。因此,我们只需要收集互联网上dns服务器的ip地址,就可以达到我们的目的。这样一来,收集下来的数量就会大大降低。为了更进一步缩小范围,一般使用网络地址的形式,如/16。在ip列表文件,就这么一行,却可以囊括很多dns服务器。(2)收集的方法 网上查找。 利用shell脚本,从apnic(http:/www. )抓取。我在网上找了一个shell脚本get_ip.sh,稍微修改了一下,其内容如下(原作者不详):#!/bin/sh file=/root/apnic/ip_apnic wget /apnic/stats/apnic/delegated-apnic-latest -o $file grep apnic|cn|ipv4| $file | cut -f 4,5 -d|sed -e s/|/ /g | while read ip cnt do echo $ip:$cnt mask=$(cat eof | bc | tail -1 pow=32; define log2(x) if (x netname=whois $ | sed -e /./h;$!d; e x;/netnum/!d |grep netname | awk print $2|awk -f- print $1 case $netname in cnc) echo $ip/$mask unicom ; cncgroup| unicom) echo $ip/$mask unicom ; chinatelecom|chinanet) echo $ip/$mask telecom ; cernet)echo $ip/$mask eud; *) echo $ip/$mask other ; esac done执行这个脚本,将在目录/root/apnic生成unicom、telecom等几个文件。其中unicom代表新联通的ip地址段,telecom代表电信的ip地址段。 购买ip地址段或者通过与cdn服务商合作获得ip地址列表或api接口。(3)ip地址列表处理。通过上述方法收集来的ip,把它们各自合并【注1】、排序、删除重复的,备用。处理好后的ip列表文件分别为:unicom_ip、telecom_ip、edu_ip。【注1】到本文撰写时,网通与联通公司已经合并,尽管在apnic能查出cnc标识的ip分配列表,但数量已经很少,我在处理列表时,已经把它与unicom进行合并了。2dns服务器部署(1)选择dns服务器操作系统平台和软件。操作系统选择centos或freebsd,dns的软件则选择bind,理由如下:n 开源软件,免费且能按要求定制。n 支持视图view。其他dns软件可能没有这个功能。(2)安装和初步配置bind。具体可参见本书第4章“域名服务dns”相关内容。(3)产生主从dns同步所需的tsig key。共有4个视图,因此需要执行4次tsig key 生成操作。其操作步骤如下:dnssec-keygen -a hmac-md5 -b 128 -n host uincomdnssec-keygen -a hmac-md5 -b 128 -n host telecomdnssec-keygen -a hmac-md5 -b 128 -n host edudnssec-keygen -a hmac-md5 -b 128 -n host any执行完毕后,将生成以下8个文件,如图7-4所示。图7-4 tsig加密生成key文件对这些文件都是文本文件,可以用任何文本编辑器打开。通过对比文件对,将发现k*.key与k*.private之间的对应关系(正因为如此,我把它们叫做文件对)。在bind的主配置文件里,我们所需的tsig key就从
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年物联网高级工程师核心知识题库及解析
- 2025年特岗教师招聘考试初中数学模拟试题及答案详解
- 2025年物业管理师面试指南必-备知识回顾与预测题解析
- 2025年初中物理特岗教师职位深度解读与面试考点预测
- 2025年外贸业务员面试模拟题与商务英语实战应用解答
- 2025年初学炼钢技能水平测试卷设计
- 2025年火电行业运行值班员高级专业知识面试题
- 2025年职业技能安全生产主要负责人危险化学品生产单位-危险化学品经营单位参考题库含答案解析
- 2025年特种作业类危险化学品安全作业胺基化工艺作业-过氧化工艺作业参考题库含答案解析
- 2025年特种作业类危险化学品安全作业磺化工艺作业-氧化工艺作业参考题库含答案解析
- 棬槽沟村道路建设实施方案
- 中国民族史纲要罗佑贤
- JJF(石化)053-2021间隙式湿膜制备器校准规范
- 4.3闭环控制系统的工作过程教学设计-高中通用技术必修《技术与设计2》
- 2023版设备管理体系标准
- 产品设计程序与方法-整理版
- 办公家具供货安装、保障实施及售后服务方案
- 《曼陀罗绘画疗愈-初三减压》PPT
- 企业外包业务安全生产专项检查表(全面)1管理学资料
- 航海英语听力与会话第四版朗读题70篇
- 垃圾中转站设备安全操作规程
评论
0/150
提交评论