Inotify 是文件系统事件监控机制,只要是内核版本在2.6.13以上的linux系统都可以用。
inotify-tools下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
rsync下载地址:http://www.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
一、需求分析
服务器A的数据目录内容变化后,改变要实时更新到服务器B的相关目录。
二、解决方案
1、多台服务器做为rsync服务器端,服务器A做为rsync客户端,使用rsync命令同步数据内容。
2、inotify做为触发器,当服务器A数据目录内容变化时,执行rsync命令同步数据。
A 192.168.13.151
B 192.168.13.252
三、安装配置
1)、服务器端B安装配置rsync
如果是centos系统可以使用以下命令查看是否安装了rsync
# rpm -qa | grep rsync
如果有安装则可跳过以下源码安装
rsync源码安装
# wget http://www.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz # tar zxvf rsync-3.0.7.tar.gz # cd rsync-3.0.7 # ./configure –prefix=/usr # make # maek install
rsync配置
# vim /etc/rsyncd.conf 输入以下内容 uid = root gid = root use chroot = no max connections = 10 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsync.log [images] path = /opt/images read only = no auth users = root secrets file = /etc/rsyncd.secrets
建立用户认证文件
# echo -ne “root:rootpassword” > /etc/rsyncd.secrets # chmod 600 /etc/rsyncd.secrets
开机自动执行
# echo -ne “rsync –daemon -–config=/etc/rsyncd.conf” >> /etc/rc.local
启动服务
# rsync –daemon -–config=/etc/rsyncd.conf
2)客户端A安装rsync+inotify-tools
rsync安装可参照服务端B的安装方法,无需进行配置。
# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz # tar zxvf inotify-tools-3.13.tar.gz # cd inotify-tools-3.13 # ./configure –prefix=/usr/local/inotify # make # make install
建立用户密码文件
# echo -ne “B服务端root密码” > /etc/rsyncd.secrets # chmod 600 /etc/rsyncd.secrets
建立同步脚本
# vim /root/InotifyRsync.sh
#!/bin/bash host_1=192.168.13.252 src=/opt/image/ dst=images user=root /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | while read file do rsync -avzP --delete --password-file=/etc/rsyncd.secrets $src $user@$host_1::$dst > /dev/null echo "${file} was rsynced" done exit 0
开机自动执行
# echo -ne ‘/root/InotifyRsync.sh &’ >> /etc/rc.local
四、测试是否配置成功
在客服端A上执行脚本
# sh /root/InotifyRsync.sh
切换A服务器终端执行以下命令
# touch /opt/image/1.txt
查看B服务器的/opt/image/1.txt文件是否存在
inotify支持的触发事件
- IN_ACCESS,即文件被访问
- IN_MODIFY,文件被 write
- IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等
- IN_CLOSE_WRITE,可写文件被 close
- IN_CLOSE_NOWRITE,不可写文件被 close
- IN_OPEN,文件被 open
- IN_MOVED_FROM,文件被移走,如 mv
- IN_MOVED_TO,文件被移来,如 mv、cp
- IN_CREATE,创建新文件
- IN_DELETE,文件被删除,如 rm
- IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
- IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
- IN_UNMOUNT,宿主文件系统被 umount
- IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
- IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)
转载:FKBlog » rsync实时同步(搭配inotify-tools)(http://www.fkblog.org/blog795)