如何合并多台程序数据

说明

提示:对于转码有大量需求的,建议使用GPU服务器转码,且多分布式转码还在开发中。

比如我目前使用3台服务器ABC同时转码,需要将BC服务器切片等数据合并到A服务器,下面就按照该例子配置演示。

注意事项

  • 建议被合并的程序,比如BC只负责给视频设置分类+转码视频;对影片信息等标签有需求的,请合并后,再到主程序A中进行编辑操作,不然会造成混乱的情况。
  • 如果你在BC程序中给视频设置过分类,则A中必须新建相同分类,即存在BC的分类名称。
  • 合并的时候,被合并的程序,比如BC里的视频全部已经转码完成,防止合并的时候出现问题。

合并数据库

提示:以下只演示服务器B合并到A,C合并到A的步骤一样。

1、导出B服务器数据库

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

#没修改数据库信息的话,可直接复制粘贴到ssh运行
mongodump -h 127.0.0.1 -u ffmpeg -p ffmpeg -d ffmpeg -o /root --authenticationDatabase ffmpeg

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

导出后,数据库文件路径为/root/ffmpeg,接下来只需要2个文件,如下:

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

再将这2个文件下载并上传到服务器A

2、将数据导入到A服务器

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

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

#没修改数据库信息的话,可直接复制粘贴到ssh运行,/root/ffmpeg为此前数据表存放文件夹
mongorestore -h 127.0.0.1 -u ffmpeg -p ffmpeg -d ffmpeg /root/ffmpeg --authenticationDatabase ffmpeg

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

此时你在A的后台会发现AB视频库数据合并一起了。

合并切片

提示:以下只演示服务器B合并到A,C合并到A的步骤一样。

1、将服务器B切片等数据同步到A

使用SSH客户端,比如Xshell软件,登录A服务器,安装一下rsync

#CentOS系统
yum install rsync -y

#Debian、Ubuntu系统
apt install rsync -y

再将B中的切片文件夹转移到A,同样在A服务器中使用命令:

#同步成功后,自动删除清空B中的切片文件
rsync -av -e 'ssh -p 9999' --remove-source-files root@192.168.0.1:/home/express-ffmpeg/public/videos /home/express-ffmpeg/public/videos

9999B的服务器端口,192.168.0.1B的服务器IP,前面的/home/express-ffmpeg/public/videosB的切片目录,后面的为A的切片目录,一定要对应好。

同步完成后,则就完全将B的数据库信息和切片文件合并到A中了。

清空B的数据

提示:建议清空下,这下B又变成了一个刚重装好的新系统,方便下次再次将转码切片合并到A。

清空B中的视频库信息

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

mongo
use ffmpeg
db.movies.deleteMany({})

然后使用Ctrl + D退出。

清空B中的切片数据

由于同步的时候自动删除B中的切片文件,所以不需要清空了。