CDN常见故障的探讨分析

2014-04-19 07:27浙江省桐乡市广播电视台
卫星与网络 2014年9期
关键词:配置文件代理边缘

+ 李 伟 浙江省桐乡市广播电视台

CDN常见故障的探讨分析

+ 李 伟 浙江省桐乡市广播电视台

结合CDN的运营实践,根据其建设过程中出现各种各样异常现象,以使用和管理为切入点,分析各类故障产生的原因,提出CDN日常维护中需要注意的几个方面的要素和处理网络上传代理异常的一些建议和经验,使得CDN技术质量可靠、性能稳定地运行,从而减轻网络服务器的压力,提升了网站的性能和可扩展性。

CDN;上传代理;中心端;边缘程序视

引言

当Akamai, Digital Island相继建点,中国的CDN产业开始起步发展,国内一些IDC,ISP开始代理销售国外CDN服务商后,CDN的服务认同度日渐提高[1]。在流媒体、数字交互电视、图书馆局域网、金融网络、卫星网络和移动网络等等建设中有着应用的构想和初步的实践,数字电视信息资源的流媒体化使得CDN技术在远程广电建设中有应用之处,在搭建信息资源平台时我们可以考虑应用CDN方案来解决用户访问延时等问题,既减少维护成本和初期投入,又可增强网络的扩展性和设备利用率以及灵活性。

1 CDN技术介绍

CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络"边缘",使用户可以就近取得所需的内容,解决Internet网络拥塞状况,提高用户访问网站的响应速度[2]。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,解决用户访问网站的响应速度慢的根本原因。

2 问题原因分析及其解决方案

2.1 程序启动失败

原因分析:

1) 已经有一个进程在运行;2) 交换文件引起配置文件不对或者加入不合法的数据引起数据库配置有误,如数据库地址、端口或用户名;3) 密码配置错误需要连接数据库的才会有此原因);4) 目前需要连接数据库的有cdn中心端和V300R002b03及以后版本的上传代理;5) 数据库连接不上网络不通或者数据库服务没有启动);6) selinux服务开启导致。

对应的处理方法:

1)在运行程序之前,务必用ps –ef|grep 执行文件名称如ps –ef|grep coshipcdnc)检查是否已有运行的进程。如果想重新启动程序,则先kill掉正在运行的进程,再启动程序;否则不用再启动程序。在此,特意提醒,更换程序之前也要先查看程序是否正在运行,如果程序正在运行,必须先kill掉正在运行的程序才能更新版本;2)删除已有的sharework. swp文件;3)检查该程序的配置文件是否和发布包的配置文件模板格式和加载的组件一致,配置的数据是否有异常或者特殊值,确保配置文件正确且配置数据正常后再启动程序;4)检查配置文件中的mysql_fhost和mysql_port、mysql_user、mysql_pass是否正确,确保

这些项配置的值是正确的; 5)在运行程序的机器上ping数据库服务器,确保运行该程序的服务器与数据库服务器之间网络是通的;在数据库服务器上,用ps –ef|grep mysql命令检查数据库服务是否启动; 6)在/etc/sysconfig/selinux文件中增加一行,“SELINUX=disabled”,然后重启服务器。

2.2 程序启动后无法正常工作,前台启动报mysql错误

原因分析:

1)表结构、数据库脚本和程序版本不同;2)数据库的表被其他程序死锁;

3)mysql本身的bug;4)前台报的错误为[MYSQL] Unsettled error: Got error 124 from storage engine[code:1030]。

对应的处理方法:

1)导出表结构,与所取版本对应的表结构比较,如果不同就是版本不匹配。数据库脚本和程序需要通过文件名、版本号判断。版本发布说明或测试申请表里有相关信息。在执行文件所在目录下执行./执行文件名 -v可查看程序版本号如./coshipcdnc –v);2)在数据库中执行show PROCESSLIST; 结果集中的state就是使用了这个数据库的各连接的状态,可以通过状态看是否死锁,找到造成数据库死锁的程序,关闭该连接;3)先检查数据库服务器的空间,如果空间足够就重启mysql服务,如果还有该错误就说明数据库需要修复。修复步骤如下:

A.使用Mysql-front客户端打开要修复的数据库;

b.选择页面顶端的“其他”à“表格维护”,弹出表格维护页面;

C.把表格维护页面中的所有选项都打勾;

D.点击表格维护页面上的“完成”,几分钟后修复完成。

