码迷,mamicode.com
首页 > 系统相关 > 详细

crontab +rsycnc 单进程低延迟文件同步

时间:2018-02-14 14:39:29      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:变化   /etc   port   rsync.sh   pre   上传   启动   one   判断   

1.业务需求:网站上传的文件需要跨国家的服务器之间保持同步。
2.实现方法
1) .inotify+rsync 。inotify监听文件变化。然后调用rsync同步变化的目录。优点:文件变化时同步,减少文件同步次数,因为每次同步需要对比双方服务器文件列表,故该方法可以降低带宽占用。缺点:在双方服务器频繁上传的场景下。同一个目录下多个文件上传,会导致重复同步调用较多,极大降低了效率。当然可以通过建立同步目录队列。过滤重复的同步目录解决这个缺点
2) .crontab+rsync 。定时同步。优点:实现简单,几行代码即可实现;适合文件变化较多的场景。缺点:不管文件是否变化一直同步。会浪费一些网络带宽。需要避免并发。并发时会重复同步文件。

3.业务实现
1)rsync.sh 同步脚本。该脚本实现了每10秒检查一次是否有同步进程。没有的话启动同步进程,否则等待正在进行的同步进程。

#!/bin/bash
#rsync all
#每10秒检查一次,如果没有同步进程,启动同步
idx=1
while [ $idx -le 6 ];do
echo "idx=$idx"
date
#判断是否有正在同步的进程。
pid=ps -ef |grep rsync|grep rsyncd.pw|grep imgrsync|awk ‘{print $2}‘

if [ "$pid" ];then
    echo "rsync is running,pid:$pid"
    sleep 10s 
    idx=$((idx+1))
else
    rsync -avzrt --delete  --exclude-from=/opt/rsync/exclude-list.txt --password-file=/etc/rsyncd.pw /path-to-rsync/ rsync://imgrsync@{host}:{port}/images
    exit 1
fi

done

2)crontab  crontab 保证每1分钟启动一次rsync.sh

    `*/1 * * * * /opt/rsync/rsync.sh>/var/log/rsync/rsync-all.log`

crontab +rsycnc 单进程低延迟文件同步

标签:变化   /etc   port   rsync.sh   pre   上传   启动   one   判断   

原文地址:http://blog.51cto.com/lhjszz/2071656

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!