多台服务器转码合并数据
6 个月前
提示:由于多台分布式转码功能还在开发中,这里就先提供一个手动的方案。

说明

由于有人每天需要转码几千上万部视频,一台服务器完全不够用,就需要多台服务器同时转码,这里就说下多台服务器转码后,将所有服务器切片等数据同时合并到一台服务器上的方法。

这里举个例子,比如我目前只使用3台服务器A+B+C同时转码,需要将BC服务器数据合并到A服务器,下面就按照该例子配置同步。

且只建议被合并的程序,只负责转码,而添加分类、标签等等均在主程序中进行,不然会出现ID不一样,造成混乱的情况。

注意事项

  • 所有服务器需提前安装好高级版程序。
  • 同步的服务器之间直接尽量不要丢包,比如我举的例子中,ABAC之间尽量不要出现丢包情况,不然同步可能会存在丢文件的情况。

这里最简单的检测方法,就是在SSH客户端,互相使用命令ping一下。

#比如在服务器A上ping服务器B(192.98.23.1),次数为100次
ping 192.98.23.1 -c 100

最后如果显示0% packet loss,则表示连接完美。

建立同步任务,即B服务器切片同步到A服务器

提示:这里只列举B同步到A服务器,C、D、...、Z到A也同样适用。

在A服务器安装同步服务端

注意:A服务器只需要安装一次服务端即可,用来接收客户端同步过来的文件

首先使用SSH客户端,比如Xshell软件,登录服务器,再使用命令:

#下载脚本
wget --no-check-certificate -qO '/tmp/ms.sh' 'https://download.zhuanma.org/moeapp/shell/mc-server.sh'
#运行脚本,后面为你安装高级版的源码路径,为绝对路径
bash /tmp/ms.sh /home/express-ffmpeg

安装好了后,请保存好AccessKeySecretKey,脚本默认从客户端发送的切片文件都会存到高级版的public切片目录。

在B服务器安装同步客户端

注意:客户端是用来发送数据到服务端,脚本限制一个服务器只能安装一次,请谨慎填写参数。

首先使用SSH客户端,比如Xshell软件,登录服务器,再使用命令:

#下载脚本
wget --no-check-certificate -qO '/tmp/mc.sh' 'https://download.zhuanma.org/moeapp/shell/mc-client.sh'
#运行脚本,后面为你安装高级版的源码路径,服务端ip地址、AccessKey、SecretKey值,最后n可以默认
bash /tmp/mc.sh /home/express-ffmpeg 192.0.0.1 AccessKey SecretKey n

关于最后面一个参数的意思,请谨慎选择:

#最后面可选参数y或n
y:如果使用y参数,则客户端删除同步的文件时候,服务端会跟着一起删除,也就是上述B服务器删除文件,A服务器也会跟着删除。
n:如果使用n参数,则客户端删除同步的文件时候,服务端不会跟着一起删除,也就是上述B服务器删除文件,A服务器也会继续保留该文件。

安装好了后,默认只会同步转码目录的public/videos所有切片文件夹/文件到服务器的相同文件夹,即public/videos

合并数据库,即B服务器数据合并到A服务器

提示:由于暂时还没找到一个比较满意的同步软件,这里就手动完成同步,很简单。

导出B服务器数据库

首先使用SSH客户端,比如Xshell软件,登录B服务器,再使用命令:

#备份数据库,后面参数介绍看下面,一般可以默认
mongodump -h 127.0.0.1 -u ffmpeg -p ffmpeg -d ffmpeg -o /root --authenticationDatabase ffmpeg

-d是选择要备份的数据库,-u是用户名,-p是密码,--authenticationDatabasehou后面也是要备份的数据库。

备份好了后,数据库备份文件路径为/root/ffmpeg,接下来只需要打包以下几个文件即可,如下:

#分类数据
categories.bson
categories.metadata.json

#视频库数据
movies.bson
movies.metadata.json

#剧集数据
tvs.bson
tvs.metadata.json

#标签管理数据
taggroups.bson
taggroups.metadata.json

#标签数据
tags.bson
tags.metadata.json

自行将以上存在的数据表文件打包,并压缩,然后将备份压缩包下载并上传到服务器A

将备份数据导入到A服务器数据库

先将上面备份好的数据表,解压并存放在A服务器的/root/ffmpeg文件夹,不存在/root/ffmpeg文件夹的话,就自己新建一个。

再使用SSH客户端,比如Xshell软件,登录A服务器,再使用命令:

#合并数据库,后面参数介绍看下面,一般可以默认,/root/ffmpeg为此前数据表备份存放文件夹
mongorestore -h 127.0.0.1 -u ffmpeg -p ffmpeg -d ffmpeg /root/ffmpeg --authenticationDatabase ffmpeg

-d是选择要合并的数据库,-u是用户名,-p是密码,--authenticationDatabasehou后面也是要合并的数据库。

此时你会发现视频库、标签、分类等数据表均和原来的合并一起了。

特别提示

1、同步切片的时候,如果没特殊需求,建议使用n参数安装客户端,这样把切片同步过去后,这边的切片就可以直接删除了,另一边就不影响。
2、导出相关数据表后,建议直接删除导出的数据表,这样再次导出合并的时候,之前的数据不会和已合并的数据库重复,不过貌似重复也不影响?
3、建议自己先测试下该方案,觉得没问题了,再正式使用。