注意:只有类型为myisam的表才支持修复,其他类型的尚未发现报这种错误。

2.3 网络连接正常,cdn中心端运行正常。上传代理,分发源或者边缘程序启动后用net list on命令看节点状态不在线,或者在数据库cdn_nodeinfo表看到节点的node_state为0

原因分析:

1)cdn中心端的脚本文件不全;2)数据库中配置的node_ip与程序实际运行机器的IP不一致,或者数据库中配置的node_id和node_port与配置文件中配置的和监听端口不一致[3]。

对应的处理方法:

1)查看cdn中心端应用程序安装目录下是否有如下脚本文件:sql_ dc.txt, sql_nl.txt,sql_dm.txt, sql_descrip.xml。如果没有将发布包中的这些文件拷贝至cdn中心端的安装目录下;2)查看数据库中cdn_nodeinfo表中节点的配置(ip,port,node_id),以及配置文件中的配置(CLocal_ Pointer_Id,监听端口)是否一致。如果不一致,需要修改成一致。修改后必须重启cdn中心端和节点本身。

注意:第三方的VS不会向cdn中心端注册,所以在数据库配置第三方VS的时候,需手动将其配置成1。

2.4 上传代理解析xml失败,会有类似的打印和日志:“xml文件格式不良好! 已移至文件夹:⋆⋆⋆” 等

原因分析:

1) xml不符合ADI规范;2) xml中有无效的多字节序列,比如繁体字、UTF-8中未定义的符号等等。或者在Value中出现" " 英文格式的引号,中文格式的引号是不会引起解析失败的),如;3) xml中缺少content项,或者content项的值格式不符合要求。

对应的处理方法:

1)用xml编辑器打开该xml推荐用Altova XMLSpy),可以检查xml是否符合标准的ADI格式;2)这种情况,去掉特殊字符或者英文的引号,如果实在要用引号请改成中文格式的引号;3)content项的值如果带路径,则只可支持本地路径、\IPdir(如\172.30.20.23 s est.ts)、

ftp(如:ftp://user:passwd@IP:Por//mpeg/test.ts)和http(http://172.30.20.23/ts/test.ts)这四种格式的URL不带路径那就表明待上传文件在上传代理配置的uptask_dir目录下即放在扫描xml的目录下)。缺少content项则添加符合上传代理要求的content项,如果不符合要求,则按照上述格式修改。

2.5 上传代理报错:文件格式不合法或者生成索引文件失败

原因分析:

1) 编码格式不对,非MPEG2或H264;2) 码率小于1000bps,时长小于等于0;3) 码率波动最大码率与平均码率的差值)超过了配置文件中的配置即max_fluctuate配置的值);4)思迁上载时SI_VIDEO_PID不等于SI_PCR_PID。

对应的处理方法:

1)用码流分析工具如泰克分析工具)分析编码格式,我们的系统只支持MPEG2

和H264这两种编码格式的ts流上传;2)用码流分析工具查看码率大小和时长,上传代理日志也有打印最大码率和时长,查看是否是不满足要求;3)用码流分析工具查看最大码率和平均码率,看两者差值是否超出了配置的范围;4)用码流分析工具查看SI_VIDEO_PID和SI_PCR_PID的值,思迁服务器要求这两者的值必须相等。

2.6 上传代理从中心端获取任务失败,会有类似打印和日志提示:如“向CDN中心请求任务不成功,包括:中心端保存xml失败,中心端获取不到数据库连接,分发源不在线,没有合适的VS等,等待重新启动”,“从中心端获取任务信息失败,任务中止”

原因分析:

1)上传代理配置文件中配置的cdn中心端节点,IP或端口错误;2)cdn中心端配置的数据库地址、访问密码错误,或者数据库服务被停掉,重启导致连接不上数据库;3)没有在provider表配置xml中的provider_ ID;4)数据库中配置的cdn中心端xml存储路径不对或者没有配置,或者在数据库中修改该路径后未重启cdn中心端的程序;5)分发源或者第三方VS不在线;6)分发源或者第三方VS的空间已达到限制;7)使用的上传策略不正确;8)分发源或者第三方VS的realdir,ftpurl配置错误[4]。

对应的处理方法:

