CDN Play: Eason
简介
CDN content delivery network, 字面翻译:内容分发网络,它利用部署在各地的服务器构建一个网络平台使用GSLB技术引导用户去访问最佳的节点(通常为最近), 而这个节点的CACHE服务由于缓存了请求的内容,从而使得用户访问响应加快,也减轻源站的负载。前面的上半句话对应CDN的控制平面, 而后半句则是数据平面,参考之前的介绍过的Traffic Control Introduction。 这篇文章的目的是更多的从实操角度让读者,包括我更好的理解CDN内部运作原理。同时从CDN维基百科作为 延伸CDN了解的入口点。
场景
从namesilo买了域名abc.site(假的😄),备案太麻烦了,所以我们就在某云上购买香港云主机用来建网站,站点域名使用www.abc.site。但是 如果网站的用户大多数是大陆境内,又有新的问题,由于众所周知的GFW, 天朝P民访问大陆境外网络,会时不时的被调戏一下。这时候就该CDN上场了,为了不抽风,我们又在某云上购买了一个 上海的云主机作为加速节点。 构成CDN主要由两个系统组成:GSLB和CACHE, GSLB通常是使用所谓的智能DNS实现,而CACHE使用缓存代理软件。本篇文章使用PowerDNS和Apache Traffic Server来演示。
实操
部署pdns
-
参考官方链接, 安装pdns授权器(关于dns递归器和授权器的定义,大家自行google)
yum install epel-release yum-plugin-priorities -y && curl -o /etc/yum.repos.d/powerdns-auth-44.repo https://repo.powerdns.com/repo-files/centos-auth-44.repo && yum install pdns -y
-
安装pdns授权器 geo插件(i.e 所谓初级智能dns feature)
yum install pdns-backend-geoip -y
-
安装pdns-backend-geoip需要的地理库
-
我们需要到maxmind注册,获取License key
-
在部署的机器上安装geoipupdate,用于下载地理库文件, 编辑/usr/local/etc/GeoIP.conf文件,主要添加3项,如下所示, 最后执行 geoipupdate -v 下载GeoLite2-City.mmdb GeoLite2-Country.mmdb
AccountID <your_id> LicenseKey <your_license_key_from_maxmind> EditionIDs GeoLite2-Country GeoLite2-City
-
-
配置pdns-backend-geoip
-
修改pdns.conf
include-dir=/etc/pdns/pdns.d
-
创建/etc/pdns/pdns.d/geoip.conf
launch=geoip geoip-database-files=/usr/local/share/GeoIP/GeoLite2-City.mmdb /usr/local/share/GeoIP/GeoLite2-Country.mmdb geoip-zones-file=/usr/local/share/zone.yaml edns-subnet-processing=true
-
配置geoip-zones /usr/local/share/zone.yaml, refer
domains: - domain: abc.site ttl: 30 records: abc.site: - soa: ns1.abc.site hostmaster.abc.site 2014090125 7200 3600 1209600 3600 - ns: content: ns1.abc.site ttl: 60 - ns: ns2.abc.site - mx: 10 mx.abc.site - txt: "your ip is %ip" ns1.abc.site: - a: content: <your_hk_ip> ttl: 86400 ns2.abc.site: - a: content: <your_shanghai_ip> ttl: 86400 unknown.unknown.geo.abc.site: - a: <your_hk_ip> unknown.as.geo.abc.site: - a: <your_hk_ip> cn.as.geo.abc.site: - a: <your_shanghai_ip> services: www.abc.site: default: ['%co.%cn.geo.abc.site', 'unknown.%cn.geo.abc.site', 'unknown.unknown.geo.abc.site']
-
-
systemctl start pdns
在你的hk, shanghai云主机上按照上面的步骤进行pdns部署,之后到namesilo修改站点域名www.abc.site的ns授权器为你自建的ns1.abc.site, ns2.abc.site.
部署traffic server
直接参考这里
静态网站
用nginx在你的hk云主机上部署一个静态网站, 配置server_name www.abc.site.
验证
使用站长工具, 浏览器输入 http://ping.chinaz.com/www.abc.site, 我们就可以看出国内节点输出的响应IP是
这样我们的最初CDN诞生了,它的名字叫Eason.