Rsync+Inotify实现数据实时同步

简介:

1、环境及相关软件介绍

操作系统:Ubuntu12.04_x64

源服务器(推送):192.168.18.10

目标服务器(备份):192.168.18.20

rsync:

  rsync是unix系统下的数据镜像备份工具,是一款快速增量备份工具(远程同步),支持本地复制,或者与其他SSH(安全传输)、rsync主机同步。

rsync有以下常用的参数:

    -v,--verbose 显示同步过程的详细信息

    -a,--archive 归档模式,表示以递归方传输文件,并保持所有文件属性,等同于-rlptgoD

    -r,--recursive 对子目录以递归模式处理

    -z,--compress 对备份的文件在传输时进行压缩处理

    -l,--links 保留软连接

    -H,--hard-links 保留硬链接

    --delete 删除那些DST中SRC没有的文件(源服务器删除文件,目标服务器也同时删除)

    --progress 显示备份过程,等同于-P

    --port=PORT 指定rsync服务端口

    --exclude=FILE 排除一个目录或文件(排除多个目录时,可以写多个--exclude)

    --exclude-from=FILE  排除多个目录或文件,FILE里面写多个要排除的目录

inotify:

 inotify是一个Linux特性,它监控文件系统操作,比如读取、写入和创建,当文件系统有变化时,则会触发inotify。inotify提供inotify-tools工具,这个工具包含两个功能,一个是inotifywait,用来监控文件系统变化的事件,另一个是inotifywatch,用来统计文件系统访问的次数。我们这次使用inotifywait结合rsync实现实时同步功能。

inotifywait有以下常用参数:

-m,--monitor 一直保持监听事件

-r,--recursive 递归监控目录

-q,--quiet 只打印触发的事件

-e,--event 指定监视时间

--timefmt 指定时间格式,用于-format选型中的%T格式

--format 指定输出格式。

%w 表示发生事件的目录

%f 表示发生事件的文件

%e 表示发生的事件

%T 使用由—timefmt定义的时间格式

inotifywait常用监视事件:

access 文件或目录读取

modify 文件或目录更改

attrib 文件或目录属性更改

move  文件或目录移动

create 文件或目录创建

delete 文件或目录删除

2、目标服务器安装与配置

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
# sudo apt-get install rsync    #ubuntu系统默认已安装
# sudo cp/usr/share/doc/rsync/examples/rsyncd.conf /etc/
# sudo vi /etc/rsyncd.conf
 
# 以下是全局配置
 
log  file  /var/log/rsyncd .log
pid  file  /var/run/rsyncd .pid
lock  file  /var/lock/rsyncd
 
#以下是模块选项配置
 
[home]      #模块名,在源服务器指定这个名字
    comment =  sync  rsync /home       #描述信息
    path =  /home/rsync       #备份目录
    use chroot=no            #不使用chroot,不用root权限
    read  only = no           #设置本地备份目录为读写权限
    uid=root          
    gid=root
    max connections=10        #客户端最大连接数
    auth  users  rsync       #指定数据同步用户
    secrets  file  /etc/rsyncd .pass           #指定数据同步用户信息文件
    hosts allow=192.168.18.0 /24      #允许连接的客户端
    ignore errors =  yes      #忽略出现I/O错误
    timeout = 600

 #创建认证文件

1
2
3
4
5
6
7
8
9
# sudo vi /etc/rsyncd.pass
rsync :123456       #格式是用户名:密码
# sudo chmod 600 /etc/rsyncd.pass      #属主要有权限读这个文件,否则会报没权限
# sudo /etc/init.d/rsync start     #如果启动报如下错误,则根据提示打开/etc/default/rsync文件,将RSYNC_ENABLE=false该为RSYNC_ENABLE=true,再重启即可。
rsync  daemon not enabled  in /etc/default/rsync , not starting...
 
#,查看是否启动,有rsync监听端口说明正常:
# sudo netstat -antp |grep rsync
tcp        0     0 0.0.0.0:873            0.0.0.0:*               LISTEN      29605 /rsync


博客地址:http://lizhenliang.blog.51cto.com


3、源服务器安装与配置

1
2
3
4
5
# sudo apt-get install rsync inodify-tools
#rsync不用配置,因为我们只使用rsync命令,紧接着创建认证文件
# sudo vi /etc/rsyncd.pass
123456      #只写密码
# sudo chmod 600/etc/rsyncd.pass

 #此时基本配置完成,测试下是否能推送吧!