1)检查上传代理的配置文件,保证下配置的cdn中心端的节点,IP和端口与数据库中cdn_nodeinfo表配置的一致;2)检查cdn中心端的配置文件,保证Db_modul下配置的数据库地址和访问密码是正确的。如果不正确,修改后重启程序。如果配置正确,则检查数据库服务是否开启,如果没开启则启动数据库服务;3)检查xml中的provider_ ID有没有在provier表配置,如果没有,则需要根据实际情况配置。没有配置的provider_ID,上传代理认为是不合法的媒资提供商,不允许其提供的内容被上传;4)检查数据库中node_savedir表中有没有配置cdn中心端保存xml的路径,即node_savedir中是否有一条node_id是cdn_ nodeinfo表中cdn中心端的node_id,dir_type为-2,real_dir是cdn中心端服务器上真实存在的一个目录的一条记录,如果没有请配置,然后重启cdn中心端的程序。如果已存在但是中途有修改过路径,则重启cdn中心端程序;5)检查分发源的进程是否存在,不存在就重新启动进程;6) 检查node_savedir中分发源或者第三方VS的空间是否都达到了上传策略createtaskforuproxy)中对VS的空间要求;7)检查使用的上传策略,与在线的VS是否一致,比如使用的上传策略是文件同时上传至思科和coship的分发源,但是cdn_nodeinfo中根本没有node_state为1的思科VS。所以在选择上传策略的时候要根据现场拥有的资源情况来选择;8)检查node-savedir表中是否配置了为空的real_dir,只有coship的分发源的ftpUrl项需要配置,不能配置为空或者不符合要求。

2.7 上传代理提示:“该文件已经上传过,错误号: 2”

此种情况是由于之前已经用该xml上传过文件且上传成功过,此次又重复上传,这只是一个提示,不算错误。如果确定需要重传,则需要从CMS系统发送删除该文件的请求,等待48小时候再重传该文件(因为MAP要求cdn在文件被删除48小时后才能清除数据库中的记录)。

2.8 上传代理报错:上传超时

原因分析:

1)文件过大,上传的时间超过了上传代理配置文件中配置的上传超时时间;

2)第三方VS出现问题,主动上报的传输状态或者上传代理主动去查询得到的传输状态一直为非complete状态[5]。

处理的方法:

1)配置上传超时时间时要根据现场的网络速度和最大片源的大小来配置,默认的超时时间是3600s;2)检查日志,就会看到在上传超时时间内,上传代理打印的日志都是去查询传输状态或者VS主动上报的传输状态,但是一直都是非complete,到了上传超时时间,上传代理主动取消了本次传输任务,认为此次上传失败,清理掉了资源。需要第三方VS去查询这么久不成功的原因是什么。

2.9 上传文件时报错:文件不能创建,pFile=NULL

原因分析:

1) 访问分发源的ftp权限不够;2)数据库中ftpUrl配置的格式不对

处理方法:

1)在地址栏输入ftp的地址访问,看能否登陆ftp,如果可以登陆,拷贝一个文件到ftp,看能否成功,如果都可以,则将ftp的绝对路径的权限改为755;

2)数据库中node_savedir配置的ftpurl的格式为:ftp:// user:passwd@IP:port/ 后面不能有路径。

2.10 配置了边缘,但是文件不分发

原因分析:

1)cdn中心端配置文件中配置的cdn_task_num的值为0;2)cdn_ task_num的值不为0,但是在线的边缘数小于cdn_task_num的值。

对应的处理方法:

1)cdn_task_num的值表示要分发文件至几个边缘,如果想要文件一上传就预分发至2个边缘,那就将cdn_task_num的值配置为2;2)在某些脚本的runtask存储过程做了限制,如果在线的边缘数小于cdn_task_ num的值,就不产生分发任务,所以出现该问题的时候,需要检查runtask存储过程是不是有这样的限制。如果有则必须保证至少启动cdn_task_ num个边缘节点。

2.11 边缘节目表中content_state的值一直是1或者9

原因分析:

1)文件源可能是分发源,可能是同区域的边缘)根本就不存在待分发的文件,可能是丢失,也可能是自动删除了,但是数据库的记录未更新状态成功,没被删除掉;2)也可能是当初上传成功写数据库file_dir_id写错了,文件其实在分发源的另一个目录下。

对应的处理方法:

1)可以去被分发的边缘的安装目录下查看task_description.xml文件,

