如何用BIND, GeoIP, Nginx, Varnish来创建你自己的高效的CDN网络?
CDN,意思是Content Distrubtion Network,意思是内容分发网络,简单的说,就是全地域范围内的负载均衡,全地域的概念可以是全国,也可以是全世界。由统一的DNS服务器进行地址转发,选择离用户最近的地区服务器进行负载均衡。本质上是从一个机房内的负载均衡扩展到了全世界范围内的负载均衡。同时可以将本地化的内容,由当地的服务器实现。做浏览器的地区自动选择。
比如在中国,被人为划分成两大区域,北方是网通,南方是电信。这两个网络之间互访是比较慢的。作为大型网站,一种解决办法是将全部服务器架设在双线或三线ISP处,由ISP来提供路由上的选择。这样做,线路的成本会比较高。另一种办法就是将服务器架设在两边,南方一台,北方一台,然后由服务器自己选择,如果IP在电信,就转发请求到南方的服务器,如果是网通就转发到北方的服务器。
再扩大范围,可以将美国来的请求交由美国服务器处理,这样也缩短了用户在路由上的等待时间。这就是内容分发网络。
而作为这个网络上的所有节点,都可以当成虚拟服务器来看待。至于在各地的服务器如何做负载均衡,可以由各节点之间完成。
准备工作如下:你需要下载如下软件以实现上述功能
Nginx,BIND,GeoIP,Varnish
接下来是编译和安装bind9和geoip
# tar -xzvf bind-9.2.4.tar.gz
# tar -xzvf GeoIP-1.4.6.tar.gz
# cd GeoIP-1.4.6
# ./configure –prefix=/usr/local/geoip
# make
# make install
# cd ..
# patch -p0 < bind-9.2.4-geodns-patch/patch.diff //给bind9打补丁,让bind9直接支持geoip库
# cd bind-9.2.4
# CFLAGS=”-I/usr/local/geoip/include” LDFLAGS=”-L/usr/local/geoip/lib -lGeoIP” ./configure –prefix=/usr/local/bind
# make
# make install
装好bind后我们来制作named.conf
view “us” {
// 匹配北美的客户端 US & Canada
match-clients { country_US; country_CA; };
// Provide recursive service to internal clients only.
recursion no;
zone “cdn.xianglei.com” {
type master;
file “pri/xianglei-us.db”;
};
zone “.” IN {
type hint;
file “named.ca”;
};
};
view “latin” {
// 匹配到南美国家
match-clients { country_AR; country_CL; country_BR; };
recursion no;
zone “cdn.xianglei.com” {
type master;
file “pri/xianglei-latin.db”;
};
zone “.” IN {
type hint;
file “named.ca”;
};
};
照此办理,你也可以匹配到欧洲,非洲等等,然后来开始制作nginx和varnish
注意,以上内容是你要在主节点服务器上做的,主节点服务器只负责对DNS请求进行转发。
约定一下,我们将Bind服务器叫做动态节点服务器,Nginx+Varnish叫做边界服务器。
以下内容是副节点服务器需要做的,也就是实际在某个地区放置的服务器
# ./configure –prefix=/usr/local/nginx –with-http_realip_module
# make
# make install
并配置Nginx
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream dynamic_node {
server 1.1.1.1:80; # 1.1.1.1 是主DNS节点的IP地址
}
server {
listen 8080;
server_name cdn.xianglei.net;
location ~* \.(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|htm|html|js|css|mp3|swf|ico|flv)$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://dynamic_node;
proxy_store /var/www/cache$uri;
proxy_store_access user:rw group:rw all:r;
}
以上我们用nginx只对静态文件进行缓存,将静态文件缓存在/var/www/cache文件夹下,如果你没有的话,需要创建这个文件夹。并且nginx监听的是8080端口,这是因为,我们需要用varnish来监听80端口进行动态文件的转发。这里实际上是用nginx做了一个静态文件的反向代理和缓存的服务器,而真正让用户能够看到网页和动态文件的反向代理是varnish,而静态和动态文件的分开存放,能将效率提升不少。
最后我们来配置varnish服务。
# tar -xzvf varnish-2.1.2.tar.gz
# ./configure –prefix=/usr/local/varnish
# make
# make install
然后是varnish的选项
backend default {
.host = “127.0.0.1″;
.port = “8080″;
}
sub vcl_recv {
if (req.url ~ “\.(js|css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf)$”) {
return (lookup);
}
}
sub vcl_fetch {
if (req.url ~ “\.(js|css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf)$”) {
unset obj.http.set-cookie;
}
}
其他的配置内容可参看varnish的配置文章。
总结:
这样做的好处在于:
1.从根源上解决了DNS在轮询上的不确定性,能够做到在DNS上的快速响应。也避免了过去用Nginx+GeoIP时的负载高的问题。毕竟DNS的计算要比Nginx小多了。
2.降低大网站的服务器负载压力和运营成本,毕竟F5BigIP和双线路的价格和服务费都太高了。
3.易扩展性强,如某地区负载压力大,只需在该地区增加边界服务器组的web server即可完成,无需考虑跳转问题。
其他优点我再想想。
来源:http://slaytanic.blog.51cto.com/2057708/516093
分享到:
相关推荐
首先,CDN技术的基本原理是通过在全球各地建立多个节点,将用户的请求定向到最近的节点,以此来实现快速的内容分发。阿里云CDN作为国内领先的CDN服务提供商,拥有覆盖全球20多个国家的200多个节点,具备6Tbps的服务...
CDN技术的关键组成包括: - 源站:原始内容的存放地点,是CDN系统的核心。内容源站负责存储原始数据和文件。 - 缓存服务器:这些服务器存储着从源站拷贝的数据副本,它们分布在全球各地,以接近最终用户的位置。 ...
在探讨360-CDN技术时,我们需要关注其技术架构、实现原理、核心问题以及关键点和性能等方面。下面详细介绍这些知识点: 1. CDN技术架构: CDN(Content Delivery Network,内容分发网络)的核心作用是通过在互联网...
### CDN技术详解 #### 一、CDN技术概述 CDN(Content Delivery Network)即内容分发网络,是一种广泛应用于互联网的技术方案,旨在提高网站或应用的内容传输效率与用户体验。通过在全球范围内部署节点服务器,CDN...
### P2P和CDN技术融合实现流媒体业务 #### 概述 随着互联网技术的飞速发展,网络多媒体应用已成为人们日常生活与工作中不可或缺的一部分。流媒体技术因其实时性与便捷性,得到了广泛的应用。流媒体技术允许数据在...
【CDN技术原理深度解析】 随着互联网的飞速发展,人们对网络服务的品质和访问速度有了更高的要求。尽管网络带宽不断提升,用户基数不断增长,但Web服务器的负荷和长距离传输仍然可能导致响应速度变慢,给用户带来...
以下是对CDN技术演进及其关键要素的详细分析: 1. **CDN的起源与发展** 在2000年左右,随着HTTP网页内容需求的增长,CDN成为了解决网络拥堵和提高用户体验的重要工具。如今,CDN不仅服务于网页内容,还涵盖了视频...
在选用CDN服务时,以下几个核心的节点质量和关注点是决定服务质量的关键因素: 节点质量:CDN服务的质量不仅受到节点数量的影响,更重要的是节点的配置和布局。骨干节点因其网络位置优越,能够提供更高的网速和更好...
根据给定文件的信息,我们可以提炼出关于视频CDN(内容分发网络)架构的重要知识点。 ### 一、视频CDN架构概述 视频CDN架构是一种专门用于高效传输视频内容的技术框架,它通过在网络边缘部署缓存节点的方式,将...
随着技术的进步和社会需求的增长,可以预见CDN技术将在未来的互联网发展中扮演更加重要的角色。 总之,CDN作为一种有效提升网络访问速度和用户体验的技术手段,其重要性和应用场景将会不断扩大,成为构建高性能...
在Azure CDN中,终结点是CDN配置的一个关键组成部分,它是一个全局可访问的URL,用于提供内容。当创建新的CDN终结点时,系统会尝试将你的源内容复制到Azure CDN的各个边缘节点,以便用户可以从最近的节点获取内容,...
### 关于CDN的核心知识点与应用实践 #### 一、CDN的概念与作用 **CDN(Content Delivery Network)**,即内容分发网络,是一种广泛应用于互联网的技术,旨在为用户提供快速、稳定的内容访问体验。它通过在全球范围...
此外,也可以评估新的CDN技术或改进,比如利用机器学习预测用户需求,或优化边缘计算来处理更多本地化的内容。 总的来说,CDN内容分发网络仿真软件在理解和优化CDN网络方面发挥着重要作用,它能够为研究人员和从业...