1、前言

  基于LAN或WAN的网络应用之间进行数据传输或者同步非常普遍,比如远程数据镜像、备份、复制、同步,数据下载、上传、共享等等。对此,最简单、直接的做法是对数据进行完全复制。然而,数据在网络上来回被复制多次后就会存在大量副本,很多情形下这些文件副本之间仅有很小的差异,很可能是从同一个文件版本演化而来。另一方面,如果对文件进行完全复制,在文件较大的情况下,会占用大量网络带宽,同步时间也会较长。目前,广域网WAN的带宽与访问延迟仍然是急需解决的问题,完全复制使得很多网络应用无法提供良好的服务质量。Rsync是类Unix下常见的一种数据同步算法,它仅传输差异数据,从而节省网络带宽并提高效率。

2、算法介绍

2.1 分块Checksum算法

  首先,rsync会把目标端fileDst的文件平均切分成若干个小块,每块的默认大小为700个字节(最后一块会小于这个数),然后对每块计算两个checksum:一个是32位的rolling checksum,是弱checksum,其使用的算法是Mark Adler发明的adler-32算法。另一个是强checksum,128位的md5 hash算法。(adler-32算法不属于本文讨论的主要内容,有兴趣可参考http://rsync.samba.org/tech_report/node3.html)

  adler-32作为快算法是用来鉴别文件块的不同,但是弱的adler32算法碰撞概率太高了,所以还要引入强的md5 checksum算法以保证两文件块是相同的。也就是说,弱的rolling checksum是用来区别不同,而强的md5 checksum是用来确认相同。

2.2 checksum查找算法

  目标端会把fileDst的一个checksum列表传给源端,这个列表中的每一项包含三个属性:rolling checksum(32bits)、md5 checksume(128bits)、文件块编号。源端rsync接收到这个列表后,会对源端fileSrc做同样的checksum,然后和目标端fileDst的checksum做对比,通过比对就可以感知哪些文件做了变动。为获得O(1)时间复杂度的查找性能,同步源端fileSrc拿到目标端fileDst的checksum数组后,会把这个数据存到一个hash table中。

2.3 比对算法

  (1)取fileSrc的第一个文件块(假设是512个长度),也就是从fileSrc的第1个字节到第512个字节,取出来后做rolling checksum计算。计算好的值到hash表中查。

  (2)如果查到了,说明fileDst中有潜在相同的文件块,就再比较md5的checksum。因为rolling checksume只有32位,发生碰撞的概率非常大,于是还要算md5的128bits的checksum,这样一来发生碰撞的概率就可以忽略了。如果rolling checksum和md5 checksum都相同,这说明在fileDst中有相同的块,我们需要记下这一块在fileDst下的文件编号。

  (3)如果fileSrc的rolling checksum 没有在hash table中找到,那就表明这一文件块不存在于目标端。总之,只要rolling checksum 或 md5 checksum 其中有一个在目标端的checksum hash表中找不到匹配项,那么就会触发算法对fileSrc的滚动计算动作。即算法会住后滑动 1个字节,取fileSrc中字节2-513的文件块要做checksum,重新执行第一步的流程。

  (4)当源端的fileSrc完全做完一遍rolling checksum后,就可以找出源端fileSrc与目标端fileDst不相同的文件块了,也就是要同步到目标端的文件块。之后进行传输。

  (5)算法的简要流程如下图所示:

3、安装配置

3.1 安装

  下载rsync-3.0.4.tar.gz ,地址:http://rsync.samba.org/ftp/rsync/src/rsync-3.0.4.tar.gz

  1. 解压安装包,命令:tar xvzf rsync-3.0..tar.gz
  2. 进入到rsync文件夹执行:
  3. cd rsync-3.0.
  4. ./configure --prefix=/usr/local/rsync
  5. make
  6. make install

3.2 配置

  Rsync安装完成之后默认没有配置文件,需要自己创建。

3.2.1 创建一系列文件夹

  1. mkdir /usr/local/rsync/logs
  2. mkdir /usr/local/rsync/etc
  3. mkdir /usr/local/rsync/run

3.2.2 添加配置文件

  vim  /usr/local/rsync/etc/rsyncd.conf   内容如下:

  1. uid = root
  2. gid = root
  3. port =
  4. use chroot = no
  5. hosts allow = 192.168.31.22
  6. #hosts deny = 192.168.10.0/
  7. pid file = /usr/local/rsync/run/rsyncd.pid
  8. lock file = /usr/local/rsync/run/rsync.lock
  9. log file = /usr/local/rsync/logs/rsyncd.log
  10. ignore errors
  11.  
  12. [rsynctest]
  13. path = /home/laizy/rsync/rsynctest
  14. auth users = root
  15. secrets file = /usr/local/rsync/rsyncd.pass
  16. read only = no

3.2.3 添加密码文件

  vim /usr/local/rsync/rsyncd.pass   格式为——用户名:密码。示例:

  1. root:

3.2.4 为密码文件赋予权限

  1. chmod /usr/local/rsync/rsyncd.pass

3.2.5 安全配置

  只允许IP为192.168.31.21的主机连入rsync server:

  1. iptables -A INPUT -p tcp -s ! 192.168.31.22 --dport -j DROP

3.2.6 启动服务

  1. rsync --daemon --config=/usr/local/rsync/etc/rsyncd.conf &

4、命令详细说明

  1. v、–verbose详细模式输出
  2.  
  3. q、–quiet精简输出模式
  4.  
  5. c、–checksum打开校验开关,强制对文件传输进行校验
  6.  
  7. a、–archive归档模式,表示以递归方式传输文件,并保持所有文件属性
  8.  
  9. r、–recursive对子目录以递归模式处理
  10.  
  11. R、–relative使用相对路径信息
  12.  
  13. b、–backup创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename
  14.  
  15. u、–update仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件
  16.  
  17. l、–links保留软链接
  18.  
  19. L、–copy-links想对待常规文件一样处理软链结
  20.  
  21. copy-unsafe-links仅仅拷贝指向SRC路径目录树以外的链结
  22.  
  23. safe-links忽略指向SRC路径目录树以外的链结
  24.  
  25. H、–hard-links保留硬链结
  26.  
  27. p、–perms保持文件权限
  28.  
  29. o、–owner保持文件属主信息
  30.  
  31. g、–group保持文件属组信息
  32.  
  33. D、–devices保持设备文件信息
  34.  
  35. t、–times保持文件时间信息
  36.  
  37. W、–whole-file拷贝文件,不进行增量检测
  38.  
  39. x、–one-file-system不要跨越文件系统边界
  40.  
  41. B、–block-size=SIZE检验算法使用的块尺寸,默认是700字节
  42.  
  43. e、–rsh=COMMAND指定替代rshshell程序
  44.  
  45. rsync-path=PATH指定远程服务器上的rsync命令所在路径信息
  46.  
  47. C、–cvs-exclude使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
  48.  
  49. existing仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
  50.  
  51. delete删除那些DST中有,而SRC没有的文件,但不会删除任何源数据
  52.  
  53. delete-excluded同样删除接收端那些被该选项指定排除的文件
  54.  
  55. delete-after传输结束以后再删除
  56.  
  57. ignore-errors即使出现IO错误也进行删除
  58.  
  59. max-delete=NUM最多删除NUM个文件
  60.  
  61. partial保留那些因故没有完全传输的文件,以加快随后的再次传输
  62.  
  63. force强制删除目录,即使不为空
  64.  
  65. numeric-ids不将数字的用户和组ID匹配为用户名和组名
  66.  
  67. timeout=TIMEIP超时时间,单位为秒
  68.  
  69. I、–ignore-times不跳过那些有同样的时间和长度的文件
  70.  
  71. size-only当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
  72.  
  73. modify-window=NUM决定文件是否时间相同时使用的时间戳窗口,默认为0
  74.  
  75. Ttemp-dir=DIRDIR中创建临时文件
  76.  
  77. compare-dest=DIR同样比较DIR中的文件来决定是否需要备份
  78.  
  79. P等同于–partialprogress显示备份过程
  80.  
  81. z、–compress对备份的文件在传输时进行压缩处理
  82.  
  83. exclude=PATTERN指定排除不需要传输的文件模式
  84.  
  85. include=PATTERN指定不排除而需要传输的文件模式
  86.  
  87. exclude-from=FILE排除一个指定文件名中指定模式匹配的文件
  88.  
  89. include-from=FILE不排除一个指定文件名中指定模式匹配的文件
  90.  
  91. version打印版本信息
  92.  
  93. address绑定到特定的地址
  94.  
  95. config=FILE指定其他的配置文件,不使用默认的rsyncd.conf文件
  96.  
  97. port=PORT指定其他的rsync服务端口
  98.  
  99. blocking-io对远程shell使用阻塞IO
  100.  
  101. stats给出某些文件的传输状态
  102.  
  103. log-format=FORMAT指定日志文件格式
  104.  
  105. password-file=FILEFILE中得到密码
  106.  
  107. bwlimit=KBPS限制I/O带宽,KBytespersecond
  108.  
  109. h、–help显示帮助信息

5、常见使用实例

5.1 将本地的文件,同步到远程机器

  1. rsync -avz --password-file=/root/rsyncd.pass /root/temp/ root@192.168.31.22:/home/laizy/tmp/

调换source和destination的位置,亦可完成远程机器到本地的数据同步。

5.2 使用ssh通道进行数据同步

  1. rsync -avz --password-file=/root/rsyncd.pass -e ssh /root/temp/ root@192.168.31.22:/home/laizy/tmp/

5.3 删除不存在于源目录的目的地文件

  1. rsync -avz --password-file=/root/rsyncd.pass --delete /var/opt/laizy/ /root/temp/

5.4 同步时不在目的地创建新文件

  1. rsync -avz --password-file=/root/rsyncd.pass --existing /var/opt/lx/ /root/temp/

只对目的地已经有的文件进行同步,而不理会源目录新增的文件。

5.5 限制传输文件的大小

  1. rsync -avz --password-file=/root/rsyncd.pass --max-size='100K' /var/opt/lx/ /root/temp/

以上命令限制传输的文件大小只能小于或等于100K,另可以使用M和G作为大小单位。

5.6全拷贝

  1. rsync -avzW --password-file=/root/rsyncd.pass /var/opt/lx/ /root/temp/

默认情况下 rsync 采用增量拷贝,这样能节省带宽,在所同步文件不大的情况下,我们可以通过 -W 选项实现全拷贝。

Rsync原理介绍及配置应用的更多相关文章

  1. Rsync服务介绍与配置

    Rsync 简要介绍 rsync 是一个用于增量文件传输的开源工具,不得不说,rsync简直是不同服务器间传输文件.同步文件的利器.与FTP相比,它具有非常简单的安装和配置方法.而且,rsync可以只 ...

  2. LVS负载均衡IP隧道模式原理介绍以及配置实战

    LVS 基本工作原理 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP,将数 ...

  3. LVS负载均衡NAT模式原理介绍以及配置实战

    LVS基本原理 流程解释: 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP ...

  4. rsync的介绍及参数详解,配置步骤,工作模式介绍

    rsync的介绍及参数详解,配置步骤,工作模式介绍 rsync是类unix系统下的数据镜像备份工具.它是快速增量备份.全量备份工具. Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主 ...

  5. Redis之哨兵机制(sentinel)——配置详解及原理介绍

    说到Redis不得不提哨兵模式,那么究竟哨兵是什么意思?为什么要使用哨兵呢? 接下来一一为您讲解: 1.为什么要用到哨兵 哨兵(Sentinel)主要是为了解决在主从(master-slave)复制架 ...

  6. 03 Yarn 原理介绍

    Yarn 原理介绍 大纲: Hadoop 架构介绍 YARN 产生的背景 YARN 基础架构及原理   Hadoop的1.X架构的介绍   在1.x中的NameNodes只可能有一个,虽然可以通过Se ...

  7. 04 MapReduce原理介绍

    大数据实战(上) # MapReduce原理介绍 大纲: * Mapreduce介绍 * MapReduce2运行原理 * shuffle及排序    定义 * Mapreduce 最早是由googl ...

  8. [转]MySQL主从复制原理介绍

    MySQL主从复制原理介绍 一.复制的原理 MySQL 复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以 ...

  9. 液晶常用接口“LVDS、TTL、RSDS、TMDS”技术原理介绍

    液晶常用接口“LVDS.TTL.RSDS.TMDS”技术原理介绍 1:Lvds Low-Voltage Differential Signaling 低压差分信号 1994年由美国国家半导体公司提出之 ...

随机推荐

  1. EF Code First教程-02.1 Fluent API约定配置

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  2. nginx + keepalived 双机热备

    序 双机热备是指两台机器都在运行,但并非两台机器同时在提供服务. 当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,且切换的时间非常短. keepalived的工作原理是VRRP—— ...

  3. ASP.NET MVC Error

    Error Handler http://prideparrot.com/blog/archive/2012/5/exception_handling_in_asp_net_mvc http://ww ...

  4. 配置和使用buffer cache

    存放从磁盘读取的数据.排序和并行读不会使用buffer cache 可以从v$db_cache_advice或者buffer cache的命中率来检查buffer cache设置是否合理 查看v$db ...

  5. Leetcode: Insert Delete GetRandom O(1)

    Design a data structure that supports all following operations in average O(1) time. insert(val): In ...

  6. CareerCup: 17.14 minimize unrecognized characters

    Oh, no! You have just completed a lengthy document when you have an unfortu- nate Find/Replace misha ...

  7. 模拟退火法(吊打XXX)Bzoj3680

    3680: 吊打XXX Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge Submit: 308  Solved: 94 [Subm ...

  8. Winform ListView 元素拖动

    //ListView 属性 /* AllowDrop : True */ ListView objLVDrag; private void listView_DragDrop(object sende ...

  9. Java基础(60):Java打包生成Jar和Javadoc说明文档,以及在另外的工程中导入和使用自己的Jar

    一.Jar包的导出 1.在Package Explorer中选中项目,右键,点击“Export”   2.在弹出框一次选择Java-->JAR file,点击Next   3.在新弹出的窗口选择 ...

  10. vmware ubuntu server 联网

    查看本地ip 直接输入命令 ifConfig 只有 lo ,而没有eth0和eth1: 输入命令ifconfig -a,lo.eth0皆存在: 但是eth0 完全没有ip地址等,可以通过修改 /etc ...