根据这三项的值,去对应的服务器的对应目录下查看文件是否真的存在,如果文件确实不存在,则停掉边缘程序,去边缘的安装目录下删除task_description.xml和sequence_file.xml,如果对应的是分发源,将vod_edge_program表中记录删除掉,若是边缘,则将vod_ edge_program中content_state的值更新为0。之后再重启边缘;2)去分发源所在服务器查找文件,若找到的目录与数据库中记录的目录不一致,则更新数据库中记录的目录id,更新后停掉边缘程序,去边缘的安装目录下删除task_description.xml和sequence_file.xml,将content_state的值更新为0,然后重启边缘。这样的问题都是因为程序bug造成的,所以只能这样手动改,一般情况下不会出现。

2.12 不去通知CMS(表示notify_pms表中没有产生通知任务)

原因分析:

1)配置的是2,表示要等分发完成之后通知CMS,如果分发不成功,则不会去通知;2)vod_program中pms_list为空,或者pms_list中的平台名称未在provider表中配置;3)vod_program表中notice_flag的值为1。

对应的处理方法:

1)检查不分发的原因,让文件能分发,如果不需要等待分发完再通知cms,则可以停掉cdn中心端程序,修改的值为1,然后重启cdn中心端;2)pms_list的值的格式是“,平台名称,”,目前只支持CiTV和GCSS,如果没在provider表配置provider和pms_list中出现的平台名称的对应关系,则加上配置;3)如果notice_flag的值为1,则表明该文件在上传的时候是不需要通知CMS同步内容的,该文件对应的provider_id在provider表对应的need_notify_pms配置的应该是0,如果想要此provider_id提供的文件上传后通知CMS同步内容,则在provider表将此provider_id对应的need_notify_pms值改为1[6]。

2.13 通知CMS失败

原因分析:

1)文件对应的xml文件不存在;2)xml中有不符合CMS要求的字段。

对应的处理方法:

1)去cdn中心端保存xml的路径下去查看有没有以content_id.xml命名的xml文件,如果不存在,则证明cdn中心端保存xml的路径被修改了,去以前保存xml的目录下将xml拷贝至新的目录,因为cdn中心端保存的xml是不会被删除的,除非被手动删除,而且如果之前保存xml不成功,会报错,后续步骤是进行不了的;

2)根据notify_pms中的错误码,将错误码变成正数,然后减去2得到的值去CMS提供的《CMS内容同步接口返回错误码表.xls》中查看对应的错误原因,然后去cdn中心端保存xml的目录下找到对应的xml,修改错误的地方,然后将notify_pms表中该文件通知失败的记录删除掉,再去vod_program表中将notice_flag改为0。让其重新通知。

2.14 Upwindow进程不能打开

原因分析:

安装Upwindow的机器上没有VC6环境。

处理的方法:

去Upwindow的安装目录下双击vcredist_x86.exe即可。

3 小结

随着我国巨大潜在市场的逐步开发,CDN将大大提高中国互联网网络的使用效率。内容提供商使用CDN服务可以更加专注于提供精彩的内容,而接入服务则通过CDN将可靠的内容提供给用户,从而加速CDN的内容管理从静态页面向流媒体、动态页面发展,最终走向全面应用。我国的网络建设也会因此而发展的更加完善,人们足不出户便可享受到优质的网络教育服务。

CDN是否质量可靠、性能稳定,对于我国的互联网络发展有着至关重要的作用。在日常维护中只有勤观察、勤记录、勤思考,才能不断提高自己的故障处理能力,有效地提高业务办理效率和提升用户服务满意度。

[1] 宋家友,桑红涛.CDN技术的发展及应用.中国有线电视,2005,(6):75~77.

[2] 邓永红.内容分发网络技术综述.有线电视技术,2005,(13):15~20.

[3] 曹毅,贺卫红.CDN网络关键技术研究.现代计算机,2004,(10):39~42.

[4] 石磊,刘欲晓.提高网络服务质量的方法研究.平原大学学报,2005,(8):118~120.

[5] 付鹏,周华春,陈旭东.CDN技术在IPTV系统中的应用.中国有线电视,2004,(7):47~50.

[6] 彭湘凯.CDN网络及其应用.微计算机信息,2005,(2):150~151.

猜你喜欢
配置文件代理边缘
互不干涉混用Chromium Edge
代理圣诞老人
基于Zookeeper的配置管理中心设计与实现
忘记ESXi主机root密码怎么办
代理手金宝 生意特别好
为View桌面准备父虚拟机
一张图看懂边缘计算
胜似妈妈的代理家长
一个村有二十六位代理家长
在边缘寻找自我