设为首页 收藏本站
查看: 539|回复: 0

[经验分享] Cetnos环境下inotify+rsync实时同步

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-28 10:08:50 | 显示全部楼层 |阅读模式
一.介绍
1.1 rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。


1.2 Inotify一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化

1.3 inotify+rsync结合,可以做到远程数据的实时同步,以下实验使用rsync客户端+inotify实时将数据同步到rsync服务端

二.环境准备

2.1 系统:CentOS6.5
  rsync客户端:192.168.55.229
  rsync服务端:192.168.55.219

2.2 rsync和inotify安装:
1
2
# yum install rsync
# yum install inotify-tools






三.rsync服务器配置

3.1 编辑rsync服务端配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# vim /etc/rsyncd.conf
log file = /var/log/rsyncd.log
pid file = /usr/local/rsync/var/rsyncd.pid
lock file = /usr/local/rsync/var/rsyncd.lock
secrets file = /usr/local/rsync/etc/rsyncd.pas
read only = no
hosts allow = 192.168.55.0/24
list = yes
uid = nobody
gid = nobody
use chroot = no
max connections = 4
[bak]                  //模块
path = /bak              //模块目录
comment = nfs bak          //描述信息
auth users = bak           //rsync同步需要的认证用户






3.2 rsync服务器创建密码文件
1
2
# vim rsyncd.pas
bak:338912           //格式为用户名:密码,文件权限为600






3.3 rsync服务启动
1
# /usr/bin/rsync --daemon --config=/etc/rsyncd.conf






四.rsync客户端配置

4.1 编辑rsync客户端同步需要的密码文件
1
2
# vim /etc/rsync.pas
338912              //rsync客户端只需要认证用户的密码,文件权限为600






4.2 命令行验证rysnc客户端到rsync服务端同步功能
1
2
3
4
5
6
# rsync -avzc  --progress --delete --password-file=/etc/rsync.pas  /tmp/test/  bak@192.168.55.219::bak
sending incremental file list
./
test/
sent 223 bytes  received 15 bytes  476.00 bytes/sec
total size is 394699  speedup is 1658.40






4.3 使用inotify+rsync脚本实现文件的实时检测并同步
脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
src=/tmp/test/
des=bak
rsync_passwd_file=/etc/rsync.pas
ip1=192.168.55.219
user=bak
cd ${src}
/usr/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file
do
        INO_EVENT=$(echo $file | awk '{print $1}')      # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
        INO_FILE=$(echo $file | awk '{print $2}')       # 把inotify输出切割 把文件路径部分赋值给INO_FILE
        echo "-------------------------------$(date)------------------------------------"
        echo $file
        #增加、修改、写入完成、移动进事件
        #增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。
        if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]];then
                echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
                rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}
        fi
        #删除、移动出事件
        if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]];then
                echo 'DELETE or MOVED_FROM'
                rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}
        fi
        #修改属性事件 指 touch chgrp chmod chown等操作
        if [[ $INO_EVENT =~ 'ATTRIB' ]]
        then
                echo 'ATTRIB'
                if [ ! -d "$INO_FILE" ]                 # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带>
更新此目录。
                then
                        rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}
                fi
        fi
done



:为做到实时同步,就必须要减少rsync对目录的递归扫描判断,尽可能的做到只同步inotify监控到已发生更改的文件。结合rsync的特性,所以该脚本是分开判断来实现一个目录的增删改查对应的操作,已经在测试机测试成功。因为inotify只在启动时会监控目录,他没有启动期间的文件发生更改,它是不知道的,所以可以在启动该脚本前做一次rsync全量同步,启动脚本后使用计划任务定时做rsync全量同步,防止各种意外遗漏,保证数据一致。
此脚本参考链接:http://www.ttlsa.com/web/let-infotify-rsync-fast/

五.rsync和inotify常用参数解释

5.1 rsync常用参数说明
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性
-c, --checksum 打开校验开关,强制对文件传输进行校验
--delete 删除那些DST中SRC没有的文件
-H, --hard-links 保留硬链接
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀
--backup-dir 将备份文件(如~filename)存放在在目录下
-z, --compress 对备份的文件在传输时进行压缩处理

5.2 inotify常用参数说明
-m 要持续监视变化
-r 使用递归形式监视目录
-q 减少冗余信息,只打印出需要的信
--format 指定文件变化的详细信息
rsync同步脚本.zip (1.05 KB, 下载次数: 0)


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-250554-1-1.html 上篇帖子: linux下历史命令history使用方法 下篇帖子: linux 普通用户ssh 证书导入,证书登录不需要密码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表