周梦康 发表于 2015-12-24 18978 次浏览 标签 : cdn

之前切换 cdn 都是运维主导工作,他来负责流量带宽的监控,回源监控。我仅仅需要听候调遣,配合修改业务代码即可。这次由我自己一个人弄,正好就做做笔记。

需求

把网宿 maa 的 cdn 切 400M 到蓝讯 mplus 上。

切换原理

最初,我们配置了n (比如 n=100)个二级域名,然后把这 n 个域名中的一半解析到网宿,另一半解析到蓝讯。比如:

a001.zhoumengkang.com 解析到了蓝讯,回源的地址为y.a001.zhoumengkang.com

a001.mengkang.net 解析到了蓝讯,回源的地址为y.a001.mengkang.net

图片资源是分布式存储存储在各个主机上,要确保上面两个回源域名指向的服务以及服务器路径是一样的。这样,这两个域名就可以相互切换了,但是切换的时候需要观察回源的压力。

这里说的“切”是从我们自身的业务代码动刀,而不是切换和 cdn 的域名解析合作。图片资源在数据库有全局唯一的uuid,然后根据该uuid生成url,只需要在这里控制url的域名输出即可。

执行步骤

  1. 查看网宿 maa 下各个域名的流量请求带宽。

  2. 查看网宿 maa 和蓝讯 mplus 回源地址相同的对应域名。

  3. 统计该域名下的热点资源地址,然后到即将切换的 cdn 服务商做预加载,否则客户端加载时,即使回源带宽不至于打满,但是会出现请求时间过长,图片无法显示的情况。

  4. 修改业务代码,减掉网宿 maa 的图片地址的输出,替换为蓝讯 mplus 的域名。逐步替换,单域名下流量过大,还需要慢慢降权重转移,而不是一次性,以防回源压力过大,导致源站无法承受。

  5. 监控两边 cdn 带宽,新 cdn 的缓存命中率,源站带宽和服务器负载、I/O以及前端图片服务器负载均衡服务器总带宽(因为和钱直接相关,必须关注)。

实战笔记

查看了网宿某域名下带宽情况(截图来源网宿科技 cdn 管理后台)白天平均带宽大概为80M 左右。

我将该域名下的50%,估计40M 带宽切过到蓝讯之后,回源压力较大。服务器负载近8(8核)收到服务器报警短信,将50%改为20%。

假装是运维系列笔记之多 cdn 切换

回源源站,外网网卡昨日带宽和最近一周的带宽(截图来源源站内网centreon监控)

回源带宽猛增到近50M,I/O出现等待,负载也飙升。

虽然负载是降下来了,但是通过top命令查看到%aw一直很高,I/O还是非常繁忙。

# top
top - 16:25:34 up 273 days,  8:54,  1 user,  load average: 5.54, 5.34, 5.19
Tasks: 209 total,   1 running, 208 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us,  0.4%sy,  0.0%ni, 47.9%id, 51.0%wa,  0.0%hi,  0.5%si,  0.0%st
Mem:  32945488k total, 32851176k used,    94312k free,  7033172k buffers
Swap: 12485164k total,      204k used, 12484960k free, 22568232k cached

步子迈大了,坑了一把。没有注意到前端负载均衡服务器总带宽超过了100M,而我们和机房签订的协议是用带宽峰值来收费的,以后需要注意。

cdn 切换之后,除了观察新 cdn 的流量,还需要监控新 cdn 的缓存命中率,可以通过后期的回源比例来监控,也可以通过循环脚本执行wget来监测。

$ wget -S -O /dev/null f1.topitme.com/1/40/33/1110152459d0433401m.jpg
--2015-12-29 11:11:01--  http://f1.topitme.com/1/40/33/1110152459d0433401m.jpg
Resolving f1.topitme.com... 220.181.64.145
Connecting to f1.topitme.com|220.181.64.145|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Content-Type: image/jpeg
  Content-Length: 33061
  Accept-Ranges: bytes
  Server: nginx
  Date: Mon, 30 Nov 2015 07:47:09 GMT
  Last-Modified: Mon, 08 Sep 2014 05:00:59 GMT
  Expires: Thu, 27 Nov 2025 07:47:09 GMT
  Cache-Control: max-age=315360000
  Powered-By-ChinaCache: HIT from 010519g3H8.6
  Age: 2489032
  Powered-By-ChinaCache: HIT from 01001023P2.2
  Switch:FSCS
Length: 33061 (32K) [image/jpeg]
Saving to: '/dev/null'

/dev/null           100%[=====================>]  32.29K  --.-KB/s   in 0.09s  

2015-12-29 11:11:02 (372 KB/s) - '/dev/null' saved [33061/33061]

这里出现了Powered-By-ChinaCacheHIT说明命中了,如果是MISS则没有命中,该规则需要咨询 cdn 运营商。

后记

根据每个产品的属性,每日流量肯定都有高峰和低谷期,我之前设置的自然回源,虽然在流量高峰期,设置的比例很小,但是基数很大,所以切过去的量比较大,应该选择在流量比较少的时间,执行预加载,这样保证了带宽的使用率。

评论列表

回复 康哥 2015-12-29 15:34:08
热点资源还是需要预热,因为现在有用户反应有图片加载不出来,我估计还是因为回源图片访问时间较长,导致的。
回复 kyrie 2017-07-23 10:51:33
图片挂了?
回复 康哥 2017-07-23 13:33:42
回复kyrie: 丢了。。