[转帖] rsync+inotify实现文件的实时同步_OpenStack, 云计算等杂项讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  OpenStack, 云计算等杂项讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4788 | 回复: 0   主题: [转帖] rsync+inotify实现文件的实时同步        上一篇   下一篇 
张三丰
注册用户
等级:上尉
经验:511
发帖:53
精华:0
注册:2013-11-19
状态:离线
发送短消息息给张三丰 加好友    发送短消息息给张三丰 发消息
发表于: IP:您无权察看 2013-11-21 10:48:15 | [全部帖] [楼主帖] 楼主

rsync+inotify实现文件的实时同步

环境描述:现有两台服务器,要实现mp3文件的实时同步。可以使用rsync来做同步,但不能实现实时,为了实现实时同步,我们使用inotify来监控需要同步的目录发生的改变,inotify只是内核中的一个监控文件变化的模块,提供了监控文件变化的API,而要连接这个API,需要安装inotify-tools工具。可以实现文件的新增,删除,修改,改变属性等,功能很强大。现在需要一台服务器做为内容发布端,来把改变的文件,通过rsync实时的同步到内容服务器。
内容服务器:1.1.1.1(Ubuntu 12.04 x86-64)
发布服务器:1.1.1.2(Ubuntu 12.04 x86-64)

一、配置内容服务器1.1.1.1
安装rsync

 # sudo apt-get install rsync


提供rsync配置文件

# mkdir /etc/rsyncd/
# vim /etc/rsyncd/rsyncd.conf
# Section 1: Global settings
port = 873
uid = root
gid = root
use chroot = yes
read only = no
max connections = 7
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
hosts allow = *
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
# Section 2: Directory to be synced
[mp3]
path = /data/mp3
list = false
ignore errors = yes
auth users = syncuser
secrets file = /etc/rsyncd/rsyncd.pass


提供secrets file所指定的口令文件/etc/rsyncd/rsyncd.pass,其内容类似如下:

syncuser:IamOK


其中冒号前的是用户名,冒号后的是对应用户的密码。此文件不能为其他任意用户可访问,因此可用如下命令修改:

# chmod 600  /etc/rsyncd/rsyncd.pass


启动rsync服务

# /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf


验证服务是否开户

root@node1:/etc/rsyncd# netstat -nutlp | grep :873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      2357/rsync


加入开机启动

# echo "/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf" >>/etc/rc.local


二、配置发布服务器1.1.1.2
安装rsync

 # sudo apt-get install rsync inotify-tools
# mkdir /etc/rsyncd/
# vim /etc/rsyncd/rsyncd.pass
IamOK


建立自动同步的脚本,使用inotifywait监控目录,当监控目录改变的时候,调用rsync同步改变的文件

# vim /var/tmp/auto_sync.sh
#!/bin/bash
#
DESTHOST=1.1.1.1
DESTHOSTDIR=/data/mp3/
SRCDIR=/data/mp3/
inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e close_write,modify,delete,create,attrib $SRCDIR while read DATE TIME DIR FILE; do
FILECHANGE=${DIR}${FILE}
rsync -avz --password-file=/etc/rsyncd/rsyncd.pass $SRCDIR syncuser@${DESTHOST}::mp3 &>/dev/null && \
echo "At ${TIME} on ${DATE}, file $FILECHANGE was backed up via rsync" >> /var/log/mp3sync.log
done
# chmod u+x /var/tmp/auto_sync.sh
# /var/tmp/auto_sync.sh &


开机自动运行

# echo '/var/tmp/auto_sync.sh &' >> /etc/rc.local


总结:以上可以实现文件的实时同步,如果两端本来文件不一致,建议先使用rsync做一次完全的同步,因为本文章所写的方法,只对改变的文件进行同步,而不会去扫描整个目录。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论