1、Rsync概述web
2、Rsync命令选项及配置文件介绍算法
3、Rsync的应用模式shell
4、Inotify简介vim
5、Inotify-tools工具使用介绍windows
6、rsync+inotify实现实时同步安全
1、rsync概述bash
rsync是类Unix系统下的数据镜像备份工具,它能很轻松的实现本地镜像与远程同步文件;从软件的命名上就能看得出来——remote sync。服务器
什么是rsync并发
Rsync是一个远程数据同步工具,可经过LAN/WAN 快速同步多台主机间的文件。Rsync使用所谓的“rsync 算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不一样部分,而不是每次都整份传送,所以速度至关快。ssh
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链接传输文件
无须特殊权限便可安装
支持匿名传输
2、Rsync命令选项及配置文件介绍
一、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 #指定密码文件位置
二、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"
3、rsync 的应用模式
rsync有4 种应用模式,第一种是shell应用模式,也称为本地模式;第二种是远程shell模式,它利用SSH 执行底层链接和加密传输;第三种是查询〈也叫列表〉模式,与ls 命令实现的功能相似;第四种是服务器模式,平时所说的架设rsync 服务器就是指这种模式。下面分别对这4 种模式进行介绍:
第一种模式:本地Shell模式
本地Shell模式主要是复制一个目录中的文件到另外一目录,如:
第二种模式:远程Shell模式
rsync远程Shell模式能够把本地目录同步到另外一台主机系统中,如:
第三种模式:列表模式
rsync与ls命令有类似的功能,如:
第四种模式:服务器模式
这种模式是基于C/S模式的,在这种模式下,rsync在后台启动了一个守护进程,这个守护进程在rsync服务器端永久运行,用于接收文件传输请求,所以客户能够把文件发送给守护进程,也能够向守护进程请求文件。rsync服务器模式很是适合异地数据备份;咱们在后面介绍
4、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同步,这样恰好解决了同步数据的实时性问题。
5、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” 只监听指定的事件
6、Rsync+Inotify实现实时同步
下面以一个案例的形式来安装配置Rsync+Inotify实时同步数据
源主机:系统 Centos6.4_x86_64 同步文件目录"/data"
目标主机:系统 Centos6.4_x86_64 备份目录"/data"
一、在目标主机上面以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: on
二、查看进程有没有监控"873/tcp"端口,rsync默认端口为873;如:
三、在源主机上面安装rsync与inotify-tools,不用作任何配置:
[root@localhost ~]# yum -y install rsync inotify-tools
四、编译同步脚本,设置权限并加入到开机启动:
[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.local
五、执行同步脚本测试是否能成功同步:
这里为了测试看到效果使用"bash -xrsync.sh"执行,若是正常执行脚本同步的话之后台形式运行:“/root/rsync.sh &”
六、在目标主机查看验证:
至此已经所有完成,若是须要同步到多台主机,相似目标主机的作法便可。若是作的过程当中遇到问题能够留言...