crtmpserver组网部署方案

转自:http://blog.chinaunix.net/uid-26000296-id-4273867.html

 

 

一、简介

流媒体网站的服务器主要分为两个部分:流服务 与 web服务。
流服务器使用常crtmpserver作为原型,为主播提供推流服务,为用户提供拉流服务。
流服务分为源管理节点(SM),源节点(SP)以及边缘节点(EP)。三种类型的节点为层级关系。

一般主播通过dns获取源节点的ip,向源服务器推流。源服务器收到主播流之后,向源管理上报该主播的流信息(每个主播有唯一的id号)。
用户从边缘节点拉流,边缘节点向所设定的唯一上级源服务器拉取某个流编号的数据。
源节点通过与源管理节点通信之后,确定该流id的来源,源节点取得主播推流的源服务器ip后,直接与该源节点通信,拉取流。
每个边缘节点如上所述,有一个固定的上游源节点。源节点之间是互相拉取的关系。

二、crtmpserver的通讯结构

三、crtmpserver的部署及启动方式

1、部署

目前使用rsync源作为程序包管理服务器。crtmpserver 目录结构目前为
|– etc
|   `– crtmpserver.lua.sample
|– lib
|   `– crtmpserver
|       |– applications
|       |   |– SourceManagerClient
|       |   |   `– libSourceManagerClient.so
|       |   |– SourceManagerServer
|       |   |   `– libSourceManagerServer.so
|       |   |– admin
|       |   |   `– libadmin.so
|       |   |– applestreamingclient
|       |   |   `– libapplestreamingclient.so
|       |   |– appselector
|       |   |   `– libappselector.so
|       |   |– flvplayback
|       |   |   `– libflvplayback.so
|       |   |– proxypublish
|       |   |   `– libproxypublish.so
|       |   |– samplefactory
|       |   |   `– libsamplefactory.so
|       |   |– stresstest
|       |   |   `– libstresstest.so
|       |   `– vptests
|       |       `– libvptests.so
|       |– libcommon.so
|       |– liblua.so
|       |– libthelib.so
|       `– libtinyxml.so
|– man
|   `– man1
|       `– crtmpserver.1
|– sbin
|   `– crtmpserver
`– script
|– CRTMPServerEP.lua
|– CRTMPServerSM.lua
|– CRTMPServerSP.lua
|– checkcrtmpserver.sh
|– install.sh
|– restart.sh
|– start.sh
`– update.sh

2、 使用install.sh 进行安装

当然首先你得先获取install.sh,此脚本会调用start.sh 把进程配置起来。
  a、安装SM: sh install.sh SM
  b、安装SP:    sh install.sh SP $SM_ip (请替换为源管理的ip)
  c、安装EP:    sh install.sh EP $SP_ip(请替换为指定的上级的ip,尽量使用同运营商资源)


3、 使用update.sh 进行版本更新

  a、 sh update.sh (可以在线更新,因为程序运行时已经完全载入内存)
  b、sh restart.sh (更新或者使用新的配置文件时需要重启服务器,此时所有的用户连接会直接关闭)


4、使用checkcrtmpserver.sh 进行自动拉起

  a、 在update.sh 中有 
     nohup /bin/sh /usr/local/crtmpserver/script/checkcrtmpserver.sh > /usr/local/crtmpserver/script/checkcrtmp.log  2>&1 & 
     的命令进行自动拉起,检查间隔为5s,判断是否拉起的标准为进程个数是否为7个进程。(包括1个主进程和6个子进程)。


5、启动方式

sed -i ‘/crtmpserver/d’ /etc/ld.so.conf
echo “/usr/local/crtmpserver/lib/crtmpserver/” >> /etc/ld.so.conf
ldconfig
#以上为避免crtmpserver启动所依赖的库没有。
cd /usr/local/crtmpserver/lib/crtmpserver #一定要进到这个目录,然后用绝对路径把进程起起来。
/usr/local/crtmpserver/sbin/crtmpserver /usr/local/crtmpserver/etc/$conf


四、目前使用的节点情况以及监控注意事项

1、目前使用的节点共39台服务器,其中源节点5台,边缘节点34台。
2、监控时需要注意进程个数是否小于7,更倚重的是网络质量。
3、观众流接收数和流失败率是需要监控的两个指标,目前由网页上的客户端上报。


五、常见问题排查

1、主播播放不了

  a、首先查看主播是dns到哪个源上,可以直接用(nslookup 流地址)或者 (ping 流地址)查看,如果解析错误,则反馈…
  b、判断主播是否能够正常连接上源节点。(telnet 流地址:端口)与 (telnet 流地址:端口)尝试,如果不行,则检查是否是否被本机软件禁用
  c、看是否360禁用掉端口,是则打开。

2、主播播放卡

  a、主播网速测试,上传带宽必须到达40kB至少才能保持通畅。
  b、tracert -d  流地址 看路由。
  c、ping 流地址 看耗时
  d、如果有mtr工具,则看是哪一跳丢包。

3、观众播放卡

原因同上。
4、进程异常,请在ps aux | grep crtmpserver  之后,直接restart进程,避免长时间不服务。
5、新节点启用之前请测试,必须加到token服务器的ip列表中才可以。
 
以上用到的install.sh脚本为:
#!/bin/sh
#rsync new version crtmp to folder
#choose sever type
#copy server type config to etc
#change ip & upstream ( just for ep )
#add new server ip to sm
#run update.sh for other install shell
#run start.sh to startup crtmpserver

#rsync -avz --delete rsync://网址:端口/crtmpserver /usr/local/crtmpserver/
LOCALIP=`ip r | grep src| grep eth0 |awk '{print $NF}'`
if [ -d /data1 ];then
dirpre=/data1
elif [ -d /data01 ];then
dirpre=/data01
else
dirpre=/data1/
fi
LOGDIR=${dirpre}/crtmpserver/logs
MEDIADIR=${dirpre}/crtmpserver
install_crtmp(){
        rsync -avz --delete rsync://网址:端口/crtmpserver /usr/local/crtmpserver/
        mkdir -p ${LOGDIR}
        mkdir -p ${MEDIADIR}
}
install_SM(){
        mkdir -p ${LOGDIR}smlog/
        cd /usr/local/crtmpserver/etc/
        cp /usr/local/crtmpserver/script/CRTMPServerSM.lua .
        echo "modify the configure file~"
        #sh /usr/local/crtmpserver/script/start.sh
}
install_SP(){
        cd /usr/local/crtmpserver/etc/
SOURCEMANAGERIP=$1
        cp /usr/local/crtmpserver/script/CRTMPServerSP.lua .
        sed "s/LOCALIP/${LOCALIP}/g" -i  /usr/local/crtmpserver/etc/CRTMPServerSP.lua
        sed "s/SOURCEMANAGERIP/${SOURCEMANAGERIP}/g" -i  /usr/local/crtmpserver/etc/CRTMPServerSP.lua
sed "s/LOGDIR/${LOGDIR}/g" -i /usr/local/crtmpserver/etc/CRTMPServerSP.lua 
sed "s/MEDIRDIR/${MEDIADIR}/g" -i /usr/local/crtmpserver/etc/CRTMPServerSP.lua 
         echo "add new crtmpserver to SM in IP地址";
echo "/usr/local/crtmpserver/lib/crtmpserver/" >> /etc/ld.so.conf
ldconfig
rm /usr/local/crtmpserver/etc/crtmpserver.lua.sample
        sh /usr/local/crtmpserver/script/start.sh
}
install_EP(){
        cd /usr/local/crtmpserver/etc/
        cp /usr/local/crtmpserver/script/CRTMPServerEP.lua .
SOURCEIP=$1
        sed "s/LOCALIP/${LOCALIP}/g" -i /usr/local/crtmpserver/etc/CRTMPServerEP.lua
sed "s/SOURCEIP/${SOURCEIP}/g" -i /usr/local/crtmpserver/etc/CRTMPServerEP.lua 
sed -e "s#LOGDIR#${LOGDIR}#g" -i /usr/local/crtmpserver/etc/CRTMPServerEP.lua 
sed -e "s#MEDIADIR#${MEDIADIR}#g" -i /usr/local/crtmpserver/etc/CRTMPServerEP.lua 
         echo "please add new crtmpserver to SM in IP地址";
echo "/usr/local/crtmpserver/lib/crtmpserver/" >> /etc/ld.so.conf
ldconfig
rm /usr/local/crtmpserver/etc/crtmpserver.lua.sample
        sh /usr/local/crtmpserver/script/start.sh
}
install_CHECK(){
/bin/sh /usr/local/crtmpserver/script/checkcrtmpserver.sh >> /usr/local/crtmpserver/script/checkcrtmp.log 2>&1 &
}
case $1 in 
SM ) 
echo "SM_INSTALL" 
install_crtmp
install_SM
;;
SP ) 
echo "SP_INSTALL"
install_crtmp
install_SP $2
install_CHECK
;;
EP ) 
echo "EP_INSTALL"
install_crtmp
install_EP $2
install_CHECK
;;
* ) echo "CHOOSE A SERVER TYPE: SM/SP/EP" ;;
esac

原文链接:
http://blog.csdn.net/zongcai249/article/details/9342251

 

posted @ 2015-06-27 15:59  小王爷ii  Views(284)  Comments(0Edit  收藏  举报