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目录

时间: 2024-08-22 15:04:37

Rsync+Inotify实现数据实时同步的相关文章

sersync:基于 rsync + inotify 实现数据实时同步

前言 提到数据同步就必然会谈到rsync,一般简单的服务器数据传输会使用ftp/sftp等方式,但是这样的方式效率不高,不支持差异化增量同步也不支持实时传输.针对数据实时同步需求大多数人会选择rsync+inotify-tools的解决方案,但是这样的方案也存在一些缺陷(文章中会具体指出),sersync是国人基于前两者开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源. 可靠高效的数据实时同步方式 原理 Synchronize f

Linux环境下通过rsync+inotify实现数据实时同步

本站一直缺少类似方面教程,今天就补充一下.其中rsync是一个远程数据同步工具,使用方法可以参考之前的文章<linux系统下Rsync远程数据同步命令介绍以及使用整理> ,但数据更新以后数据还需要手工同步,无法实现自动化.这里就借助资料配置一个rsync+innotify实现数据实时同步,解决手工处理烦恼. 环境准备:centos三台 源数据服务器:192.168.1.8 目标服务器:192.168.1.9    192.168.1.10 测试目的:将源服务器的/home/21yunwei 自

Linux中利用Rsync+Inotify-tools实现数据实时同步备份

说明: 操作系统:CentOS 5.X 源服务器:192.168.21.129 目标服务器:192.168.21.127,192.168.21.128 目的:把源服务器上/home/www.111cn.net目录实时同步到目标服务器的/home/www.111cn.net下 具体操作: 第一部分:分别在两台目标服务器192.168.21.127,192.168.21.128上操作 一.分别在两台在目标服务器安装Rsync服务端 1.关闭SELINUX vi /etc/selinux/config

Linux下Rsync+sersync实现数据实时同步的例子

前言: 一.为什么要用Rsync+sersync架构? 1.sersync是基于Inotify开发的,类似于Inotify-tools的工具 2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录. 二.Rsync+Inotify-tools与Rsync+sersync这两种架构有什么区别? 1.Rsync+Inotify-tools (1):Inotify-tools只能记录

CentOS下rsync+inotify-tools实现数据实时同步更新

rsync优点:安全性高.备份速度快.支持增量备份等.inotify是细密度的.异步的文件系统事件监控机制,Linux内核从2.6.13起,加入了对inotify的支持,通过第三方软件inotify-tools可以监控文件系统下的文件的各种变化情况. rsync和inotify-tools的配合使用可以实现数据的实时同步更新.以下是配置过程. 环境说明 Server A ip address :192.168.2.102 Server B ip address :192.168.2.103 Se

linux下通过rsync+inotify 实现数据实时备份(远程容灾备份系统)_Linux

配置过程记录下来,防止遗忘!如有建议技术支持QQ群139785720 配置架构如下: 一.安装步骤(服务器端192.168.0.5) 1) 安装rsync 点击下载rsync-3.0.9.tar.gz   下载文件放到该目录下/usr/src   #cd /usr/src   #tar -zxvf rsync-3.0.9.tar.gz //解压文件   #cd rsync-3.0.9 //进入该文件目录   #./configure //主要的作用是对即将安装的软件进行配置,检查当前的环境是否满

centos6中Rsync+sersync实现数据实时同步(大数据高性能方案)

安装sersync工具,实时触发rsync进行同步 1.查看服务器内核是否支持inotify ll /proc/sys/fs/inotify   #列出文件目录,出现下面的内容,说明服务器内核支持inotify -rw-r--r-- 1 root root 0 Mar  7 02:17 max_queued_events -rw-r--r-- 1 root root 0 Mar  7 02:17 max_user_instances -rw-r--r-- 1 root root 0 Mar  7

通过rsync+inotify实现数据的实时备份配置_Linux

一.rsync的优点与不足  与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等. 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的.而

企业Linux服务器数据实时同步备份的解决方案

数据是最宝贵的财产!公司的服务器都是需要对数据有着完整的备份策略,利用脚本.计划任务.开源软件等等,无论那种途径,能够对数据的实时同步,才是最理想的效果!下面详细介绍利用rsync配合inotify实现数据实时的触发同步. rsync:可以镜像保存整个目录树和文件系统.可以很容易做到保持原来文件的权限.时间.软硬链接等等.第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件. 方案:起初用rsync进行数据备份是利用计划任务,定时执行一下命令实现rsync的同步,但最近开发这边