1
2
3
4
5
6
# rsync -avzP --password-file=/etc/rsyncd.pass --delete /home/rsync rsync@192.168.18.20::home   #home即是目标服务器上rsync里面的模块名
sending incremental  file  list
rsync /a
            0 100%    0.00kB /s    0:00:00 (xfer #1, to-check=5/7)
sent 354 bytes  received 126 bytes  960.00 bytes /sec
total size is 0  speedup is 0.00

 #出现以上信息说明同步正常,接下来,就该编写Shell脚本,使用inotifywait做实时监控源目录,加个while循环判断源目录是否有触发,如果有变化则执行rsync同步,并记录日志:

1
2
3
4
5
6
7
8
9
# vi inotify_rsync.sh
#!/bin/bash
SRC= '/home/rsync'
DST= 'rsync@192.168.18.20::home'
/usr/bin/inotifywait  -mrq --timefmt  '%y-%m-%d %H:%M'  -- format  '%T %w %f %e'  -e create,delete,move,modify $SRC| while  read  files
do
     rsync  -avzP --password- file = /etc/rsyncd .pass --delete $SRC $DST
     echo  "$files was rsynced." >>  /tmp/rsync .log
done

4、测试实时同步

 #先打印形式查看脚本执行情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# bash -x inotify_rsync.sh 
+ SRC= /home/rsync/         #目录结尾一定要加个/,否则会再目标服务器再创建个目录
+DST= rsync @192.168.18.213::home
read  files
/usr/bin/inotifywait  -mrq --timefmt  '%y-%m-%d %H:%M'  -- format  '%T %w%f %e'  -e create,delete,move,modify,attrib  /home/loongtao
rsync  -avzP --password- file = /etc/rsyncd .pass --delete  /home/rsync  rsync @@192.168.18.213::home
sending incremental  file  list
rsync /
rsync /test .txt
            0 100%    0.00kB /s    0:00:00 (xfer #1, to-check=2/11)
  
sent 349 bytes  received 32 bytes  762.00 bytes /sec
total size is 9380  speedup is 24.62
echo  '15-04-24 13:33/home/rsync/test.txt CREATE was rsynced.'
read  files
rsync  -avzP--password- file = /etc/rsyncd .pass --delete  /home/rsync  rsync @192.168.18.213::home
sending incremental  file  list
  
sent 310 bytes  received 10 bytes  640.00 bytes /sec
total size is 9380  speedup is 29.31
echo  '15-04-24 13:33/home/rsync/test.txt ATTRIB was rsynced.'
read  files

#可以看到以上信息,无任何报错,说明已经推送成功。

然后,把脚本放到后台运行:

1
2
# chmod +x inotify_rsync.sh
# ./inotify_rsync.sh &

#此时当源服务器/home/rsync目录文件有更新,则会同步到目标服务器/home/rsync目录


目录
相关文章
|
9月前
|
监控
inotify+rsync实现实时同步数据
inotify+rsync实现实时同步数据
84 0
|
6月前
|
监控 Linux
rsync+inotify实时同步
rsync+inotify实时同步
|
9月前
|
监控 安全 Shell
使用 inotify 和 rsync 实现文件实时同步
使用 inotify 和 rsync 实现文件实时同步
246 1
|
监控 Linux
配置inotify + rsync 实现实时同步
配置inotify + rsync 实现实时同步
211 0
配置inotify + rsync 实现实时同步
|
监控 测试技术 Linux
rsync+inotify实时同步案例
rsync+inotify实时同步案例 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。
1223 0
|
监控 安全 Shell
inotify+rsync实现实时同步
1.1 什么是实时同步:如何实现实时同步 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 发现目录中数据产生变化,就利用rsync服务推送到备份服务器上 1.2 实现实时同步的方法    inotify+rsync 方式实现数据同步    sersync 方式实现实时数据同步 详情参照:http://www.cnblogs.com/clsn/p/7707828.html 1.2.1 实时同步原理介绍   1.3 inotify+rsync 方式实现数据同步 1.3.1 Inotify简介   Inotify是一种强大的,细粒度的。
1820 0
|
Web App开发 监控 网络协议