rsync+inotify实现文件的实时同步
工作中的一个需求,生产环境测试通过,可以实现文件的实时同步,希望对大家有帮助,希望看到的同志,一定要顶,这样才是好同志嘛!呵呵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 settingsport = 873uid = rootgid = rootuse chroot = yesread only = nomax connections = 7pid file =/var/run/rsyncd.pidlog file =/var/log/rsyncd.loghosts allow = *transfer logging = yeslog format = %t %a %m %f%bsyslog facility = local3timeout = 300# Section 2: Directoryto be synced[mp3]path = /data/mp3list = falseignore errors = yesauth users = syncusersecrets 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 :873tcp 0 00.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.passIamOK建立自动同步的脚本,使用inotifywait监控目录,当监控目录改变的时候,调用rsync同步改变的文件# vim /var/tmp/auto_sync.sh
复制内容到剪贴板
代码:
#!/bin/bash#DESTHOST=1.1.1.1DESTHOSTDIR=/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 $SRCDIRsyncuser@${DESTHOST}::mp3 &>/dev/null && \ echo "At ${TIME} on ${DATE}, file $FILECHANGE was backed up viarsync" >> /var/log/mp3sync.logdone
# chmod u+x/var/tmp/auto_sync.sh# /var/tmp/auto_sync.sh &开机自动运行# echo '/var/tmp/auto_sync.sh &' >> /etc/rc.local总结:以上可以实现文件的实时同步,如果两端本来文件不一致,建议先使用rsync做一次完全的同步,因为本文章所写的方法,只对改变的文件进行同步