rsync+inotify实现数据的实时备份(3)

echo "PATH=/usr/local/inotify/bin:$PATH" >>/etc/profile.d/inotify.sh source /etc/profile.d/inotify.sh #使设置立即生效 echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf ln -s /usr/local/inotify/include /usr/include/inotify

4、修改inotify默认参数(inotify默认内核参数值太小)

查看系统默认参数值

sysctl -a | grep max_queued_events 结果是:fs.inotify.max_queued_events = 16384 sysctl -a | grep max_user_watches 结果是:fs.inotify.max_user_watches = 8192 sysctl -a | grep max_user_instances 结果是:fs.inotify.max_user_instances = 128 修改参数: sysctl -w fs.inotify.max_queued_events="99999999" sysctl -w fs.inotify.max_user_watches="99999999" sysctl -w fs.inotify.max_user_instances="65535" 

参数说明:

max_queued_events:

inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确

max_user_watches:

要同步的文件包含多少目录,可以用:find /home/www.linuxidc.net -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/home/www.linuxidc.net为同步文件目录)

max_user_instances:

每个用户创建inotify实例最大值

5、创建脚本,实时触发rsync进行同步

vi /usr/local/inotify/rsync.sh  #编辑,添加以下代码

#!/bin/sh srcdir=/home/www.linuxidc.net/ dstdir=home_ rsyncuser=home_ rsyncpassdir=/etc/passwd.txt dstip="192.168.21.128 192.168.21.127" for ip in $dstip do   rsync -avH --port=873 --progress --delete $srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir done /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $srcdir | while read file do for ip in $dstip do rsync -avH --port=873 --progress --delete $srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir echo " ${file} was rsynced" >> /tmp/rsync.log 2>&1 done done

-----------------------------------------------------------------

chmod +x /usr/local/inotify/rsync.sh #添加脚本执行权限

srcdir=/home/www.linuxidc.net/ #源服务器同步目录 dstdir=home_ #目标服务器rsync同步目录模块名称 rsyncuser=home_ #目标服务器rsync同步用户名 rsyncpassdir=/etc/passwd.txt #目标服务器rsync同步用户的密码在源服务器的存放路径 dstip="192.168.21.127 192.168.21.128" #目标服务器ip,多个ip用空格分开 /tmp/rsync.log #脚本运行日志记录

脚本参数说明

6、设置脚本开机自动执行

vi /etc/rc.d/rc.local #编辑,在最后添加一行 sh /usr/local/inotify/rsync.sh & #设置开机自动在后台运行脚本 :wq! #保存退出

7、测试inotify实时触发rsync同步脚本是否正常运行

在源服务器192.168.21.129上创建文件inotify_rsync_ceshi

mkdir /home/www.linuxidc.net/inotify_rsync_ceshi

重新启动源服务器:192.168.21.129

等系统启动之后,查看两台目标服务器192.168.21.127,192.168.21.128的/home/www.linuxidc.net下是否有inotify_rsync_ceshi文件夹

然后再在源服务器192.168.21.129创建文件夹inotify_rsync_ceshi_new

mkdir /home/www.linuxidc.net/inotify_rsync_ceshi_new

继续查看两台目标服务器192.168.21.127,192.168.21.128的/home/www.linuxidc.net下是否有inotify_rsync_ceshi_new文件夹

如果以上测试都通过,说明inotify实时触发rsync同步脚本运行正常。

至此,Linux下Rsync+Inotify-tools实现数据实时同步完成。

扩展阅读:

inotify参数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5df4d738333207c492c0ba945437044a.html