多台云转码服务器,对应一台储存或播放服务器的分布式架构实现

云转码云储存分布式

2022-04-05T16:19:28.600Z

这篇教程可以应用到纯净版theoneffmpeg也可以引用到高级智能云转码express-ffmpeg-vip上面。如果需要可以自行搭建此分布式架构,负载均衡,或者利用低价高配机器转码,用低配大硬盘高带宽提供播放的一种分布式架构。

原理

mongodb从一开始设计的时候就是利用于分布式架构的一种数据库,其自动生成的OBJECTID是关键,这个ID是5d6de52360e715be825959dd这样的24位英文和数字组成的,这里边拥有的信息有时间戳、有服务器ID,所以这个OBJECTID绝对是独一无二,每一台机器上同一时间生成的也会不一样,这样就不存在ID冲突的情况,于是今天这篇分布式架构的教程就出现了。

截图

步骤

第一步、在转码机器一到四上安装纯净版theoneffmpeg或者智能云转码express-ffmpeg-vip系统。设置所有的安装目录都一样,例如我这里设置的安装目录都是/www/express-ffmpeg。

第二步、在每台转码机器上都下载mc客户端工具,这个工具可以对接亚马逊S3,minio和google云储存。

cd /~
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc --help

第三步、在储存服务器或者是播放服务器上边安装MINIO系统,minio系统是一个分布式的对象储存系统,可以让一台服务器瞬间成为对象储存服务器。
可以直接参照:https://zhuanma.co/#/miniodj

第四步、在转码服务器设置同步进程,自动将所有切片或以后增加的切片同步到储存服务器或者对象储存上。如果没有自建MINIO储存服务器(即第三步),也可以使用亚马逊S3或者是谷歌云储存,也是一样的效果。

示例-MinIO云存储
从MinIO服务获得URL、access key和secret key。

./mc config host add minio http://192.168.1.51 BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 S3v4

示例-Amazon S3云存储
参考AWS Credentials指南获取你的AccessKeyID和SecretAccessKey。

./mc config host add s3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 S3v4

示例-Google云存储
参考Google Credentials Guide获取你的AccessKeyID和SecretAccessKey。

./mc config host add gcs  https://storage.googleapis.com BKIKJAA5BMMU2RHO6IBB V8f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 S3v2

在minio储存服务器或者是你的亚马逊S3或者是你的谷歌云储存创建一个桶,比如我创建的就是expressffmpegvip。

设置同步目录,并且以后台运行。比如我四台储存服务器都是安装的高级版智能云转码系统,那么切片目录就应该是/www/express-ffmpeg/public/videos。

./mc mirror -w --older-than 1h /www/express-ffmpeg/public/videos minio/expressffmpegvip &

上面这命令行的意思是,同步本地/www/express-ffmpeg/public/videos里边的内容,并且持续监听此文件夹里边的变化,自动同步到我的minio储存服务器上面的expressffmpegvip桶中,并且设置了只同步1小时前的内容。

为什么设置1小时前,因为如果刚刚切片的内容出现m3u8,则会直接同步到储存服务器,这个时候M3U8里边只有一条TS记录,所以设置一个延迟会让同步更好的进行。

至此,多台云转码服务器,对应一台储存或者播放服务器的分布式架构就完成了。