码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-12-28 11:43:28      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:nts   copy   name   back   增量备份   login   忽略   内核参数   /etc   

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
[root@cdncenter inotify-tools-3.13]# uname -r
2.6.18-194.el5
  • 判断系统是否支持inotify,---查看内核参数,在proc下面存在下面三个文件
[root@cdncenter 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 #表示每个实例最多监控文件数
[root@cdncenter 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(建议大于监控目标的总文件数)。

[root@cdncenter ~]# 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文件生效

查看是否修改成功:

[root@cdncenter 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命令基本用法

[root@xuegod63 ~]# inotifywait -h

常用参数:

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

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

-m 表示持续监控

-r 表示递归整个目录

-q 表示简化输出信息

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

终端1:

[root@cdncenter 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:

[root@cdncenter rhel6]# touch test
[root@cdncenter rhel6]# echo "111" >test
[root@cdncenter rhel6]# rm -rf test 
[root@cdncenter rhel6]# touch test
[root@cdncenter 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,同步时不需要输入密码

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

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

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

[root@cdncenter scripts]# cat aaa.sh 
#!/bin/sh

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

执行结果

[root@cdncenter scripts]# sh aaa.sh 
aaa
bbb
ccc

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

[root@cdncenter 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} root@${DST_address}:${DST_dir} 
done
优化:当更新较频繁时,应避免并发执行rsync备份(当rsync进程已经存在,则忽略本次同步,或根据rsync进程数量来决定是否同步)
[root@cdncenter 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} root@${DST_address}:${DST_dir} 
    fi
done

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

 

---rsync完结

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

标签:nts   copy   name   back   增量备份   login   忽略   内核参数   /etc   

原文地址:https://www.cnblogs.com/snailshadow/p/8129862.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!