RSYNC04-配置rsync+inotify实现实时同步

Posted snailshadow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RSYNC04-配置rsync+inotify实现实时同步相关的知识,希望对你有一定的参考价值。

1,背景介绍

      Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。

      使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。

inotify:下载地址:http://sourceforge.net/projects/inotify-tools/

版本号:3.1.13

      SourceForge.net,又称SF.net,是开源软件开发者进行开发管理的集中式场所。SourceForge 是全球最大开源软件开发平台和仓库,网站建立的宗旨,就是为开源软件提供一个存储、协作和发布的平台。SourceForge 上拥有大量非常优秀的开源软件,事实上,这些软件完全可以代替一些商业软件。

2,实战

 

2.1 查看系统是否支持inotify,优化内核参数

  • 判断系统是否支持inotify,---内核是否高于2.6.13
[[email protected] inotify-tools-3.13]# uname -r
2.6.18-194.el5
  • 判断系统是否支持inotify,---查看内核参数,在proc下面存在下面三个文件
[[email protected] inotify-tools-3.13]# ll /proc/sys/fs/inotify/
总计 0
-rw-r--r-- 1 root root 0 12-28 00:10 max_queued_events
-rw-r--r-- 1 root root 0 12-28 00:10 max_user_instances
-rw-r--r-- 1 root root 0 12-28 00:10 max_user_watches

在linux内核中,默认的inotify机制提供了三个调控参数:

  1. max_queued_events #表示监控事件队列
  2. max_user_instances #表示最多监控实例数
  3. max_user_watches #表示每个实例最多监控文件数
[[email protected] inotify]# cat max_queued_events 
16384
[root@cdncenter inotify]# cat max_user_instances 
128
[root@cdncenter inotify]# cat max_user_watches 
8192

注:当要监控的目录、文件数量较多或者变化较频繁时,要加大这三个参数的值。

例如:可直接修改/etc/sysctl.conf配置文件,将管理队列设为32768,实例数设为1024,监控数设为9000000(建议大于监控目标的总文件数)。

[[email protected] ~]# vim /etc/sysctl.conf #以文件最后,添加以下内容
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 90000000
[root@cdncenter ~]# sysctl -p #使修改后的sysctl.conf文件生效

查看是否修改成功:

[[email protected] inotify]# cat max_user_watches 
90000000
[root@cdncenter inotify]# cat max_user_instances 
1024
[root@cdncenter inotify]# cat max_queued_events 
32768

 

2.2 安装inotify工具

1,使用sftp将inotify-tools-3.13.tar.gz上传到/usr/local/src目录下

2,解压软件 tar –zxvf inotify-tools-3.13.tar.gz

3,编译安装 ./configure && make –j4 && make install                   -j4 意思是:使用4个CPU来编译,编译速度大大提升

 

2.3 inotify测试

      inotifywait命令基本用法

[[email protected] ~]# inotifywait -h

常用参数:

-e 用来指定要监控哪些事件。

这些事件包括: create创建,move移动,delete删除,modify修改文件内容,attrib属性更改。

-m 表示持续监控

-r 表示递归整个目录

-q 表示简化输出信息

    使用inotifywait命令监控目录/mpeg/mirrors/yumwarehouse/rhel6发生的变化。然后在另一个终端向/mpeg/mirrors/yumwarehouse/rhel6目录下添加文件、移动文件,查看屏幕输出结果。

终端1:

[[email protected] yumwarehouse]# inotifywait -mrq -e create,move,delete,modify /mpeg/mirrors/yumwarehouse/rhel6/

/mpeg/mirrors/yumwarehouse/rhel6/ CREATE test
/mpeg/mirrors/yumwarehouse/rhel6/ MODIFY test
/mpeg/mirrors/yumwarehouse/rhel6/ MODIFY test
/mpeg/mirrors/yumwarehouse/rhel6/ DELETE test
/mpeg/mirrors/yumwarehouse/rhel6/ CREATE test
/mpeg/mirrors/yumwarehouse/rhel6/ MOVED_FROM test
/mpeg/mirrors/yumwarehouse/rhel6/ MOVED_TO test1

终端2:

[[email protected] rhel6]# touch test
[[email protected] rhel6]# echo "111" >test
[[email protected] rhel6]# rm -rf test 
[[email protected] rhel6]# touch test
[[email protected] rhel6]# mv test test1

使用inotifywait输出的监控结果中,每行记录中依次包括目录、事件、文件。那木根据此可以识别变动情况,编写触发式同步脚本:

 

2.4 编写触发式同步脚本

SRC_address=10.80.0.1

SRC_dir=/mpeg/mirrors/yumwarehouse/rhel6/

DST_address=10.80.0.161

SRC_dir=/home/rpmpackage/saltmaster/

第一步,同步时不需要输入密码:10.80.0.1发生变化后,直接将发生变化的数据同步到10.80.0.161,同步时不需要输入密码

[[email protected]~]# ssh-keygen
[[email protected]~]# ssh-copy-id [email protected]
[[email protected]~]# ssh 10.80.0.161
Last login: Wed Nov 12 17:51:35 2017

第二步编写触发式同步脚本

前提:参考以下shell脚本:将输出结果赋给变量,并打印

[[email protected] scripts]# cat aaa.sh 
#!/bin/sh

echo aaa bbb ccc |while read D E F
do
    echo $D
    echo $E
    echo $F
done

执行结果

[[email protected] scripts]# sh aaa.sh 
aaa
bbb
ccc

实战脚本,监控10.80.0.1服务器的=/mpeg/mirrors/yumwarehouse/rhel6/,一旦发生变化,将增量数据同步给10.80.0.161的=/home/rpmpackage/saltmaster/目录

[[email protected] scripts]# cat inotify.sh 
#!/bin/sh

SRC_dir=/mpeg/mirrors/yumwarehouse/rhel6/
DST_address=10.80.0.161
DST_dir=/home/rpmpackage/saltmaster/

inotifywait -mrq -e create,move,delete,modify ${SRC_dir} |while read D E F
do 
    rsync -azvP --delete --progress ${SRC_dir} [email protected]${DST_address}:${DST_dir} 
done
优化:当更新较频繁时,应避免并发执行rsync备份(当rsync进程已经存在,则忽略本次同步,或根据rsync进程数量来决定是否同步)
[[email protected] scripts]# cat inotify_rsync.sh 
#!/bin/sh

SRC_dir=/mpeg/mirrors/yumwarehouse/rhel6/
DST_address=10.80.0.161
DST_dir=/home/rpmpackage/saltmaster/

inotifywait -mrq -e create,move,delete,modify ${SRC_dir} |while read D E F
do 
    a=`pgrep rsync|wc -l`
    if [ $a -le 3 ];then
    /usr/bin/rsync -azvP --delete --progress ${SRC_dir} [email protected]${DST_address}:${DST_dir} 
    fi
done

注:进程数大于3个时,暂停同步

 

---rsync完结

以上是关于RSYNC04-配置rsync+inotify实现实时同步的主要内容,如果未能解决你的问题,请参考以下文章

rsync+inotify文件同步

配置inotify+rsync实时同步

配置rsync+inotify实现站点文件实时同步

Rsync远程同步,实现下行 ,上行异地备份。配置rsync+inotify实时备份。

配置rsync+inotify实时同步

rsync+inotify实现数据实时同步