将切片同步到其它服务器

相关说明

我们有时候考虑到安全问题,需要将切片同步到其他服务器保存,或者用作分发节点拿来分发,这里就说下详细操作。

同步操作

自动同步到其它服务器

教程可参考:点击查看,选择Minio方式即可;也就是在其它服务器上安装Minio服务端,用来接收同步的相关文件。

手动同步到其它服务器

提示:可参考下方手动同步拓展,间接实现自动同步。

首先同步前,先使用SSH客户端登录到其它服务器,安装一下rsync,使用命令:

#CentOS系统
yum install rsync -y

#Debian、Ubuntu系统
apt install rsync -y

再到其它服务器使用命令,下面2种同步命令参考:

#仅同步
rsync -avu -e 'ssh -p 9999' root@1.2.3.4:/home/express-ffmpeg/public/videos /home

#同步期间过滤指定后缀,也就是这些后缀的文件不会同步过来,且删除同步成功的文件
rsync -avu -e 'ssh -p 9999' --exclude={'*.m3u8','*.jpg','*.mp4','*.info','*.key','*.gif'} --remove-source-files root@1.2.3.4:/home/express-ffmpeg/public/videos /home

相关命令参数详解:

ssh -p 9999 后面为转码服务器ssh端口,也就是需要同步的服务器
--remove-source-files 同步期间,删除同步成功的文件
--exclude={} 同步期间排除指定后缀的文件,格式 *.后缀,多个后缀用英文逗号,隔开
1.2.3.4 为转码服务器ip,也就是需要同步的服务器ip
/home/express-ffmpeg/public/videos 为转码服务器需要同步的目录,默认为转码服务器切片目录public/videos
/home 为同步到其它服务器的存放目录

手动同步拓展

1、同步切片文件夹videos所有文件后,只删除切片文件,保留其它文件

首先只同步切片文件,过滤掉其它文件,并配置同步成功后删除切片,使用命令:

rsync -avu -e 'ssh -p 9999' --include='*/' --include='*.ts' --exclude='*' --remove-source-files root@1.2.3.4:/home/express-ffmpeg/public/videos /home

后面一个--include为只同步的后缀,默认ts切片,如果你设置过伪装,则改成*.png,如果两者都有,则改成--include={'*.ts','*.png'}

接下来同步剩下的文件,但不删除,也就保留了转码服务器的这些文件,使用命令:

rsync -avu -e 'ssh -p 9999' root@1.2.3.4:/home/express-ffmpeg/public/videos /home

2、强制将切片文件夹videos和同步后的videos文件夹全部文件变成一模一样

注意:此方法仅适用于同步的时候,没有删除任意切片等文件,如果你删除了转码服务器的切片文件,强制一样后,同步端切片也会被删除。

一般我们可能会在转码服务器里删除相关文件,但为了节省空间,需要将同步后的文件夹也删除相应的文件,这里可以使用命令:

rsync -avu -e 'ssh -p 9999' --delete root@1.2.3.4:/home/express-ffmpeg/public/videos /home

使用该命令前,一定要看一下上面的注意说明,切勿乱用。

3、如何在运行同步命令的时候免密码输入,适用于定时计划的自动同步

提示:我们提前配置好了命令后,直接加入定时计划任务,按时同步即可。

由于我们有时候需要定时同步文件,而定时不方便输入密码,这里就找了个比较简单的方法免密输入,配合sshpass工具即可。

先使用SSH客户端登录到其它服务器即同步文件存放端,安装一下sshpass,使用命令:

#CentOS系统
yum install -y epel-release
yum install sshpass -y

#Debian、Ubuntu系统
apt install sshpass -y

再使用命令:

sshpass -p 'xxxxx' rsync -avu -e 'ssh -p 9999' root@1.2.3.4:/opt/express-ffmpeg/public/videos /home

也就是在常用的同步命令之前加一句sshpass -p 'xxxxx'代码即可,且xxxxx为需要同步的服务器密码,此时运行就不需要输入密码了。

4、针对第3点,如何设置定时计划任务

如果有安装宝塔,则直接前往宝塔计划任务那块即可,任务类型选择shell,脚本内容为同步命令。

如果你没有安装宝塔,则这里提供一个命令行,先安装crontab定时工具,使用命令:

#CentOS系统
yum install crond -y
systemctl start crond
systemctl enable crond

#Debian、Ubuntu系统
apt-get install cron -y

再设置定时计划任务,使用命令:

crontab -l > crontab.bak
#0 1 * * *为每天1:00执行命令,后面为同步命令行
echo "0 1 * * * sshpass -p 'xxxxx' rsync -avu -e 'ssh -p 9999' root@1.2.3.4:/opt/express-ffmpeg/public/videos /home" >> crontab.bak
crontab crontab.bak
rm -rf crontab.bak

最后可在第二天检查同步是否设置成功即可。

相关定时任务时间设置参考:

43 21 * * *   #21:43 执行
15 05 * * *   #05:15 执行
0 17 * * *    #17:00 执行
0 17 * * 1    #每周一的17:00 执行
0,10 17 * * 0,2,3    #每周日,周二,周三的17:00和17:10 执行
0-10 17 1 * *    #毎月1日从17:00到7:10毎隔1分钟 执行
0 0 1,15 * 1    #毎月1日和15日和一日的0:00 执行
42 4 1 * *   #毎月1日的4:42分 执行
0 21 * * 1-6   #周一到周六21:00 执行
0,10,20,30,40,50 * * * *   #每隔10分 执行
*/10 * * * *   #每隔10分 执行
* 1 * * *   #从1:0到1:59每隔1分钟 执行
0 1 * * *   #1:00 执行
0 */1 * * *   #毎时0分每隔1小时 执行
0 * * * *   #毎时0分 执行
2 8-20/3 * * *   #8:02,11:02,14:02,17:02,20:02 执行
30 5 1,15 * *   #1日和15日的5:30 执行

5、同步太慢,如何多线程同步加快进度

此命令需要在转码服务器,也就是在被同步服务器上运行,使用命令:

#进入到程序切片目录
cd /home/express-ffmpeg/public/videos
#开始多线程同步
ls /home/express-ffmpeg/public/videos | xargs -n1 -P4 -I% sshpass -p 'xxxx' rsync -avu -e 'ssh -p 22' -Pa % root@1.2.3.4:/home/videos

注意sshpass -p 'xxxx' rsync -avu -e 'ssh -p 22'为同步的参数,且为上面的方式3免密同步,root@1.2.3.4:/home/videos为需要同步到的服务器ip和切片存放路径,必须多一个videos