《Cdn设计实现及负载匀衡》由会员分享,可在线阅读,更多相关《Cdn设计实现及负载匀衡(35页珍藏版)》请在金锄头文库上搜索。
1、CDN设计实现及负载均衡解决高并发访问及缓存加速的一种途径需求的产生o南北互联问题导致北方的用户访问电信网内的服务器十分缓慢和艰难,南方的用户访问网通网内的服务器也是如此o高并发、大流量的站点o访问加速nginx承担每个机房承担每个机房Web负载均衡服务负载均衡服务简单的简单的Nginx负载均衡配置负载均衡配置 upstream bbs_server_pool server 192.168.1.15:80 weight=1 max_fails=2 fail_timeout=30s; server 192.168.1.16:80 weight=1 max_fails=2 fail_timeout
2、=30s; server 192.168.1.17:80 weight=1 max_fails=2 fail_timeout=30s; server 192.168.1.18:80 weight=1 max_fails=2 fail_timeout=30s; 在nginx.conf配置文件中,用upstream指令定义一组反向代理/负载均衡后端服务器池。简单的简单的Nginx负载均衡配置负载均衡配置 server listen 80; server_name *; location / proxy_pass http:/bbs_server_pool; proxy_set_header Ho
3、st $host; proxy_set_header X-Forwarded-For $remote_addr; access_log off; 简单的简单的Nginx负载均衡配置负载均衡配置oproxy_pass http:/bbs_server_pool; 用于指定反向代理的服务器池。o proxy_set_header Host $host; 当后端Web服务器上也配置有多个虚拟主机时,需要用该Header来区分反向代理哪个主机名。oproxy_set_header X-Forwarded-For $remote_addr; 如果后端Web服务器上的程序需要获取用户IP,请从该Heade
4、r头获取。Nginx负载均衡双机互备负载均衡双机互备正常情况下,两台Nginx负载均衡服务器全部处于活动状态,对外提供服务。Squid 反向代理加速网站 Squid 反向代理的实现原理反向代理的实现原理客户端请求访问 WEB 服务时,DNS 将访问的域名解析为 Squid 反向代理服务器的 IP 地址,这样客户端的 URL 请求将被发送到反向代理服务器。如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端,否则反向代理服务器将向后台的 WEB 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。 配置的系统环境:配置的系
5、统环境: 一台 DNS 服务器:操作系统 Freebsd,软件 BIND 9.5,IP 192.168.76.222 ; 三台 Squid 服务器:操作系统 Linux AS 4,软件 Squid 3.0,相应的 IP 如下: Squid1:192.168.76.223 Squid2:192.168.76.224 Squid3:192.168.76.225 三台 WEB 服务器:操作系统 Linux AS 4,应用软件 Tomcat 5.0+Mysql,相应的 IP 地址如下: webServer1:210.82.118.195 webServer2:192.168.76.226 webSer
6、ver1:192.168.76.227配置配置 Squid1 服务器服务器 # 配置 squid2、squid3 为其邻居,当 squid1 在其缓存中没有找到请求的资源时, 通过 ICP 查询去其邻居中取得缓存 cache_peer sibling 80 3130 cache_peer sibling 80 3130 # squid1 的三个父节点,originserver 参数指明是源服务器, round-robin 参数指明 squid 通过轮询方式将请求分发到其中一台父节点; squid 同时会对这些父节点的健康状态进行检查,如果父节点 down 了, 那么 squid 会从剩余的
7、 origin 服务器中抓取数据 cache_peer 210.82.118.195 parent 8080 0 no-query originserver round-robin name=webServer1 cache_peer 192.168.76.226 parent 8080 0 no-query originserver round-robin name=webServer2 cache_peer 192.168.76.227 parent 8080 0 no-query originserver round-robin name=webServer3 # 将 域的请求通过 R
8、R 轮询方式转发到三个父节点中的一个 cache_peer_domain webServer1 webServer2 webServer3 Nginx,squid 现在有许多大型的门户网站如 SINA 都采用 squid 反向代理技术来加速网站的访问速度,可将不同的 URL 请求分发到后台不同的 WEB 服务器上,同时互联网用户只能看到反向代理服务器的地址,加强了网站的访问安全。 最新的Nginx 0.8.35版本,proxy_cache和fastcgi_cache已经比较完善,加上第三方的ngx_cache_purge模块(用于清除指定URL的缓存),已经可以完全取代Squid。我们已经在
9、生产环境使用了 Nginx 的 proxy_cache 缓存功能超过两个月,十分稳定,速度不逊于 Squid。在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。而在性能上,Nginx对多核CPU的利用,胜过Squid不少。另外,在反向代理、负载均衡、健康检查、后端服务器故障转移、Rewrite重写、易用性上,Nginx也比Squid强大得多。这使得一台Nginx可以同时作为“负载均衡服务器”与“Web缓存服务器”来使用。memcached介绍Memcached由Danga Interactive开发,用于提升LiveJ访问速度的LJ每秒动态页面访问量几
10、千次,用户700万。 Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问. 通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统, 这种方法不仅解决了共享内存只能是单机的弊端, 同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度Consistent Hashing算法 为了防止由于对cache结点的hash算法结果的不均匀,导致cache结点在圆环上的分布过于不均,使得每个cache的负载不同,consistent ha
11、shing算法还引用了virtual node的概念。也就是在对cache结点计算hash的时候,通过对hash过程的微调,使每个结点都算出很多(例如200个)hash值,这些值以virtual node的形式添加到环上,所有属于这些virtual node的缓存对象都映射到该实际结点上,这样就基本能保持每个cache结点在hash空间中cover住基本同样多的对象了.Cache 命中率算法:服务器台数(n)和增加的服务器台数(m)计算增加服务器后的命中率计算公式如下: (1 - n/(n+m) * 100一般的cache利用Consistent Hashing 上图的状态中添加一台memca
12、ched服务器。余数分布式算法由于保存键的服务器会发生巨大变化 而影响缓存的命中率,但Consistent Hashing中,只有在continuum上增加服务器的地点逆时针方向的 第一台服务器上的键会受到影响。因此,Consistent Hashing最大限度地抑制了键的重新分布。 而且,有的Consistent Hashing的实现方法还采用了虚拟节点的思想。使用一般的hash函数的话,服务器的映射地点的分布非常不均匀。 因此,使用虚拟节点的思想,为每个物理节点(服务器) 在continuum上分配100200个点。这样就能抑制分布不均匀, 最大限度地减小服务器增减时的缓存重新分布。通过下
13、文中介绍的使用Consistent Hashing算法的memcached客户端函数库进行测试的结果是, 由服务器台数(n)和增加的服务器台数(m)计算增加服务器后的命中率计算公式如下:(1 - n/(n+m) * 100常见的应用场景:一般用于静态对象o网站的页面加速(指静态)o下载服务:类似杀毒软件有客户端自动更新机制的下载,更需要cdno视频:特别是在线播放类型,如FLV传统的访问模式o所以的客户端访问同一个对象 众矢之的众矢之的Cdn的访问模式o把用户请求分散Cdn定义-摘自http:/ Delivery Network,即内容分发网络,是位于网络层与应用层之间的网络应用,其目的是通过
14、在现有的Internet中增加一层新的网络架构,通过智能的中心管理系统,使用广泛分布的服务器群来帮助网站、媒体运营商等满足用户的各类需求。 Cdn原理o内容缓存到不同地区的缓存服务器o就近访问原则oDns视图(view)区分用户的访问来源Cdn实现的实现o关键技术 (1) dns视图(view):bind9 或dnspod (2)内容缓存:squid,nginx o辅助技术 (1)负载均衡:lvs+keepalived(win下是NLB群集) (2)监控:nagios,cacti Cdn设计要点o选定核心缓存节点(电信、网通各2个)o选定边缘缓存节点(覆盖到省)o归类ip地址:哪些ip地址属于
15、哪些运营商?Dns的解析依赖一个庞大的地址库判定客户请求来源,然后才可能实现用户的就近访问。o容错和负载均衡 如果自己做一个简单的cdn应用,可能只需要电信和网通2个节点,不必有边缘和核心的区分;ip库也简化成电信、网通、其他,即dns只涉及3个视图(VIEW)一个样例用户dns处理o一般情况下,用户的dns用A记录直接把主机名解析到源站IP. 为了做cdn及负载。我们将域名指向多台缓存ip(vip),利用dns(dnspod)做线路判断。Vip利用squid或nginx做负载真正的web服务。 集群与负载均衡o所有节点都在各自的网段采取集群和负载均衡技术oLvs结合keepalived是最佳
16、的选择压力测试,监控:o压力测试(apache下的ab; webbench)o服务及主机监控:nagios是很不错的选择。o流量监控: cacti或mrtgo报警:使用mail方式,使用飞信短信方式。可以外购短信服务,把它整合到监控平台中搜企平台规划图linux1,线路平台,利用dnspod分配不同线路用户。2,用nginx+(程序)+mysql(单独服务),实现web平台 用vip实现nginx反向代理。(双机互备)3,用memcached 实现数据库缓存。consisten hashing实现在增,减 men服务时稳定命中率。4,索引利用sphinx+mysql实现。搜企平台结构Windo
17、w平台下1,先做dnspod做为智能解析。区分客户线路2, 用squid 或nginx做为静态页面缓存 存缓3,利用nginx做为静态页面存储(网页,图片,ccs等)。 并做为web负载均衡,和缓存。4,利用nginx负载技术,做windos下iis+tocmat+solr+solr-memcache的动态处理。5,利用memcache进行数据缓存。数据库为sql20056, 数据同步。Linux下用sersync;window下用cwrsync搜企搜企.cn平台运维规划思路及拓扑图解释平台运维规划思路及拓扑图解释需求点: 考虑对像 互联网上不同地区,不同线路的客户能快速查询搜企.cn网站的信
18、息。且能准确返回给客户有用的信息。(注意点“不同线路”“快速即响应时间”“准确性”)总之一句话,在有限的资源(人力资源,硬件资源,带宽资源,ip资源)下,以人为本,以客户最好的需求为前提,做到让客户喜欢,需要的平台。规划平台主要几点思路 1,dnspod做为智能解析,区分不同线路的客户,提高因线路不同而造成的响应速度。(中国目前有电信,网通,铁通等线路)。2,利用squid集群(最好3台以上的配置)做为最前端。做为静态信息的缓存和做为后端真实web服务的反向代理功能。 Squid做为前端,提高了访问速度,对真实的web也启到安全性的做用。Squid配置几点:A)可用dns服务做为轮询,向访问信
19、息分配到不同的squid服务。B)前面的A项,可改为利用lvs+keepalive实现负载。(好处是健康状态检查,权重分配),对不同硬件配置,不同带宽的服务群是一个好的选择,能较好的分配流量走向。3,nginx做为真实的web服务,用于存储静态信息(静态网页,图片,js,css,swf等静态信息)。Nginx具有高并发,稳定性,低消耗,故障转移等特性。Nginx配置几点:A)每组2台web服务。利用nginx的负载技术,实现双机互备,全自动切换,故障转移。B)利用sersync对2台的信息进行同步(些系统比rsync的优点是自动加入了crontab功能,和进程功能,只对删,减,增的数据同步,不会列表等占用资源的操做)。4,搜索引擎平台为windows2003系统架设iis+apache+tomcat+solr。5,Sql2005做为solr搜索的数据库6,Memcached做为solr的缓存平台(solr要打memcache补丁)。利用memcached将负载的几台solr搜索服务的信息共同创建缓存,提高了命中率,和搜索速度。