rsync、inotify实现文件实时同步
2013-09-01 20:54
549 查看
一、Rsync概述二、Rsync命令选项及配置文件介绍三、Rsync的应用模式四、Inotify简介五、Inotify-tools工具使用介绍六、rsync+inotify实现实时同步一、rsync概述 rsync是类Unix系统下的数据镜像备份工具,它能很轻松的实现本地镜像与远程同步文件;从软件的命名上就能看得出来——remote sync。什么是rsync Rsync是一个远程数据同步工具,可通过LAN/WAN 快速同步多台主机间的文件。Rsync使用所谓的“rsync 算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync本来是用于替代rcp 的一个工具,目前由rsync.samba.org 维护,所以rsync.conf 文件的格式类似于samba 的主配置文件。Rsync可以通过rsh 或ssh 使用,也能以daemon 模式去运行在以daemon方式运行时Rsyncserver会打开一个873 端口,等待客户端去连接。连接时,Rsyncserver会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份。 Rsync 支持大多数的类Unix 系统,无论是Linux、Solaris 还是BSD 上都经过了良好的测试。此外,它在windows平台下也有相应的版本,如cwRsync和Sync2NAS等工具。rsync的功能特性: 可以镜像保存整个目录树和文件系统 可以增量同步数据,文件传输效率高 加密传输数据,保证了数据的安全性 可以使用rcp 、ssh 等方式来传输文件,当然也可以直接通过Socket连接传输文件 无须特殊权限即可安装
支持匿名传输二、Rsync命令选项及配置文件介绍
1、rsync命令使用格式: rsync [选项] 备份源 备份目标选项: -a #使用归档(archive)模式,保留文件原有属性等同于“-rlptgoD”等多个选项组合 -v #显示同步过程的详细信息 -c #打开校验开关,强制对文件传输进行校验 -l #保留软件链接 -L #像对待普通文件一样处理软链接 -D #保持设备文件信息 -W #拷贝文件不进行增量检测 -x #不要跨越文件系统边界 -e #指定使用rsh、ssh方式进行同步数据 -r #递归模式,包含目录及子目录中所有文件 -H #保留硬连接 -u #仅进行更新,跳过所有已经存在于DST,并且文件时间晚于要备份的文件(不覆盖更新的文件) -t #保留文件的时间标记 -z #在传输过程中进行压缩 -o #保留文件的属主(仅超级用户使用) -g #保留文件的属组(仅超级用户使用) -p #保留文件原的权限 --port=PORT #指定其他Rsync服务端口 --delete #删除目标目录有而源目录中没有的文件 --progress #显示传输过程 --exclude=PATTERN #指定排除不需要同步的文件模式 --include=PATTERN #指定不排除而需要同步的文件模式 --password-file=FILE #指定密码文件位置2、rsync主配置文件注释:
三、rsync 的应用模式
rsync有4 种应用模式,第一种是shell应用模式,也称为本地模式;第二种是远程shell模式,它利用SSH 执行底层连接和加密传输;第三种是查询〈也叫列表〉模式,与ls 命令实现的功能类似;第四种是服务器模式,平时所说的架设rsync 服务器就是指这种模式。下面分别对这4 种模式进行介绍:第一种模式:本地Shell模式 本地Shell模式主要是复制一个目录中的文件到另一目录,如:
![](http://blog.51cto.com/attachment/201309/210730730.gif)
第二种模式:远程Shell模式 rsync远程Shell模式可以把本地目录同步到另一台主机系统中,如:
![](http://blog.51cto.com/attachment/201309/210811251.gif)
第三种模式:列表模式 rsync与ls命令有相似的功能,如:
![](http://blog.51cto.com/attachment/201309/210850835.gif)
第四种模式:服务器模式 这种模式是基于C/S模式的,在这种模式下,rsync在后台启动了一个守护进程,这个守护进程在rsync服务器端永久运行,用于接收文件传输请求,因此客户可以把文件发送给守护进程,也可以向守护进程请求文件。rsync服务器模式非常适合异地数据备份;我们在后面介绍四、Inotify简介rsync的优点与不足 与传统的cp 、tar 备份方式相比, rsync 具有安全性高、备份迅速、支持增量备份等优点,通过rsync 可以解决对实时性要求不高的数据备份需求,例如,定期地备份文件服务器数据到远端服务器,对本地磁盘定期进行数据镜像等。随着应用系统规模的不断扩大,对数据的安全性和可靠性提出了更高的要求, rsync 在高端业务系统中也逐渐暴露出了很多不足。首先, rsync 同步数据肘,需要扫描所有文件后进行比对,然后进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常辑时的,而且发生变化的往往是其中很少的一部分,因此rsync 是非常低效的方式。其次, rsync 不能实时监测、同步数据,虽然它可以通过Linux 守护进程的方式触发同步,但是两次触发动作一定会有时间差,可能导致服务器端和客户端数据出现不一致,无法在出现应用故障时完全恢复数据。基于以上原因, rsync+inotify 组合出现了!inotify简介 inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制, Linux 内核从2.6.13版本起,加入了对inotify的支持。通过inotify可以监控文件系统中添加、删除、修改、移动等各种细微事件,利用这个内核接口,第三方软件可以监控文件系统下文件的各种变化情况,inotify-tools就是这样的一个第三方软件。这样rsync 就可以实现触发式的文件同步,但是通过crontab 守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify 可以监控文件系统的各种变化,当文件有任何变动时,会触发rsync同步,这样刚好解决了同步数据的实时性问题。五、Inotify-tools工具使用介绍安装完成后,会生成inotifywait和inotifywatch两个命令: inotifywait用于等待文件或文件集上的一个待定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树; inotifywatch用于收集被监控的文件系统计数据,包括每个inotify事件发生多少次等信息从上面可知inotifywait是一个监控事件,可以配合shell脚本使用它。与它相关的参数:语法格式:inotifywait [-hcmrq][-e][-t][--format][-timefmt][...] -m: 即“--monitor” 表示始终保持事件监听状态。 -r: 即“--recursive” 表示递归查询目录 -q: 即“--quiet” 表示打印出监控事件 -o: 即“--outfile” 输出事情到一个文件而不是标准输出 -s: 即“--syslog” 输入错误信息到系统日志 -e: 即“--event”, 通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、close_write、move、close、unmount和attrib等 -format: 指定输出格式;常用的格式符如:%w:表示发生事件的目录 %f:表示发生事件的文件 %e:表示发生的事件 %T:使用由-timefmt定义的时间格式 -timefmt:指定时间格式,用于-format选项中的%T格式inotifywatch是收集数据的指令,它的相关参数:语法格式:inotifywatch[-hvzrqf][-e][-t][-a][-d][...] -fromfile:从文件中读取需要监控的文件或排除的文件,一个文件一行,排除的文件以"@"开头 -z: 即“-zero” 输出表格的行和列,即使元素为空 -r: 即“-recursive” 监视一个目录下的所有子目录 -t: 即“-timeout” 设置超时时间 -e: 即“-event” 只监听指定的事件六、Rsync+Inotify实现实时同步下面以一个案例的形式来安装配置Rsync+Inotify实时同步数据
![](http://blog.51cto.com/attachment/201309/211713277.gif)
源主机:系统 Centos6.4_x86_64 同步文件目录"/data"目标主机:系统 Centos6.4_x86_64 备份目录"/data"1、在目标主机上面以rpm方式安装rsync软件并配置,并让rsync以超级守护进程运行
![](http://blog.51cto.com/attachment/201309/211924853.gif)
3、在源主机上面安装rsync与inotify-tools,不用做任何配置:
![](http://blog.51cto.com/attachment/201309/212116661.gif)
![](http://blog.51cto.com/attachment/201309/212144316.gif)
6、在目标主机查看验证:
![](http://blog.51cto.com/attachment/201309/212209505.gif)
至此已经全部完成,如果需要同步到多台主机,类似目标主机的做法即可。如果做的过程中遇到问题可以留言...
支持匿名传输二、Rsync命令选项及配置文件介绍
1、rsync命令使用格式: rsync [选项] 备份源 备份目标选项: -a #使用归档(archive)模式,保留文件原有属性等同于“-rlptgoD”等多个选项组合 -v #显示同步过程的详细信息 -c #打开校验开关,强制对文件传输进行校验 -l #保留软件链接 -L #像对待普通文件一样处理软链接 -D #保持设备文件信息 -W #拷贝文件不进行增量检测 -x #不要跨越文件系统边界 -e #指定使用rsh、ssh方式进行同步数据 -r #递归模式,包含目录及子目录中所有文件 -H #保留硬连接 -u #仅进行更新,跳过所有已经存在于DST,并且文件时间晚于要备份的文件(不覆盖更新的文件) -t #保留文件的时间标记 -z #在传输过程中进行压缩 -o #保留文件的属主(仅超级用户使用) -g #保留文件的属组(仅超级用户使用) -p #保留文件原的权限 --port=PORT #指定其他Rsync服务端口 --delete #删除目标目录有而源目录中没有的文件 --progress #显示传输过程 --exclude=PATTERN #指定排除不需要同步的文件模式 --include=PATTERN #指定不排除而需要同步的文件模式 --password-file=FILE #指定密码文件位置2、rsync主配置文件注释:
######全局参数 pid file= /var/run/rsync.pid port = 873 lock file= /var/run/lock.log log file= /var/log/rsync.log motd file= /etc/rsync/rsync.motd ######模块参数 [ALLEN] comment = "Web File" path = /web use chroot = no max connections = 10 readonly = no write only = yes list = no uid = root gid = root auth users= rsync secrets file= /etc/rsync/rsync.pass strict modes = yes hosts allow = 172.16.14.1 hosts deny = * ignore errors = yes timeout = 120 log format= %t %a %m %f%b全局参数:第2行~第6行
PID文件 服务端口 锁文件 日志文件 当客户端连接服务器时的通知消息文件模块参数:第8行~第26行
定义服务器要被同步的目录或文件,客户端可以直接指定该名称 描述信息 需要同步的目录 如果此项设置为yes相对安全一些,但在每次传输文件之前要先chroot到path参数指定的目录,要以root权限 最大并发连接 是否只读 是否可写 当客户端请求时是否允许列表形式查看 运行守护进程的uid 运行守护进程的gid 指定用户名列表,用逗号或空格分隔 指定一个包含“用户名:密码”的文件 此项检测密码文件的权限 允许连接的主机,可是为网段如:172.16.0.0/16 不允许连接rsync服务器的主机 数据传输时忽略IO错误 指定超时时间 指定日志格式:%h 远程主机名、%a 远程IP地址、%l 文件长度字符数、%p 该次rsync会话的进程id、%f 文件名、%P 模块路径、%t 当前时间、%u 认证的用户名(匿名用户时是null)、%b 实际传输的字节数;默认格式为:" %o %h [%a] %m (%u) %f %l"
三、rsync 的应用模式
rsync有4 种应用模式,第一种是shell应用模式,也称为本地模式;第二种是远程shell模式,它利用SSH 执行底层连接和加密传输;第三种是查询〈也叫列表〉模式,与ls 命令实现的功能类似;第四种是服务器模式,平时所说的架设rsync 服务器就是指这种模式。下面分别对这4 种模式进行介绍:第一种模式:本地Shell模式 本地Shell模式主要是复制一个目录中的文件到另一目录,如:
![](http://blog.51cto.com/attachment/201309/210730730.gif)
第二种模式:远程Shell模式 rsync远程Shell模式可以把本地目录同步到另一台主机系统中,如:
![](http://blog.51cto.com/attachment/201309/210811251.gif)
第三种模式:列表模式 rsync与ls命令有相似的功能,如:
![](http://blog.51cto.com/attachment/201309/210850835.gif)
第四种模式:服务器模式 这种模式是基于C/S模式的,在这种模式下,rsync在后台启动了一个守护进程,这个守护进程在rsync服务器端永久运行,用于接收文件传输请求,因此客户可以把文件发送给守护进程,也可以向守护进程请求文件。rsync服务器模式非常适合异地数据备份;我们在后面介绍四、Inotify简介rsync的优点与不足 与传统的cp 、tar 备份方式相比, rsync 具有安全性高、备份迅速、支持增量备份等优点,通过rsync 可以解决对实时性要求不高的数据备份需求,例如,定期地备份文件服务器数据到远端服务器,对本地磁盘定期进行数据镜像等。随着应用系统规模的不断扩大,对数据的安全性和可靠性提出了更高的要求, rsync 在高端业务系统中也逐渐暴露出了很多不足。首先, rsync 同步数据肘,需要扫描所有文件后进行比对,然后进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常辑时的,而且发生变化的往往是其中很少的一部分,因此rsync 是非常低效的方式。其次, rsync 不能实时监测、同步数据,虽然它可以通过Linux 守护进程的方式触发同步,但是两次触发动作一定会有时间差,可能导致服务器端和客户端数据出现不一致,无法在出现应用故障时完全恢复数据。基于以上原因, rsync+inotify 组合出现了!inotify简介 inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制, Linux 内核从2.6.13版本起,加入了对inotify的支持。通过inotify可以监控文件系统中添加、删除、修改、移动等各种细微事件,利用这个内核接口,第三方软件可以监控文件系统下文件的各种变化情况,inotify-tools就是这样的一个第三方软件。这样rsync 就可以实现触发式的文件同步,但是通过crontab 守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify 可以监控文件系统的各种变化,当文件有任何变动时,会触发rsync同步,这样刚好解决了同步数据的实时性问题。五、Inotify-tools工具使用介绍安装完成后,会生成inotifywait和inotifywatch两个命令: inotifywait用于等待文件或文件集上的一个待定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树; inotifywatch用于收集被监控的文件系统计数据,包括每个inotify事件发生多少次等信息从上面可知inotifywait是一个监控事件,可以配合shell脚本使用它。与它相关的参数:语法格式:inotifywait [-hcmrq][-e][-t][--format][-timefmt][...] -m: 即“--monitor” 表示始终保持事件监听状态。 -r: 即“--recursive” 表示递归查询目录 -q: 即“--quiet” 表示打印出监控事件 -o: 即“--outfile” 输出事情到一个文件而不是标准输出 -s: 即“--syslog” 输入错误信息到系统日志 -e: 即“--event”, 通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、close_write、move、close、unmount和attrib等 -format: 指定输出格式;常用的格式符如:%w:表示发生事件的目录 %f:表示发生事件的文件 %e:表示发生的事件 %T:使用由-timefmt定义的时间格式 -timefmt:指定时间格式,用于-format选项中的%T格式inotifywatch是收集数据的指令,它的相关参数:语法格式:inotifywatch[-hvzrqf][-e][-t][-a][-d][...] -fromfile:从文件中读取需要监控的文件或排除的文件,一个文件一行,排除的文件以"@"开头 -z: 即“-zero” 输出表格的行和列,即使元素为空 -r: 即“-recursive” 监视一个目录下的所有子目录 -t: 即“-timeout” 设置超时时间 -e: 即“-event” 只监听指定的事件六、Rsync+Inotify实现实时同步下面以一个案例的形式来安装配置Rsync+Inotify实时同步数据
![](http://blog.51cto.com/attachment/201309/211713277.gif)
源主机:系统 Centos6.4_x86_64 同步文件目录"/data"目标主机:系统 Centos6.4_x86_64 备份目录"/data"1、在目标主机上面以rpm方式安装rsync软件并配置,并让rsync以超级守护进程运行
######安装rsync软件并安装超级守护进程软件xinetd [root@localhost ~]# yum -y install rsync xinetd ######为rsync提供主配置文件,安装好默认没有配置文件 [root@localhost ~]# vim /etc/rsyncd.conf uid=nobody gid=nobody use chroot = no max connections = 3 strict modes = yes pid file= /var/run/rsync.pid log file= /var/log/rsync.log [data] path = /data ignort errors = yes timeout = 120 readonly= no write only = yes hosts allow = 172.16.0.0/16 hosts deny = * list = no uid = root gid = root auth users= allen secrets file= /etc/rsync.pass ######为rsync提供密码认证文件 [root@localhost ~]# echo "allen:Data14.3" > /etc/rsync.pass ######修改密码文件权限 [root@localhost ~]# chmod 600 /etc/rsync.pass ######让rsync开机自启动 [root@localhost ~]# chkconfig rsync on ######启动超级守护进程 [root@localhost ~]# service xinetd start ######查看是否为开机启动 [root@localhost ~]# chkconfig --list | grep rsync rsync: on2、查看进程有没有监控"873/tcp"端口,rsync默认端口为873;如:
![](http://blog.51cto.com/attachment/201309/211924853.gif)
3、在源主机上面安装rsync与inotify-tools,不用做任何配置:
[root@localhost ~]# yum -y install rsync inotify-tools4、编译同步脚本,设置权限并加入到开机启动:
[root@localhost ~]# vim rsync.sh #!/bin/bash Host=172.16.14.3 SDIR=/data DDIR=data /usr/bin/inotifywait -mrq --timefmt '%d/%m%y %H%M'--format '%T %w %f'-e modify,delete,create,attrib $SDIR | whileread files do/usr/bin/rsync -avz --delete--password-file=/root/rsync.pass $SDIR allen@${Host}::$DDIR &> /dev/null echo "${files} was rsyncd">> /tmp/rsyncd.log 2>&1 echo "+++++++++++++++++++++++++++++++++++++++" done #####创建密码文件 [root@localhost ~]# echo "Data14.3"> .rsync.pass ######修改密码文件权限并添加脚本执行权限 [root@localhost ~]# chmod 600.rsync.pass [root@localhost ~]# chmod +x rsync.sh ######加入开机启动 [root@localhost ~]# echo "/root/rsync.sh">> /etc/rc.d/rc.local5、执行同步脚本测试是否能成功同步:这里为了测试看到效果使用"bash -xrsync.sh"执行,如果正常执行脚本同步的话以后台形式运行:“/root/rsync.sh &”
![](http://blog.51cto.com/attachment/201309/212116661.gif)
![](http://blog.51cto.com/attachment/201309/212144316.gif)
6、在目标主机查看验证:
![](http://blog.51cto.com/attachment/201309/212209505.gif)
至此已经全部完成,如果需要同步到多台主机,类似目标主机的做法即可。如果做的过程中遇到问题可以留言...
相关文章推荐
- linux系统中rsync+inotify实现服务器之间文件实时同步
- rsync+inotify实现文件实时同步
- centos6.5 rsync+inotify实现服务器之间文件实时同步
- rsync+inotify实现服务器之间文件实时同步
- linux系统中rsync+inotify实现服务器之间文件实时同步
- centos6.5 rsync+inotify实现服务器之间文件实时同步
- rsync+inotify实现服务器之间文件实时同步
- 通过rsync+inotify实现多服务器文件的实时同步
- linux系统中rsync+inotify实现服务器之间文件实时同步
- rsync+inotify实现文件实时同步
- 【linux教程】inotify用法简介及结合rsync实现主机间的文件实时同步
- 利用rsync+inotify实现数据实时同步脚本文件
- 基于rsync+inotify实现文件实时同步
- rsync+inotify 实现服务器文件实时同步
- rsync+inotify实现服务器之间文件实时同步
- rsync+inotify实现服务器之间文件实时同步 [转]
- rsync+inotify实现服务器之间文件实时同步
- linux系统中rsync+inotify实现服务器之间文件实时同步
- rsync+inotify实现文件实时同步
- rsync+inotify实现文件实时同步