一、什么是rsync
rsync,remote synchronize 一款远程同步功能的软件。Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。 Rsync server 会打开一个 873 的服务通道 (port) ,等待对方 Rsync 连接。连接时, Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。 Rsync 支持大多数的类 Unix 系统,无论是 Linux 、 Solaris 还是 BSD 上都经过了良好的测试。此外,它在 windows 平台下也有相应的版本,比较知名的有 cwRsync 和 Sync2NAS 。
软件下载:
Windows版本:windows版rsync下载地址 分为客户端和服务器端,都要下载
Linux版本:linux版rsync下载 大部分linux自带rsync。
从上到下:win客户端,win服务端,linux版
二、Windows下使用
本地同步需要客户端就行。远程同步需要服务端和客户端。测试的话,用一台电脑就行,就是在本机同时安装客户端和服务器端。
(a)先安装好客户端,cmd命令到安装路径的bin路径下
该例执行指令:rsync -vrtopg -progress --delete /cygdrive/e/test/rsync/a /cygdrive/e/test/rsync/b (a目录后没有加斜杠)
效果:将a目录同步到b目录下,此时b目录下多了a目录及a目录下的内容。
该例执行指令:rsync -vrtopg -progress --delete /cygdrive/e/test/rsync/a/ /cygdrive/e/test/rsync/b (a目录后有加斜杠)
效果:将a目录下的内容同步到b目录下,此时先删除了b目录下的a目录,然后将a目录下的内容同步到b目录。此时a,b目录是同级状态。
注:目录的格式很明了,主要就是前面加上/cygdrive/,linux下是不需要的。
这里填写操作系统用户名及密码,如果填写不存在的,rsync会创建这个用户(杀毒软件会提示被入侵...而且创建无用用户也不好)。
在此特别说明,这个版本貌似不能再win8上使用,我试了一下午。。。都要崩溃了。win7和xp是可以的,我都试了。
安装完毕后,先配置服务端的配置文件(安装路径ICW下):rsyncd.conf
配置文件的简要说明(只说明我常用的):
------------------------------------------------------------------------------
port:指定后台程序使用的端口号,默认为873。(得让防火墙允许开发该端口!)
log file:指定rsync的日志文件,如/var/log/rsyncd.log
uid:指定该模块传输文件时守护进程应该具有的uid,默认nobody,win下不填会报错,uid=0
gid:指定该模块传输文件时守护进程应该具有的gid,默认nobody,win下不填会报错,gid=0
hosts allow :该选项指定哪些IP的客户允许连接该模块。客户模式定义可以是以下形式:单个IP地址,例如:192.167.0.1; 整个网段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0 ,多个IP或网段需要用空格隔开,“*”则表示所有,默认是允许所有主机连接。
read only:该选项设定是否允许客户上载文件。如果为true那么任何上载请求都会失败,如果为false并且服务器目录读写权限允许那么上载是允许的。默认值为true。
auth users:该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。
secrets file :该选项指定一个包含定义用户名:密码对的文件。只有在"auth users"被定义时,该文件才有作用。文件每行包含一个username:passwd对。注意:该文件的权限一定要是600,否则客户端将不能连接服务器。
strict modes :该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true。
------------------------------------------------------------------------------
该句执行指令:rsync -rv --delete /cygdrive/d/test/a/ rsync://127.0.01:873/test 等价于 rsync -rv --delete /cygdrive/d/test/a/ /cygdrive/d/test/b
远程同步的格式有很多种,其实只要记住一种就成。我习惯用这种:rsync://【IP】:【PORT】/【路径名】
rsync命令的简要说明(只说明我常用的):
------------------------------------------------------------------------------
-v, --verbose 详细模式输出
-z, --compress 对备份的文件在传输时进行压缩处理
-r, --recursive 对子目录以递归模式处理
-c, --checksum 打开校验开关,强制对文件传输进行校验
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-t, --times 保持文件时间信息
--delete 删除那些“同步路径”中“源路径”没有的文件
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--progress 在传输时现实传输过程
--port=PORT 指定其他的rsync服务端口
------------------------------------------------------------------------------
三、Linux下使用rsync
首先确认本机是否安装:
如果没有就自己安装下吧。此时就已经可以本地同步了,相当于拥有了客户端。
命令和windows基本一样,只是路径前不需要加/cygdrive/
接下来,“安装”服务端,这个超简单,加个文件rsyncd.conf(同windows)到etc路径下就行
添加后执行:rsync --daemon --config=/etc/rsyncd.conf
验证端口是否开放:netstat -na|grep 873。然后服务就启动了,就这么简单。
执行:rsync -vr /var/tmp/a/ 127.0.0.1::test。效果同上。
四、rsync经验总结
Rsync在传输时,不启用压缩,比启用压缩要快将近10倍(夸张了...)
压缩使用的场合:低带宽,或对带宽有要求。传输文件压缩比率大
非压缩适用的场合:带宽充足,传输文件比较大,传输文件压缩比率小
建议不启用压缩
-----------------------
Rsync在传输时,启用数据校验,比不启用数据校验多耗时30%
文件校验使用的场合:对文件完整性要求高
非文件校验适用的场合:对文件完整性要求低
建议使用文件校验
------------------------
SSH隧道传输,速度比rsync server要快,但CPU资源消耗比较高,加密耗时较多
SSH隧道传输适用的场合:安全性要求比较高,对CPU资源消耗要求低
rsync server适用的场合:对安全性要求比较低,对CPU资源消耗要求高。
建议使用SSH加密隧道模式传输
------------------------
在与远端进行数据同步时,我们一般采用ssh通道,使用 -e ssh 选项可以完成该功能:
$ rsync -avz -e ssh /root/temp/ [email protected]:/home/lx/tmp/
--------------------------
1、 如果对数据安全性要求低,建议选择rsync server模式,未启用压缩,启用数据校验,修改TCP/IP协议字段号为29。
2、 如果对数据安全性要求高,建议选择SSH隧道加密传输,arcfour弱加密算法,未启用压缩,启用数据校验,修改TCP/IP协议字段号为29
3、 如果是第一次推送数据,建议加上-W参数,意思是不检查文件更新,直接传送整个文件,这样可以减少文件检测时间,节省程序总运行时间。
4、 如果想进一步节省程序运行时间,可在使用checksum的同时,加上—block-size=512这个参数(默认是700)。数值建议是500以上,并且是2的N次方,最大不超过2048。推荐512,1024,2048这三个值。
5、 在传输数据时,为了不影响线上正常业务,建议根据线上实际情况,通过—bwlimit=KPBS参数对带宽进行限制
Rsync的缺陷在于无法事件触发式的监听,我的下篇博客,将通过java来实现跨平台的文件监听。