1、由于rsync在实施大量数据备份时,工作方式是扫描整个数据文件,其实发生更改的只是一小部分,导致过多的占用系统资源。
2、rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。
因此需要一个新的工具来解决这两个问题,inotify就运用而生。
inotify优点:
Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。 rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。
系统约定
源服务器IP:192.168.1.3
另外需要同步数据的三台服务器IP分别为
web1:192.168.1.4
web2:192.168.1.5
web3:192.168.1.6
三台web服务器安装rsync服务
详细安装配置请参考CentOS Rsync 服务器与客户端同步配置
由于源服务器是客户端推送到服务器端,所以read only = yes要改为read only = no
[web] uid = root gid = root path = /web/ ignore errors read only = no list = no auth users = rsync secrets file = /etc/rsyncd.passwd
源服务器配置
安装inotify-tools
# yum -y install inotify-tools
修改inotify相关参数
# echo 50000000 > /proc/sys/fs/inotify/max_user_watches
创建inotify监控同步脚本
# vim /usr/local/sbin/inotify.sh
添加如下内容:
#!/bin/bash web1=192.168.1.4 web2=192.168.1.5 web3=192.168.1.6 src=/www/ dst=web user=rsync /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e create,move,delete,modify,attrib $src | while read files do /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.passwd $src $user@$web1::$dst /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.passwd $src $user@$web2::$dst /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.passwd $src $user@$web3::$dst echo "${files} was rsynced" >>/tmp/rsync.log 2>&1 done
给予inotify.sh可执行权限
# chmod u+x /usr/local/sbin/inotify.sh
将inotify.sh 放在后台运行
# /usr/local/sbin/inotify.sh &
记得退出终端的时候用exit退出,否则关闭终端后,此脚本运行会结束,为避免出现这种情况,可以采用nohup命令
# nohup /usr/local/sbin/inotify.sh &
将脚本加到开机启动项
# echo "/usr/local/sbin/inotify.sh &" >> //etc/rc.local