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

时间: 2024-09-30 15:26:44

crtmpserver组网部署方案的相关文章

SharePoint 修改密码Web Part部署方案

SharePoint 修改密码Web Part部署方案 1. 以管理员身份打开Visual Studio2010,新建项目,模板选择SharePoint2010,平台选择.NET Framework 3.5, 新建空白SharePoint项目,编辑名称changePWD及位置,点击确定. 2. 弹出SharePoint 自定义向导.填写预调试站点,点击验证.验证成功后,选择"部署为场解决方案",点击确定. 3. 右键点击changePWD,添加----新建项,选择可视Web部件pass

这一设计思路显然降低了新 DBMS 部署方案

数据库管理系统(简称 DBMS)无疑是任何数据密集型应用程序当中最为重要的组成部分,其肩负着处理大量数据以及高复杂性工作负载的重任.然而,数据库管理系统本身却往往难于管理,因为其中通常包含数百种配置"旋钮",用于控制诸如缓存内存分配量以及存储介质数据写入频率等要素.各类企业一般需要聘请专业人士以协助相关调配工作,但对于大多数企业而言,此类专业人才的开价亦相当高昂.而实际上,DBA所面临的挑战还远不止这些. 而今天一则名为"OtterTune"的机器学习DBMS系统刷

ActiveMQ实现负载均衡+高可用部署方案

一.架构和技术介绍 1.简介 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现 2.activemq的特性 1. 多种语言和协议编写客户端.语言: Java, C, C++, C#, Ruby, Perl, Python, PHP.应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP 2. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息

ActiveMQ实现负载均衡+高可用部署方案(转)

本文转自:http://www.open-open.com/lib/view/open1400126457817.html%20 一.架构和技术介绍 1.简介 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现 2.activemq的特性 1. 多种语言和协议编写客户端.语言: Java, C, C++, C#, Ruby, Perl, Python, PHP.应用协议: OpenWire,Stomp

Haproxy+keepalived高可用、负载均衡安装部署方案

1     环境说明 前端两台haproxy+keepalived互为主从,提供高可用:另外基于不同域名访问不同的虚拟ip实现负载均衡 1.1     环境描述 服务器A(主.从):eth0:10.241.51.245   eth1:192.168.1.9 服务器B(从.主):eth2:10.241.51.246   eth1:192.168.1.10 服务器C(web01):eth0:10.241.51.247 服务器D(web02):eth0:10.241.51.248 VIP1:10.24

开源jms服务ActiveMQ的负载均衡+高可用部署方案探索

一个文件(或目录)拥有若干个属性,包括(r/w/x)等基本属性,以及是否为目录(d)与文件(-)或连接文件(l)等属性.此外,Linux还可以设置其他系统安全属性,使用chattr来设置,以lsattr来查看,最重要的是可以设置其不可修改的特性,即便是文件的拥有者都不能进行修改.这个属性相当重要,尤其是在安全机制方面(security). 文件默认权限:umask 当建立一个新的文件或目录时,它的默认属性是与umask有关的.通常,umask就是指定当前用户在建立文件或目录时的属性默认值.那么,

无线WIFI上网监控串联部署方案

所谓串联部署,顾名思义就是串接在网络里面,所有都经过监控系统,可以让监控系统解析,还原,做中间人技术(HTTPS,SSL监控)这样部署可以直接深入网络,对网络管理,协议分析,内容审计更加全面到位.串联部署方案两种形式: 网关部署,将WSG的E系列作为网关部署在局域网出口.串联部署比较推荐现成的硬件设备,串联上网设备,硬件的配置有要求.串接在网络里面,所有数据都经过设备,不管是内容审计,还是行为管理,带宽管理都能做到最大管理程度.无线设备怎么都没有办法做客户端,只能通过专业网关(第二代防火墙)监管

CloudStack+XenServer详细部署方案创建高级网络资源域

CloudStack+XenServer详细部署方案(5):创建高级网络资源域 本文将根据设计文档结合和之前创建的XenServer 资源池, 介绍CloudStack高级网络资源域的创建过程. Step1. 选择高级网络模式, 单击下一步.   Step2. 配置域信息. 域名称: shenzone DNS: 10.1.1.11 Hypervisor 类型: XenServer 网络域: shenzone.com 来宾网络CIDR: 192.168.100.0/24 公共: 是   注: 此处

CloudStack+XenServer详细部署方案 交换机配置和服务器连线

CloudStack+XenServer详细部署方案(2):交换机配置和服务器连线 本文将根据设计文档, 对交换机进行配置和服务器网络连线方式进行说明. Step1.交换机规划,  根据功能将交换机端口分为三个部分: 管理区域(交换机1 – 16 口):  用于XenServer和CloudStack的管理流量, 和VM 在主机间迁移产生的流量. 工作区域(交换机17 – 32 口):  用于VM之间访问和VM访问外部网络产生的网络流量. 存储区域(交换机33 – 48 口): 用于任何与存储交