简介
Rsync (remote sync)是一款开源、快速,多功能、可实现增量的本地或远程数据镜像同步备份优秀工具。它可通过 LAN/WAN 快速同步多台主机间的文件。rsync 当前由 rsync.samba.org 维护。rsync 使用所谓的“rsync演算法”来使本地和远程主机之间的文件达到同步,该算法只传送两个文件中的不同部分,而不是每次都整份传送,因此速度相当快。
特点:
1、可以镜像保存整个目录树或文件系统;
2、可实现增量同步,既只同步发生变化的数据,因此数据传输效率很高;
3、可以借助于ssh实现安全数据传输,也可以通过直接的socket连接。;
4、支持匿名的或认证的进程模式传输,方便进行数据备份及镜像;
rsync命令的工作模式:
1、shell模式:也称作本地模式,类似cp;
2、远程shell模式:可以利用ssh协议承载其远程传输过程;
3、列表模式:仅列出源中的内容,使用选项-nv即可,类似ls;不仅可以看本地还可以看远端。
4、服务模式:此时rsync工作为守护进程,能接收客户端的数据同步请求;在使用时,可以在客户端使用rsync命令把文件发送给守护进程,也可以向服务器请求获取文件。服务器模式非常适合创建中心备份服务器或项目存储库。
rsync命令的选项:
-n: 同步测试,不执行真正的同步过程;
-v: --verbose,详细输出模式
-q: --quiet, 静默模式
-c: --checksum,开启校验功能,强制对文件传输进行校验
-r: --recursive,递归复制;
注意:rsync命令中,如果源路径是目录,且给复制路径时末尾有/,则会复制目录中的内容,而非目录本向;
如果末尾没有/,则会同步目录本身及目录中的所有文件;目标路径末尾是否有/无关紧要;
-a: --archive,归档,保留文件的原有属性;等同于-rlptgoD,使用此选项常用
-p:perms, 保留文件的权限;
-t: times,保留文件的时间戳;
-l: links,保留符号链接
-g: 保留文件的属组
-o: owner保留属主
-D:保留设备文件
-e ssh: 使用ssh作为传输承载;如果ssh端口不是22,可以用-e ‘ssh -p 522’
-z: 压缩后传输;
--progress: 显示进度条
--stats: 显示如何执行压缩和传输
--existing # 不同步新文件,只同步已存在目的端的文件
--ignore-existing # 不更新已存在文件,只同步新文件
--delete # 目的端删除源端不存在的文件,即保持和源端一致
--delete-before # 默认删除策略,同步前删除目的端文件
--delete-after # 删除策略,同步后删除目的端文件
--delete-excluded # 专门指定需在目的端删除的文件,后跟--exclude选项
--exclude=PATTERN # 源端匹配PATTERN模式的文件,屏蔽其同步
--exclude-from=FILE # 从文件中读取PATTERN
更多的详细信息,请通过man rsync来进行查看。
rsync的服务器模式:
rsync的服务模式,部署时分为rsync的服务端和rsync的客户端。需要注意的是,rsync 的服务端和客户端都是一个软件包,如果你启用了 rsync 的服务模式,则该主机就变成 rsync 服务器。因此我们需要将 rsync 分别安装于服务端和客户端,服务端和客户端使用同一个 rsync 软件包来实现远程镜像和定期同步更新。
rsync 服务端可同时备份多个客户端的数据,多个服务端备份一个客户端的数据。rsync 默认端口为 873,服务器在该端口接收客户的匿名或者认证方式的备份请求。
rsync 服务端在使用之前需要进行必要的配置,其配置文件为 /etc/rsyncd.conf,该文件默认没有,需要自己手动创建。rsync服务端通过/etc/rsyncd.conf进行认证、访问、日志记录等控制,该配置文件包括全局参数、模块参数等设置。
实验环境:a、防火墙iptables与Selinux已关闭 b、操作系统CentOS6.5-X86_64
1、设定rsync服务器端,安装xinted服务
# yum -y install xinetd
2、为rsync提供配置文件
/etc/rsyncd.conf
配置文件分两段:
全局配置段:1个
共享配置段:多个
[SHARE_NAME]
配置示例:
创建配置文件
# vim /etc/rsyncd.conf
3、创建密码文件
vim /etc/rsyncd.passwd
# 格式:username:password
# vi /etc/rsyncd.passwd
tom:123456
jerry:123456
# chmod 600 /etc/rsyncd.passwd
注意:此文件不能允许其它用户有访问权限,且密码不能超过8个字符,每一行一个用户;
4、启动服务
# chkconfig rsync on
# service xinetd start
注:rsync被xinetd调用后监听在873/tcp端口
客户端配置
客户端也必须配置密码文件,该文件里面仅存放密码即可
格式:password
# vim /etc/rsyncd.passwd
123456
123456
# chmod 600 /etc/rsyncd.passwd
rsync 在服务器端以doemon形式存在时,客户端同步文件的命令
Pull: 拉取
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
例如:
# rsync -arv --password-file=/etc/rsyncd.passwd tom@172.16.19.11::tools /tmp
# rsync -arv --password-file=/etc/rsyncd.passwd rsync://tom@172.16.19.11/tools /tmp
Push: 推送
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
例如:
# rsync -va --password-file=/etc/rsyncd.passwd /root/install.log tom@172.16.19.11::tools
# rsync -va --password-file=/etc/rsyncd.passwd /root/install.log rsync://tom@172.16.19.11/tools
在客户端,使用周期性任务计划crontab;
在生产环境中,我们可以专门部署一台rsync服务器,专门负责接收业务服务器的日志归档和配置文件归档。我们也可以让一台web服务器专门用来做分发的时候。 但是我们知道,我们的日志归档都是在凌晨,因此我们不可能天天晚上去做向rsync服务端的推送操作。并且,如果日常web内容做分发的次数频繁的话,我们不可能每时每刻都盯着它去做手动推送。因此我们可以借助crontab计划任务来实现定时推送。
# crontab -e
*/10 * * * * /usr/bin/rsync -a --password-file=/etc/rsyncd.passwd tom@172.16.19.11::tools /data &>/dev/null
rsync+inotify实现数据实时同步
简介
rsync的传输效率是很高的,但rsync也有缺点,最大的问题就是每次执行rsync命令都会遍历目标目录,当文件不多时,这没什么问题,一旦文件数到了一定规模,那么每次遍历都会消耗很多资源,如果只对经常改动的目录进行同步,也可以忽略这个问题,如果每次改动的目录多较大,那么就要用到inotify了,Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux内核从2.6.13起,加入了对Inotify的支持,通过Inotify可以监控文件系统中的添加、删除、修改、移动等各种事件
inotify是Linux核心子系统之一,做为文件系统的附加功能,它可监控 文件系统并将异动通知应用程序。inotify的主要应用于桌面搜索软件,得以针对有变动的文件重新索引,而不必没有效率地每隔几分钟就要扫描整个文件系统。相较于主动轮询文件系统,通过操作系统主动告知文件异动的方式,可以在文件更动后一秒内更新索引。此外,诸如:更新目录查看、重新加载设置文件、追踪变更、备份、同步甚至上传...等许多自动化作业流程,都可因而受惠。
原理说明
因为是发起rsync的主动同步,而且是推送(即PUSH)数据,只能是从rsync客户端向rsync服务器端推送数据,这点与rsync+crontab形式的从服务器端拉取(即PULL)数据不同,区别如下
参考:http://xxrenzhe.blog.51cto.com/4036116/1393047
配置inotify服务
1、rsync的服务器端和客户端的配置与上面所述基本相同
2、安装inotify-tools
在rsync客户端不再是拉取数据,而是推送数据,首先安装inotify-tools,其中包含所需的inotifywait文件系统监控工具
# yum install inotify-tools
然后配置运行一个后台程序,用以实时监控待备份的数据目录,下面用例中监控本地/tmp目录,将数据同步至rsyns服务器的tools模块对应的目录下
# vim /etc/init.d/rsyncd
1 #!/bin/bash 2 #rsync server端模块名称 3 SModule=tools 4 # rsync client端同步目录 5 DDIR=/tmp 6 7 /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e modify,delete,create,attrib $DDIR | while read file ; 8 do /usr/bin/rsync -va --password-file=/etc/rsyncd.passwd --delete $DDIR tom@172.16.19.11::$SModule 9 done
# chmod +x /etc/init.d/rsyncd
inotifywait参数解释
-m:持续监控;若无-m选项,则inotifywait服务监控到一个文件事件后即退出;
-r:递归监控,监控DDIR目录及其子目录
-q:静默输出,不显示inotifywait启动时的提示信息
-e: 定义需要监控的事件,包括修改、删除、创建、属性改变等